From: Philipp Thomas Date: Mon, 27 Mar 2017 05:34:00 +0000 (-0700) Subject: df: avoid querying excluded file systems X-Git-Tag: v8.28~101 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7c228bc55ed3fd6d56a6ad135438066de2f54a30;p=thirdparty%2Fcoreutils.git df: avoid querying excluded file systems * src/df.c (filter_mount_list): Avoid stat() on explicitly excluded file systems, which is especially significant in cases like `-x nfs` which may hang. * NEWS: Mention the bug fix. --- diff --git a/NEWS b/NEWS index e8d6d34cd8..e2f298f3b3 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,10 @@ GNU coreutils NEWS -*- outline -*- ** Bug fixes + df non longer interacts with excluded file system types, so for example + specifying -x nfs will no longer hang with problematic nfs mounts. + [bug introduced in coreutils-8.21] + split no longer exits when invocations of a --filter return EPIPE. [bug introduced in coreutils-8.26] diff --git a/src/df.c b/src/df.c index d2e4b6a105..5788d216f4 100644 --- a/src/df.c +++ b/src/df.c @@ -674,9 +674,11 @@ filter_mount_list (bool devices_only) On Linux we probably have me_dev populated from /proc/self/mountinfo, however we still stat() in case another device was mounted later. */ if ((me->me_remote && show_local_fs) + || (!selected_fstype (me->me_type) || excluded_fstype (me->me_type)) || -1 == stat (me->me_mountdir, &buf)) { - /* If remote, and showing just local, add ME for filtering later. + /* If remote, and showing just local, or FS type is excluded, + add ME for filtering later. If stat failed; add ME to be able to complain about it later. */ buf.st_dev = me->me_dev; }