I was using the dtrace set-error probe in ZFS to track something down, and I found that the probe in dbuf_findbp is VERY noisy. I also don't think this one is really returning an "error" condition (in the usual sense) but rather a status to the caller indicating the "bp" is not there. Would it make sense to get rid of this one? It's a small change, so pasted below.
diff --git a/usr/src/uts/common/fs/zfs/dbuf.c b/usr/src/uts/common/fs/zfs/dbuf.c index d23cdfa673..47222cd430 100644 --- a/usr/src/uts/common/fs/zfs/dbuf.c +++ b/usr/src/uts/common/fs/zfs/dbuf.c @@ -2338,8 +2338,11 @@ dbuf_findbp(dnode_t *dn, int level, uint64_t blkid, int fail_sparse, ((nlevels - level - 1) * epbs)) || (fail_sparse && blkid > (dn->dn_phys->dn_maxblkid >> (level * epbs)))) { - /* the buffer has no parent yet */ - return (SET_ERROR(ENOENT)); + /* + * The buffer has no parent yet. This is a normal + * condition with sparse files, so no SET_ERROR(). + */ + return (ENOENT); } else if (level < nlevels-1) { /* this block is referenced from an indirect block */ int err = dbuf_hold_impl(dn, level+1, ------------------------------------------ openzfs: openzfs-developer Permalink: https://openzfs.topicbox.com/groups/developer/T83528121898a0810-M12a158c082e303023845bfd9 Delivery options: https://openzfs.topicbox.com/groups/developer/subscription