zdb: Always print symlink target

When zdb is printing paths, also print the symlink target if it exists.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Matt Ahrens <matt@delphix.com>
Signed-off-by: Justin Keogh <commits@v6y.net>
Closes #9925
This commit is contained in:
Justin Keogh 2020-02-12 19:36:05 +00:00 committed by GitHub
parent 948f0c4419
commit 12f7b90c93
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 20 additions and 0 deletions

View File

@ -2419,6 +2419,23 @@ dump_znode_sa_xattr(sa_handle_t *hdl)
free(sa_xattr_packed); free(sa_xattr_packed);
} }
static void
dump_znode_symlink(sa_handle_t *hdl)
{
int sa_symlink_size = 0;
char linktarget[MAXPATHLEN];
linktarget[0] = '\0';
int error;
error = sa_size(hdl, sa_attr_table[ZPL_SYMLINK], &sa_symlink_size);
if (error || sa_symlink_size == 0) {
return;
}
if (sa_lookup(hdl, sa_attr_table[ZPL_SYMLINK],
&linktarget, sa_symlink_size) == 0)
(void) printf("\ttarget %s\n", linktarget);
}
/*ARGSUSED*/ /*ARGSUSED*/
static void static void
dump_znode(objset_t *os, uint64_t object, void *data, size_t size) dump_znode(objset_t *os, uint64_t object, void *data, size_t size)
@ -2483,6 +2500,9 @@ dump_znode(objset_t *os, uint64_t object, void *data, size_t size)
} }
(void) printf("\tpath %s\n", path); (void) printf("\tpath %s\n", path);
} }
if (S_ISLNK(mode))
dump_znode_symlink(hdl);
dump_uidgid(os, uid, gid); dump_uidgid(os, uid, gid);
(void) printf("\tatime %s", ctime(&z_atime)); (void) printf("\tatime %s", ctime(&z_atime));
(void) printf("\tmtime %s", ctime(&z_mtime)); (void) printf("\tmtime %s", ctime(&z_mtime));