generic/062: don't assume same readdir order after re-creating directory
authorEric Biggers <ebiggers@google.com>
Tue, 13 Dec 2016 06:57:01 +0000 (22:57 -0800)
committerEryu Guan <eguan@redhat.com>
Sun, 18 Dec 2016 04:14:29 +0000 (12:14 +0800)
generic/062 uses getfattr to dump xattrs for a directory tree, then
deletes and recreates that directory tree, then dumps the xattrs
again and compares the dump to the original.  This was failing when
run on ext4 with encryption enabled because getfattr's output is in
readdir order, but ext4 encryption by design chooses unpredictable
encrypted filenames for each new directory, causing the readdir
order to change after backup and restore.  It is not really a valid
assumption that the readdir order will always be the same, so update
the test to sort the filenames, removing this assumption.

Signed-off-by: Eric Biggers <ebiggers@google.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
tests/generic/062

index e4dc2cc8ccedd22fe8ee7b18680b759eceb14118..643f02c3f799fd5910fef65837f1e290676022e6 100755 (executable)
@@ -178,8 +178,11 @@ echo; echo
 
 _backup()
 {
-       # NB: no filtering of scratch here... (need to restore too)
-       $GETFATTR_PROG --absolute-names -dh -R -m '.' $SCRATCH_MNT >$1
+       # Note: we don't filter scratch here since we need to restore too.  But
+       # we *do* sort the output by path, since it otherwise would depend on
+       # readdir order, which on some filesystems may change after re-creating
+       # the files.
+       $GETFATTR_PROG --absolute-names -dh -R -m '.' $SCRATCH_MNT | _sort_getfattr_output >$1
        echo BACKUP $1 >>$seqres.full
        cat $1 >> $seqres.full
        [ ! -s $1 ] && echo "warning: $1 (backup file) is empty"