]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Fix dataset name comparison in zfs_compare()
authorAlexander Motin <mav@FreeBSD.org>
Wed, 8 May 2019 23:42:39 +0000 (19:42 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 8 May 2019 23:42:39 +0000 (16:42 -0700)
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 <behlendorf1@llnl.gov>
Reviewed-by: Igor Kozhukhov <igor@dilos.org>
Signed-off-by: Alexander Motin <mav@FreeBSD.org>
Closes #8723

cmd/zfs/zfs_iter.c

index d10bbed7dbd62101fbb07d48dd1bbb2de88b6453..f2359508c16d6f8338c12910e44c80e20fc2490c 100644 (file)
@@ -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.