mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-26 12:12:13 +03:00
3145 single-copy arc 3212 ztest: race condition between vdev_online() and spa_vdev_remove() Reviewed by: Matt Ahrens <matthew.ahrens@delphix.com> Reviewed by: Adam Leventhal <ahl@delphix.com> Reviewed by: Eric Schrock <eric.schrock@delphix.com> Reviewed by: Justin T. Gibbs <gibbs@scsiguy.com> Approved by: Eric Schrock <eric.schrock@delphix.com> References: illumos-gate/commit/9253d63df408bb48584e0b1abfcc24ef2472382e illumos changeset: 13840:97fd5cdf328a https://www.illumos.org/issues/3145 https://www.illumos.org/issues/3212 Ported-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #989 Closes #1137
This commit is contained in:
committed by
Brian Behlendorf
parent
753c38392d
commit
1eb5bfa3dc
+18
-1
@@ -2189,7 +2189,24 @@ dbuf_rele_and_unlock(dmu_buf_impl_t *db, void *tag)
|
||||
dbuf_evict(db);
|
||||
} else {
|
||||
VERIFY(arc_buf_remove_ref(db->db_buf, db) == 0);
|
||||
if (!DBUF_IS_CACHEABLE(db))
|
||||
|
||||
/*
|
||||
* A dbuf will be eligible for eviction if either the
|
||||
* 'primarycache' property is set or a duplicate
|
||||
* copy of this buffer is already cached in the arc.
|
||||
*
|
||||
* In the case of the 'primarycache' a buffer
|
||||
* is considered for eviction if it matches the
|
||||
* criteria set in the property.
|
||||
*
|
||||
* To decide if our buffer is considered a
|
||||
* duplicate, we must call into the arc to determine
|
||||
* if multiple buffers are referencing the same
|
||||
* block on-disk. If so, then we simply evict
|
||||
* ourselves.
|
||||
*/
|
||||
if (!DBUF_IS_CACHEABLE(db) ||
|
||||
arc_buf_eviction_needed(db->db_buf))
|
||||
dbuf_clear(db);
|
||||
else
|
||||
mutex_exit(&db->db_mtx);
|
||||
|
||||
Reference in New Issue
Block a user