components/coreutils/patches/df.c.patch
author Lijo George<lijo.x.george@oracle.com>
Thu, 26 Nov 2015 02:23:48 -0800
changeset 5129 5431772f7235
parent 4097 36a08df8bc1c
permissions -rw-r--r--
PSARC/2014/162 ksh93 update to 2012-08-01 17533968 ksh93 uprev to latest community version 17817727 ksh93: Right shift arithmetic substitution error for shifts of 64 bits or more 17699248 ksh93 double associative array handling bugs 17777549 "kill %%" with no background jobs , coredumps 18119738 ksh93 crashes in sfio area 18229654 ksh93 read not reentrant in alarm context dumps core 16169978 ksh93 memory corruption with redirection 18302723 ksh93 segv in sh_setmatch 16507675 external command in double-nested here-document hangs ksh93 18920300 remove pkglint Warnings in ksh93 build 18355790 /usr/bin/sh and /usr/sbin/sh should point to /usr/bin/ksh93 19907453 Session drop can cause ksh93 to become a fork bomb 18426052 SPARC /usr/bin/ksh is not an XPG6 executable 20808157 attpackagemake.mk test target needs the same environment as the build 20948390 ksh93 should have some master test results to compare against 20948350 attpackagemake.mk tested-and-compared target has mis-matched parentheses
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4097
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     1
From: Pádraig Brady <[email protected]>
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     2
Date: Mon, 18 Aug 2014 16:59:26 +0000 (+0100)
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     3
Subject: df: improve mount point selection with inaccurate mount list
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     4
X-Git-Url: http://git.savannah.gnu.org/gitweb/?p=coreutils.git;a=commitdiff_plain;h=ed1a495b
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     5
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     6
df: improve mount point selection with inaccurate mount list
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     7
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     8
v8.23 has a test failure on Fedora rawhide build servers
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
     9
in tests/df/skip-duplicate.sh.  This was due to no '/'
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    10
entry being output by df.  That was due to an inaccurate
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    11
/proc/mounts on the build environment as stat(/mnt/point)
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    12
identified all these /proc/mounts entries as having the
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    13
same device id:
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    14
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    15
  /                    rootfs
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    16
  /                    /dev/md1
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    17
  /dev                 devtmpfs
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    18
  /run                 tmpfs
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    19
  /boot                /dev/md0
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    20
  /proc/filesystems    /dev/md1
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    21
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    22
Since the device name on the right changes for a given id,
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    23
that causes the entries to be continually replaced, thus
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    24
resulting in no '/' entry.  I'm guessing this is due to
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    25
the mock environment bind mounting unneeded or sensitive
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    26
items to a dummy file on the host / (/dev/md1) though
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    27
have not looked into those details.
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    28
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    29
So rather than relying on an accurate /proc/mounts,
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    30
the attached patch takes a more conservative replacement
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    31
approach and only swaps a new device entry when the
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    32
mount point matches.  That should handle all practical
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    33
cases while also avoiding this situation.
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    34
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    35
* src/df.c (filter_mount_list): Only replace entries with
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    36
different device names when the mount point also matches.
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    37
---
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    38
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    39
diff --git a/src/df.c b/src/df.c
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    40
index 3ef5d33..e907b94 100644
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    41
--- src/df.c
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    42
+++ src/df.c
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    43
@@ -640,13 +640,18 @@ filter_mount_list (bool devices_only)
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    44
 
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    45
           if (devlist)
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    46
             {
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    47
-              /* ...let the shorter mountdir win.  */
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    48
+                  /* let "real" devices with '/' in the name win.  */
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    49
               if ((strchr (me->me_devname, '/')
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    50
                    && ! strchr (devlist->me->me_devname, '/'))
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    51
+                  /* let a shorter mountdir win.  */
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    52
                   || (strlen (devlist->me->me_mountdir)
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    53
                       > strlen (me->me_mountdir))
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    54
-                  /* or one overmounted on a different device.  */
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    55
-                  || ! STREQ (devlist->me->me_devname, me->me_devname))
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    56
+                  /* let an entry overmounted on a different device win...  */
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    57
+                  || (! STREQ (devlist->me->me_devname, me->me_devname)
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    58
+                      /* ... but only when matching an exsiting mount point, to
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    59
+                      avoid problematic replacement when given inaccurate mount
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    60
+                      lists, seen with some chroot environments for example.  */
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    61
+                      && STREQ (me->me_mountdir, devlist->me->me_mountdir)))
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    62
                 {
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    63
                   /* Discard mount entry for existing device.  */
36a08df8bc1c 20807778 gdf doesn't list /
Rich Burridge <rich.burridge@oracle.com>
parents:
diff changeset
    64
                   discard_me = devlist->me;