From: Chunwei Chen Date: Tue, 12 Jul 2016 19:23:43 +0000 (-0700) Subject: Fix dbuf_stats_hash_table_data race X-Git-Tag: zfs-0.7.0-rc1~94 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=02de3e3c5d54bd545b34cccfd35ace80edd1f864;p=zfs 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 Signed-off-by: Brian Behlendorf Closes #4846 --- 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));