Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12:Update
coreutils-testsuite.669
coreutils-also_deduplicate_virtual_file_systems...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File coreutils-also_deduplicate_virtual_file_systems.patch of Package coreutils-testsuite.669
commit 2dc5d044a88fd64e11e35886e78b54a4a9fc2b23 Author: Pádraig Brady <P@draigBrady.com> Date: Sat Jan 25 01:14:29 2014 +0000 df: also deduplicate virtual file systems * src/df.c (filter_mountlist): Remove the constraint that a '/' needs to be in the device name for a mount entry to be considered for deduplication. Virtual file systems also have storage associated with them (like tmpfs for example), and thus need to be deduplicated since they will be shown in the default df output and subject to --total processing also. * test/df/skip-duplicates.sh: Add a test to ensure we deduplicate all entries, even for virtual file systems. Also avoid possible length operations on many remote file systems in the initial check of df operation. Also avoid the assumption that "/root" is on the same file system as "/". * NEWS: Mention the change in behavior. --- NEWS | 6 ++++- src/df.c | 31 +++++++++++++---------------- tests/df/skip-duplicates.sh | 47 +++++++++++++++++++++++++++++++------------- 3 files changed, 53 insertions(+), 31 deletions(-) Index: coreutils-8.22/NEWS =================================================================== --- coreutils-8.22.orig/NEWS 2014-07-25 23:59:19.944878976 +0200 +++ coreutils-8.22/NEWS 2014-07-26 00:00:28.937016455 +0200 @@ -1,6 +1,10 @@ GNU coreutils NEWS -*- outline -*- -* Noteworthy changes in release 8.22 (2013-12-13) [stable] + Changes done after the release of 8.22 + + df now correctly elides duplicates for virtual file systems like tmpfs. + + Noteworthy changes in release 8.22 (2013-12-13) [stable] ** Bug fixes Index: coreutils-8.22/src/df.c =================================================================== --- coreutils-8.22.orig/src/df.c 2014-07-25 23:59:19.938879051 +0200 +++ coreutils-8.22/src/df.c 2014-07-25 23:59:19.944878976 +0200 @@ -630,26 +630,23 @@ filter_mount_list (void) } else { - /* If the device name is a real path name ... */ - if (strchr (me->me_devname, '/')) + /* If we've already seen this device... */ + for (devlist = devlist_head; devlist; devlist = devlist->next) + if (devlist->dev_num == buf.st_dev) + break; + + if (devlist) { - /* ... try to find its device number in the devlist. */ - for (devlist = devlist_head; devlist; devlist = devlist->next) - if (devlist->dev_num == buf.st_dev) - break; + discard_me = me; - if (devlist) + /* ...let the shorter mountdir win. */ + if ((strchr (me->me_devname, '/') + && ! strchr (devlist->me->me_devname, '/')) + || (strlen (devlist->me->me_mountdir) + > strlen (me->me_mountdir))) { - discard_me = me; - - /* Let the shorter mountdir win. */ - if (! strchr (devlist->me->me_devname, '/') - || (strlen (devlist->me->me_mountdir) - > strlen (me->me_mountdir))) - { - discard_me = devlist->me; - devlist->me = me; - } + discard_me = devlist->me; + devlist->me = me; } } } Index: coreutils-8.22/tests/df/skip-duplicates.sh =================================================================== --- coreutils-8.22.orig/tests/df/skip-duplicates.sh 2013-12-04 15:48:30.000000000 +0100 +++ coreutils-8.22/tests/df/skip-duplicates.sh 2014-07-25 23:59:19.944878976 +0200 @@ -21,19 +21,28 @@ print_ver_ df require_gcc_shared_ -df || skip_ "df fails" +# We use --local here so as to not activate +# potentially very many remote mounts. +df --local || skip_ "df fails" -# Simulate an mtab file with two entries of the same device number. -# Also add entries with unstatable mount dirs to ensure that's handled. +export CU_NONROOT_FS=$(df --local --output=target 2>&1 | grep /. | head -n1) +test -z "$CU_NONROOT_FS" && unique_entries=1 || unique_entries=2 + +# Simulate an mtab file to test various cases. cat > k.c <<'EOF' || framework_failure_ #include <stdio.h> #include <stdlib.h> +#include <string.h> #include <mntent.h> +#define STREQ(a, b) (strcmp (a, b) == 0) + struct mntent *getmntent (FILE *fp) { + static char *nonroot_fs; + static int done; + /* Prove that LD_PRELOAD works. */ - static int done = 0; if (!done) { fclose (fopen ("x", "w")); @@ -43,18 +52,30 @@ struct mntent *getmntent (FILE *fp) static struct mntent mntents[] = { {.mnt_fsname="/short", .mnt_dir="/invalid/mount/dir"}, {.mnt_fsname="fsname", .mnt_dir="/",}, - {.mnt_fsname="/fsname", .mnt_dir="/root"}, + {.mnt_fsname="/fsname", .mnt_dir="/."}, {.mnt_fsname="/fsname", .mnt_dir="/"}, + {.mnt_fsname="virtfs", .mnt_dir="/NONROOT"}, + {.mnt_fsname="virtfs", .mnt_dir="/NONROOT"}, }; - if (!getenv ("CU_TEST_DUPE_INVALID") && done == 1) + if (done == 1) + { + nonroot_fs = getenv ("CU_NONROOT_FS"); + if (!nonroot_fs || !*nonroot_fs) + nonroot_fs = "/"; /* merge into / entries. */ + } + + if (done == 1 && !getenv ("CU_TEST_DUPE_INVALID")) done++; /* skip the first entry. */ - while (done++ <= 4) + while (done++ <= 6) { mntents[done-2].mnt_type = "-"; + if (STREQ (mntents[done-2].mnt_dir, "/NONROOT")) + mntents[done-2].mnt_dir = nonroot_fs; return &mntents[done-2]; } + return NULL; } EOF @@ -69,22 +90,22 @@ test -f x || skip_ "internal test failur # The fake mtab file should only contain entries # having the same device number; thus the output should -# consist of a header and one entry. +# consist of a header and unique entries. LD_PRELOAD=./k.so df >out || fail=1 -test $(wc -l <out) -eq 2 || { fail=1; cat out; } +test $(wc -l <out) -eq $(expr 1 + $unique_entries) || { fail=1; cat out; } # Ensure we fail when unable to stat invalid entries LD_PRELOAD=./k.so CU_TEST_DUPE_INVALID=1 df >out && fail=1 -test $(wc -l <out) -eq 2 || { fail=1; cat out; } +test $(wc -l <out) -eq $(expr 1 + $unique_entries) || { fail=1; cat out; } # df should also prefer "/fsname" over "fsname" test $(grep -c '/fsname' <out) -eq 1 || { fail=1; cat out; } -# ... and "/fsname" with '/' as Mounted on over '/root' -test $(grep -c '/root' <out) -eq 0 || { fail=1; cat out; } +# ... and "/fsname" with '/' as Mounted on over '/.' +test $(grep -cF '/.' <out) -eq 0 || { fail=1; cat out; } # Ensure that filtering duplicates does not affect -a processing. LD_PRELOAD=./k.so df -a >out || fail=1 -test $(wc -l <out) -eq 4 || { fail=1; cat out; } +test $(wc -l <out) -eq 6 || { fail=1; cat out; } # Ensure that filtering duplicates does not affect # argument processing (now without the fake getmntent()).
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor