From 4bb40c1c82f0c11d231cbb4e2bd3bee1b550ad0b Mon Sep 17 00:00:00 2001 From: Alexander Motin Date: Wed, 8 May 2019 19:42:39 -0400 Subject: [PATCH] Fix dataset name comparison in zfs_compare() The code never returned match comparing two datasets (not snapshots). As result, uu_avl_find(), called from zfs_callback(), never succeeded, allowing to add same dataset into the list multiple times, for example: # zfs get name pers pers pers@z pers@z NAME PROPERTY VALUE SOURCE pers name pers - pers name pers - pers@z name pers@z - With the patch: # zfs get name pers pers pers@z pers@z NAME PROPERTY VALUE SOURCE pers name pers - pers@z name pers@z - Reviewed by: Brian Behlendorf Reviewed-by: Igor Kozhukhov Signed-off-by: Alexander Motin Closes #8723 --- cmd/zfs/zfs_iter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/zfs/zfs_iter.c b/cmd/zfs/zfs_iter.c index d10bbed7d..f2359508c 100644 --- a/cmd/zfs/zfs_iter.c +++ b/cmd/zfs/zfs_iter.c @@ -240,7 +240,7 @@ zfs_compare(const void *larg, const void *rarg, void *unused) *rat = '\0'; ret = strcmp(lname, rname); - if (ret == 0) { + if (ret == 0 && (lat != NULL || rat != NULL)) { /* * If we're comparing a dataset to one of its snapshots, we * always make the full dataset first.