Skip to content

Commit

Permalink
Illumos 6268 zfs diff confused by moving a file to another directory
Browse files Browse the repository at this point in the history
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 6268 zfs diff confused by moving a file to another directory
illumos/illumos-gate@aab0441

Ported-by: kernelOfTruth kerneloftruth@gmail.com
  • Loading branch information
jclulow authored and kernelOfTruth committed Dec 19, 2015
1 parent fa793d7 commit 4ebed8d
Showing 1 changed file with 2 additions and 12 deletions.
14 changes: 2 additions & 12 deletions lib/libzfs/libzfs_diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*/

/*
Expand Down Expand Up @@ -54,15 +55,6 @@
#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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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) {
Expand All @@ -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);
Expand Down

0 comments on commit 4ebed8d

Please sign in to comment.