From 868b779b9008ebd2e03481a37775495e8500c414 Mon Sep 17 00:00:00 2001 From: Fabian Keil Date: Sat, 26 Aug 2017 17:45:31 +0200 Subject: [PATCH 191/325] dmu_send.c: Call zfs_dbgmsg() when losing blkptrs or changing the block size Useful to help debugging ZFSonLinux bug #6224. Debug by running something like: dtrace -qn ' ::receive_object:entry { this->rwa=args[0]; this->drro=args[1]; } zfs-dbgmsg /this->rwa/ { printf("%Y: %s\n", walltimestamp, stringof(arg0)); print(*this->rwa); print(*this->rwa->os); } ::receive_object:return { this->rwa=0 }' while running the reproducer script. Obtained from: ElectroBSD --- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c index 1a7ba92fd9b3..fef98f4bdc63 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c @@ -2231,6 +2231,13 @@ receive_object(struct receive_writer_arg *rwa, struct drr_object *drro, if (drro->drr_blksz != doi.doi_data_block_size || nblkptr < doi.doi_nblkptr || dn_slots != doi.doi_dnodesize >> DNODE_SHIFT) { +#ifdef _KERNEL + zfs_dbgmsg("%s: calling dmu_free_long_range(). " + "drro->drr_blksz: %d, doi.doi_data_block_size: %d, " + "nblkptr: %d, doi.doi_nblkptr: %d, object: %d ", + __func__, drro->drr_blksz, doi.doi_data_block_size, + nblkptr, doi.doi_nblkptr, object); +#endif err = dmu_free_long_range(rwa->os, drro->drr_object, 0, DMU_OBJECT_END); if (err != 0) -- 2.32.0