mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-07-26 10:39:01 +02:00
df: fix --local hanging with inaccessible remote mounts
* src/df.c (filter_mount_list): With -l, avoid stating remote mounts. * init.cfg: Avoid test hangs with inaccessible remote mounts. * tests/df/no-mtab-status.sh: Skip with inaccessible remote mounts. * tests/df/skip-rootfs.sh: Likewise. * tests/df/total-verify.sh: Likewise. * NEWS: Mention the bug fix. Reported at http://bugzilla.redhat.com/1199679
This commit is contained in:
@@ -7,6 +7,9 @@ GNU coreutils NEWS -*- outline -*-
|
||||
dd supports more robust SIGINFO/SIGUSR1 handling for outputting statistics.
|
||||
Previously those signals may have inadvertently terminated the process.
|
||||
|
||||
df --local no longer hangs with inaccessible remote mounts.
|
||||
[bug introduced in coreutils-8.21]
|
||||
|
||||
du now silently ignores all directory cycles due to bind mounts.
|
||||
Previously it would issue a warning and exit with a failure status.
|
||||
[bug introduced in coreutils-8.1 and partially fixed in coreutils-8.23]
|
||||
|
||||
@@ -79,7 +79,7 @@ is_local_dir_()
|
||||
require_mount_list_()
|
||||
{
|
||||
local mount_list_fail='cannot read table of mounted file systems'
|
||||
df 2>&1 | grep -F "$mount_list_fail" >/dev/null &&
|
||||
df --local 2>&1 | grep -F "$mount_list_fail" >/dev/null &&
|
||||
skip_ "$mount_list_fail"
|
||||
}
|
||||
|
||||
|
||||
@@ -622,13 +622,16 @@ filter_mount_list (bool devices_only)
|
||||
struct devlist *devlist;
|
||||
struct mount_entry *discard_me = NULL;
|
||||
|
||||
/* TODO: On Linux we might avoid this stat() and another in get_dev()
|
||||
/* Avoid stating remote file systems as that may hang.
|
||||
TODO: On Linux we might avoid this stat() and another in get_dev()
|
||||
by using the device IDs available from /proc/self/mountinfo.
|
||||
read_file_system_list() could populate me_dev from those
|
||||
for efficiency and accuracy. */
|
||||
if (-1 == stat (me->me_mountdir, &buf))
|
||||
if ((me->me_remote && show_local_fs)
|
||||
|| -1 == stat (me->me_mountdir, &buf))
|
||||
{
|
||||
/* Stat failed - add ME to be able to complain about it later. */
|
||||
/* If remote, and showing just local, add ME for filtering later.
|
||||
If stat failed; add ME to be able to complain about it later. */
|
||||
buf.st_dev = me->me_dev;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -21,7 +21,8 @@
|
||||
print_ver_ df
|
||||
require_gcc_shared_
|
||||
|
||||
df || skip_ "df fails"
|
||||
# Protect against inaccessible remote mounts etc.
|
||||
timeout 10 df || skip_ "df fails"
|
||||
|
||||
grep '^#define HAVE_MNTENT_H 1' $CONFIG_HEADER > /dev/null \
|
||||
|| skip_ "no mntent.h available to confirm the interface"
|
||||
|
||||
@@ -19,7 +19,8 @@
|
||||
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
|
||||
print_ver_ df
|
||||
|
||||
df || skip_ "df fails"
|
||||
# Protect against inaccessible remote mounts etc.
|
||||
timeout 10 df || skip_ "df fails"
|
||||
|
||||
# Verify that rootfs is in mtab (and shown when the -a option is specified).
|
||||
# Note this is the case when /proc/self/mountinfo is parsed
|
||||
|
||||
@@ -20,7 +20,8 @@
|
||||
print_ver_ df
|
||||
require_perl_
|
||||
|
||||
df || skip_ "df fails"
|
||||
# Protect against inaccessible remote mounts etc.
|
||||
timeout 10 df || skip_ "df fails"
|
||||
|
||||
cat <<\EOF > check-df || framework_failure_
|
||||
my ($total, $used, $avail) = (0, 0, 0);
|
||||
|
||||
Reference in New Issue
Block a user