zfs get: don't lookup mount options when using "-s local"

Looking up mount options can be very expensive on servers with many
mounted file systems.  When doing "zfs get" with any "-s" option that
does not include "temporary", the mount list will never be used.  This
commit optimizes for that case.

This is a breaking commit for libzfs!  Callers of zfs_get_prop are now
required to initialize src.  To preserve existing behavior, they should
initialize it to ZPROP_SRC_NONE.

Sponsored by: Axcient
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Alan Somers <asomers@gmail.com>
Closes #11955
This commit is contained in:
Alan Somers
2021-04-29 15:19:44 -06:00
committed by GitHub
parent bc9c7265ae
commit e4288a8397
5 changed files with 18 additions and 13 deletions
+2 -2
View File
@@ -1882,7 +1882,6 @@ get_callback(zfs_handle_t *zhp, void *data)
{
char buf[ZFS_MAXPROPLEN];
char rbuf[ZFS_MAXPROPLEN];
zprop_source_t sourcetype;
char source[ZFS_MAX_DATASET_NAME_LEN];
zprop_get_cbdata_t *cbp = data;
nvlist_t *user_props = zfs_get_user_props(zhp);
@@ -1893,6 +1892,7 @@ get_callback(zfs_handle_t *zhp, void *data)
boolean_t received = is_recvd_column(cbp);
for (; pl != NULL; pl = pl->pl_next) {
zprop_source_t sourcetype = cbp->cb_sources;
char *recvdval = NULL;
/*
* Skip the special fake placeholder. This will also skip over
@@ -4660,7 +4660,7 @@ zfs_do_send(int argc, char **argv)
*/
if (fromname && (cp = strchr(fromname, '@')) != NULL) {
char origin[ZFS_MAX_DATASET_NAME_LEN];
zprop_source_t src;
zprop_source_t src = ZPROP_SRC_NONE;
(void) zfs_prop_get(zhp, ZFS_PROP_ORIGIN,
origin, sizeof (origin), &src, NULL, 0, B_FALSE);