]> granicus.if.org Git - zfs/commitdiff
Illumos 6268 - zfs diff confused by moving a file to another directory
authorJoshua M. Clulow <josh@sysmgr.org>
Thu, 12 Nov 2015 02:33:52 +0000 (03:33 +0100)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 12 Jan 2016 18:59:24 +0000 (10:59 -0800)
6268 zfs diff confused by moving a file to another directory
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Justin Gibbs <gibbs@scsiguy.com>
Approved by: Dan McDonald <danmcd@omniti.com>

References:
  https://www.illumos.org/issues/6268
  https://github.com/illumos/illumos-gate/commit/aab0441

Ported-by: kernelOfTruth kerneloftruth@gmail.com
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
lib/libzfs/libzfs_diff.c

index b5fa5853f164028f062273cea22124e434266456..1a4529a40265f90ea87c55297b5d863ad2dffb21 100644 (file)
@@ -22,6 +22,7 @@
 /*
  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright 2015 Nexenta Systems, Inc. All rights reserved.
+ * Copyright 2015 Joyent, Inc.
  */
 
 /*
 #define        ZDIFF_REMOVED   '-'
 #define        ZDIFF_RENAMED   'R'
 
-static boolean_t
-do_name_cmp(const char *fpath, const char *tpath)
-{
-       char *fname, *tname;
-       fname = strrchr(fpath, '/') + 1;
-       tname = strrchr(tpath, '/') + 1;
-       return (strcmp(fname, tname) == 0);
-}
-
 typedef struct differ_info {
        zfs_handle_t *zhp;
        char *fromsnap;
@@ -258,7 +250,6 @@ static int
 write_inuse_diffs_one(FILE *fp, differ_info_t *di, uint64_t dobj)
 {
        struct zfs_stat fsb, tsb;
-       boolean_t same_name;
        mode_t fmode, tmode;
        char fobjname[MAXPATHLEN], tobjname[MAXPATHLEN];
        int fobjerr, tobjerr;
@@ -319,7 +310,6 @@ write_inuse_diffs_one(FILE *fp, differ_info_t *di, uint64_t dobj)
 
        if (fmode != tmode && fsb.zs_gen == tsb.zs_gen)
                tsb.zs_gen++;   /* Force a generational difference */
-       same_name = do_name_cmp(fobjname, tobjname);
 
        /* Simple modification or no change */
        if (fsb.zs_gen == tsb.zs_gen) {
@@ -330,7 +320,7 @@ write_inuse_diffs_one(FILE *fp, differ_info_t *di, uint64_t dobj)
                if (change) {
                        print_link_change(fp, di, change,
                            change > 0 ? fobjname : tobjname, &tsb);
-               } else if (same_name) {
+               } else if (strcmp(fobjname, tobjname) == 0) {
                        print_file(fp, di, ZDIFF_MODIFIED, fobjname, &tsb);
                } else {
                        print_rename(fp, di, fobjname, tobjname, &tsb);