diff options
author | Chunwei Chen <[email protected]> | 2016-07-12 12:23:43 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2016-07-14 16:25:04 -0700 |
commit | 02de3e3c5d54bd545b34cccfd35ace80edd1f864 (patch) | |
tree | e8eb009f7fa5705f8db3d417fe427db562d9506e | |
parent | 8887c7d778dce8cadee422de97e557a224555bdf (diff) |
Fix dbuf_stats_hash_table_data race
Dropping DBUF_HASH_MUTEX when walking the hash list is unsafe. The dbuf
can be freed at any time.
Signed-off-by: Chunwei Chen <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #4846
-rw-r--r-- | module/zfs/dbuf_stats.c | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/module/zfs/dbuf_stats.c b/module/zfs/dbuf_stats.c index afdf828ed..6f39f80e5 100644 --- a/module/zfs/dbuf_stats.c +++ b/module/zfs/dbuf_stats.c @@ -148,7 +148,6 @@ dbuf_stats_hash_table_data(char *buf, size_t size, void *data) } mutex_enter(&db->db_mtx); - mutex_exit(DBUF_HASH_MUTEX(h, dsh->idx)); if (db->db_state != DB_EVICTING) { length = __dbuf_stats_hash_table_data(buf, size, db); @@ -157,7 +156,6 @@ dbuf_stats_hash_table_data(char *buf, size_t size, void *data) } mutex_exit(&db->db_mtx); - mutex_enter(DBUF_HASH_MUTEX(h, dsh->idx)); } mutex_exit(DBUF_HASH_MUTEX(h, dsh->idx)); |