From df583073eb49e602d07ff4ec7d769732b9b9f077 Mon Sep 17 00:00:00 2001 From: Tom Caputi Date: Mon, 1 Apr 2019 14:58:59 -0400 Subject: Do not iterate through filesystems unnecessarily Currently, when attempting to list snapshots ZFS may do a lot of extra work checking child datasets. This is because the code does not realize that it will not be able to reach any snapshots contained within snapshots that are at the depth limit since the snapshots of those datasets are counted as an additional layer deeper. This patch corrects this issue. In addition, this patch adds the ability to do perform the commands: $ zfs list -t snapshot $ zfs get -t snapshot as a convenient way to list out properties of all snapshots of a given dataset without having to use the depth limit. Reviewed-by: Alek Pinchuk Reviewed-by: Brian Behlendorf Reviewed-by: Richard Laager Reviewed-by: Matt Ahrens Reviewed-by: George Melikov Signed-off-by: Tom Caputi Closes #8539 --- tests/zfs-tests/include/libtest.shlib | 1 - .../zfs-tests/tests/functional/cli_root/zfs_get/zfs_get_009_pos.ksh | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'tests/zfs-tests') diff --git a/tests/zfs-tests/include/libtest.shlib b/tests/zfs-tests/include/libtest.shlib index 748a4f96d..ea9448353 100644 --- a/tests/zfs-tests/include/libtest.shlib +++ b/tests/zfs-tests/include/libtest.shlib @@ -2594,7 +2594,6 @@ function verify_opt_p_ops "when ops is $ops." fi log_must datasetexists $dataset - log_mustnot snapexists $dataset ;; *) log_fail "$ops is not supported." diff --git a/tests/zfs-tests/tests/functional/cli_root/zfs_get/zfs_get_009_pos.ksh b/tests/zfs-tests/tests/functional/cli_root/zfs_get/zfs_get_009_pos.ksh index 383b19ca8..2d97c5918 100755 --- a/tests/zfs-tests/tests/functional/cli_root/zfs_get/zfs_get_009_pos.ksh +++ b/tests/zfs-tests/tests/functional/cli_root/zfs_get/zfs_get_009_pos.ksh @@ -87,5 +87,10 @@ for dp in ${depth_array[@]}; do (( old_val=dp )) done +# Ensure 'zfs get -t snapshot ' works as though -d 1 was specified +log_must eval "zfs get -H -t snapshot -o name creation $DEPTH_FS > $DEPTH_OUTPUT" +log_must eval "zfs get -H -t snapshot -d 1 -o name creation $DEPTH_FS > $EXPECT_OUTPUT" +log_must diff $DEPTH_OUTPUT $EXPECT_OUTPUT + log_pass "'zfs get -d ' should get expected output." -- cgit v1.2.3