From: Alan Somers Date: Thu, 13 Apr 2017 21:22:32 +0000 (-0700) Subject: OpenZFS 7900 - zdb shouldn't print the path of a znode at verbosity < 5 X-Git-Tag: zfs-0.7.0-rc4~47 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a5c3a1efaf8a47b0988a27ae429c4b28467abae3;p=zfs OpenZFS 7900 - zdb shouldn't print the path of a znode at verbosity < 5 Authored by: Alan Somers Approved by: Dan McDonald Reviewed by: Paul Dagnelie Reviewed by: Matt Ahrens Reviewed-by: Brian Behlendorf Ported-by: Giuseppe Di Natale There are two reasons: 1) Finding a znode's path is slower than printing any other znode information at verbosity < 5. 2) On a corrupted pool like the one mentioned below, zdb will crash when it tries to determine the znode's path. But with this patch, zdb can still extract useful information from such pools. OpenZFS-issue: https://www.illumos.org/issues/7900 OpenZFS-commit: https://github.com/openzfs/openzfs/commit/2b0dee1 Closes #6016 --- diff --git a/cmd/zdb/zdb.c b/cmd/zdb/zdb.c index 13d0bcf0e..e8672c836 100644 --- a/cmd/zdb/zdb.c +++ b/cmd/zdb/zdb.c @@ -1824,23 +1824,19 @@ dump_znode(objset_t *os, uint64_t object, void *data, size_t size) return; } - error = zfs_obj_to_path(os, object, path, sizeof (path)); - if (error != 0) { - (void) snprintf(path, sizeof (path), "\?\?\?", - (u_longlong_t)object); - } - if (dump_opt['d'] < 3) { - (void) printf("\t%s\n", path); - (void) sa_handle_destroy(hdl); - return; - } - z_crtime = (time_t)crtm[0]; z_atime = (time_t)acctm[0]; z_mtime = (time_t)modtm[0]; z_ctime = (time_t)chgtm[0]; - (void) printf("\tpath %s\n", path); + if (dump_opt['d'] > 4) { + error = zfs_obj_to_path(os, object, path, sizeof (path)); + if (error != 0) { + (void) snprintf(path, sizeof (path), + "\?\?\?", (u_longlong_t)object); + } + (void) printf("\tpath %s\n", path); + } dump_uidgid(os, uid, gid); (void) printf("\tatime %s", ctime(&z_atime)); (void) printf("\tmtime %s", ctime(&z_mtime));