From 3fcfd2fdb7206f7c589fe6164df5f4a7283d1ccc Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Wed, 30 Aug 2023 15:32:42 +0200 Subject: [PATCH] dmu_buf_will_clone: change assertion to fix 32-bit compiler warning Building `module/zfs/dbuf.c` for 32-bit targets can result in a warning: In file included from /workspace/src/sys/contrib/openzfs/include/sys/zfs_context.h:97, from /workspace/src/sys/contrib/openzfs/module/zfs/dbuf.c:32: /workspace/src/sys/contrib/openzfs/module/zfs/dbuf.c: In function 'dmu_buf_will_clone': /workspace/src/sys/contrib/openzfs/lib/libspl/include/assert.h:116:33: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast] 116 | const uint64_t __left = (uint64_t)(LEFT); \ | ^ /workspace/src/sys/contrib/openzfs/lib/libspl/include/assert.h:148:25: note: in expansion of macro 'VERIFY0' 148 | #define ASSERT0 VERIFY0 | ^~~~~~~ /workspace/src/sys/contrib/openzfs/module/zfs/dbuf.c:2704:9: note: in expansion of macro 'ASSERT0' 2704 | ASSERT0(dbuf_find_dirty_eq(db, tx->tx_txg)); | ^~~~~~~ This is because `dbuf_find_dirty_eq()` returns a pointer, which if pointers are 32-bit results in a warning about the cast to `uint64_t`. Instead, use the regular `ASSERT()` macro, and compare the return value with `NULL`, which should work regardless of the target's bitness. Signed-off-by: Dimitry Andric --- module/zfs/dbuf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/zfs/dbuf.c b/module/zfs/dbuf.c index b7453578a76f..eaf380255bea 100644 --- a/module/zfs/dbuf.c +++ b/module/zfs/dbuf.c @@ -2701,7 +2701,7 @@ dmu_buf_will_clone(dmu_buf_t *db_fake, dmu_tx_t *tx) */ mutex_enter(&db->db_mtx); VERIFY(!dbuf_undirty(db, tx)); - ASSERT0(dbuf_find_dirty_eq(db, tx->tx_txg)); + ASSERT(dbuf_find_dirty_eq(db, tx->tx_txg) == NULL); if (db->db_buf != NULL) { arc_buf_destroy(db->db_buf, db); db->db_buf = NULL;