mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-27 03:19:35 +03:00
dbuf_try_add_ref minor bug fixes
- Don't check db->bb_blkid, but use the blkid argument instead. Checking db->db_blkid may be unsafe since we doesn't yet have a hold on the dbuf so its validity is unknown. - Call mutex_exit() on found_db, not db, since it's not certain that they point to the same dbuf, and the mutex was taken on found_db. Signed-off-by: Ned Bass <bass6@llnl.gov> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Issue #3443
This commit is contained in:
parent
4f38c25910
commit
d617648c7f
@ -2251,7 +2251,7 @@ dbuf_try_add_ref(dmu_buf_t *db_fake, objset_t *os, uint64_t obj, uint64_t blkid,
|
|||||||
dmu_buf_impl_t *found_db;
|
dmu_buf_impl_t *found_db;
|
||||||
boolean_t result = B_FALSE;
|
boolean_t result = B_FALSE;
|
||||||
|
|
||||||
if (db->db_blkid == DMU_BONUS_BLKID)
|
if (blkid == DMU_BONUS_BLKID)
|
||||||
found_db = dbuf_find_bonus(os, obj);
|
found_db = dbuf_find_bonus(os, obj);
|
||||||
else
|
else
|
||||||
found_db = dbuf_find(os, obj, 0, blkid);
|
found_db = dbuf_find(os, obj, 0, blkid);
|
||||||
@ -2261,7 +2261,7 @@ dbuf_try_add_ref(dmu_buf_t *db_fake, objset_t *os, uint64_t obj, uint64_t blkid,
|
|||||||
(void) refcount_add(&db->db_holds, tag);
|
(void) refcount_add(&db->db_holds, tag);
|
||||||
result = B_TRUE;
|
result = B_TRUE;
|
||||||
}
|
}
|
||||||
mutex_exit(&db->db_mtx);
|
mutex_exit(&found_db->db_mtx);
|
||||||
}
|
}
|
||||||
return (result);
|
return (result);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user