Resolves: #1511951 - df: do not call stat() on file system unless it is necessary
This commit is contained in:
parent
80f5fc5d4d
commit
24c35e9787
|
@ -0,0 +1,82 @@
|
||||||
|
From 9c4641f42bbecf63ec0a0e05caacbccd5332b831 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Philipp Thomas <pth@suse.de>
|
||||||
|
Date: Sun, 26 Mar 2017 22:34:00 -0700
|
||||||
|
Subject: [PATCH 1/2] 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.
|
||||||
|
|
||||||
|
Upstream-commit: 7c228bc55ed3fd6d56a6ad135438066de2f54a30
|
||||||
|
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
||||||
|
---
|
||||||
|
src/df.c | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/df.c b/src/df.c
|
||||||
|
index 5b9e8fd..e0ebed7 100644
|
||||||
|
--- a/src/df.c
|
||||||
|
+++ b/src/df.c
|
||||||
|
@@ -682,9 +682,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;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
||||||
|
|
||||||
|
From 605ec5a50d341fb2d3eea6ad68316e229c7b8382 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Josef Cejka <jcejka@suse.com>
|
||||||
|
Date: Tue, 1 Aug 2017 01:50:34 +0200
|
||||||
|
Subject: [PATCH 2/2] df: avoid stat() for dummy file systems with -l
|
||||||
|
|
||||||
|
When systemd is configured to automount a remote file system - see
|
||||||
|
'man systemd.automount(5)', then the mount point is initially
|
||||||
|
mounted by systemd with the file system type "autofs".
|
||||||
|
When the resource is used later on, then the wanted file system is
|
||||||
|
mounted over that mount point on demand.
|
||||||
|
'df -l' triggered systemd to mount the file system because it called
|
||||||
|
stat() on the mount point.
|
||||||
|
Instead of single-casing "autofs" targets, we can avoid stat()ing
|
||||||
|
all dummy file systems (which includes "autofs"), because those are
|
||||||
|
skipped later on in get_dev() anyway.
|
||||||
|
|
||||||
|
*src/df.c (filter_mount_list): Also skip dummy file systems unless
|
||||||
|
the -a option or a specific target are given.
|
||||||
|
* NEWS: Mention the fix.
|
||||||
|
|
||||||
|
Co-authored-by: Bernhard Voelker <mail@bernhard-voelker.de>
|
||||||
|
|
||||||
|
Fixes http://bugzilla.suse.com/show_bug.cgi?id=1043059
|
||||||
|
|
||||||
|
Upstream-commit: a19ff5d8179a7de38109fc78278229fd96f3941a
|
||||||
|
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
||||||
|
---
|
||||||
|
src/df.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/src/df.c b/src/df.c
|
||||||
|
index e0ebed7..11b5a22 100644
|
||||||
|
--- a/src/df.c
|
||||||
|
+++ b/src/df.c
|
||||||
|
@@ -682,6 +682,7 @@ 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)
|
||||||
|
+ || (me->me_dummy && !show_all_fs && !show_listed_fs)
|
||||||
|
|| (!selected_fstype (me->me_type) || excluded_fstype (me->me_type))
|
||||||
|
|| -1 == stat (me->me_mountdir, &buf))
|
||||||
|
{
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
Summary: A set of basic GNU tools commonly used in shell scripts
|
Summary: A set of basic GNU tools commonly used in shell scripts
|
||||||
Name: coreutils
|
Name: coreutils
|
||||||
Version: 8.27
|
Version: 8.27
|
||||||
Release: 6%{?dist}
|
Release: 7%{?dist}
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
Group: System Environment/Base
|
Group: System Environment/Base
|
||||||
Url: https://www.gnu.org/software/coreutils/
|
Url: https://www.gnu.org/software/coreutils/
|
||||||
|
@ -31,6 +31,9 @@ Patch4: coreutils-8.27-runcon-doc.patch
|
||||||
# ptx: fix a possible crash caused by integer overflow (#1482445)
|
# ptx: fix a possible crash caused by integer overflow (#1482445)
|
||||||
Patch5: coreutils-8.27-ptx-int-overflow.patch
|
Patch5: coreutils-8.27-ptx-int-overflow.patch
|
||||||
|
|
||||||
|
# df: do not call stat() on file system unless it is necessary (#1511951)
|
||||||
|
Patch6: coreutils-8.27-df-stat.patch
|
||||||
|
|
||||||
# disable the test-lock gnulib test prone to deadlock
|
# disable the test-lock gnulib test prone to deadlock
|
||||||
Patch100: coreutils-8.26-test-lock.patch
|
Patch100: coreutils-8.26-test-lock.patch
|
||||||
|
|
||||||
|
@ -313,6 +316,9 @@ fi
|
||||||
%license COPYING
|
%license COPYING
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Nov 10 2017 Kamil Dudka <kdudka@redhat.com> - 8.27-7
|
||||||
|
- df: do not call stat() on file system unless it is necessary (#1511951)
|
||||||
|
|
||||||
* Fri Aug 18 2017 Kamil Dudka <kdudka@redhat.com> - 8.27-6
|
* Fri Aug 18 2017 Kamil Dudka <kdudka@redhat.com> - 8.27-6
|
||||||
- ptx: fix a possible crash caused by integer overflow (#1482445)
|
- ptx: fix a possible crash caused by integer overflow (#1482445)
|
||||||
- doc: mention `setpriv --no-new-privs` feature in runcon info (#1360903)
|
- doc: mention `setpriv --no-new-privs` feature in runcon info (#1360903)
|
||||||
|
|
Loading…
Reference in New Issue