From: Jaegeuk Kim <jaegeuk@kernel.org>
To: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net
Cc: Jaegeuk Kim <jaegeuk@kernel.org>, Al Viro <viro@zeniv.linux.org.uk>
Subject: [PATCH] vfs: introduce UMOUNT_WAIT which waits for umount completion
Date: Wed, 13 Sep 2017 13:09:41 -0700 [thread overview]
Message-ID: <20170913200941.39420-1-jaegeuk@kernel.org> (raw)
This patch introduces UMOUNT_WAIT flag for umount(2) which let user wait for
its completion. This would fix a kernel panic caused by block device access by
filesystem, after device_shutdown during kernel_restart. This can happen due
to delayed umount -- reboot process already succeeded to unmount filesystem,
but its instance is sitll alive.
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
---
fs/namespace.c | 12 +++++++++++-
include/linux/fs.h | 1 +
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/fs/namespace.c b/fs/namespace.c
index f8893dc6a989..b1ac89915b10 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -21,6 +21,7 @@
#include <linux/fs_struct.h> /* get_fs_root et.al. */
#include <linux/fsnotify.h> /* fsnotify_vfsmount_delete */
#include <linux/uaccess.h>
+#include <linux/file.h>
#include <linux/proc_ns.h>
#include <linux/magic.h>
#include <linux/bootmem.h>
@@ -1629,7 +1630,8 @@ SYSCALL_DEFINE2(umount, char __user *, name, int, flags)
int retval;
int lookup_flags = 0;
- if (flags & ~(MNT_FORCE | MNT_DETACH | MNT_EXPIRE | UMOUNT_NOFOLLOW))
+ if (flags & ~(MNT_FORCE | MNT_DETACH | MNT_EXPIRE | UMOUNT_NOFOLLOW |
+ UMOUNT_WAIT))
return -EINVAL;
if (!may_mount())
@@ -1652,12 +1654,20 @@ SYSCALL_DEFINE2(umount, char __user *, name, int, flags)
retval = -EPERM;
if (flags & MNT_FORCE && !capable(CAP_SYS_ADMIN))
goto dput_and_out;
+ if (flags & UMOUNT_WAIT)
+ flush_delayed_fput();
retval = do_umount(mnt, flags);
dput_and_out:
/* we mustn't call path_put() as that would clear mnt_expiry_mark */
dput(path.dentry);
mntput_no_expire(mnt);
+ if (!retval && (flags & UMOUNT_WAIT)) {
+ if (likely(!(current->flags & PF_KTHREAD)))
+ task_work_run();
+ else
+ flush_scheduled_work();
+ }
out:
return retval;
}
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 83341a6a553e..cb62af7a03e7 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1283,6 +1283,7 @@ struct mm_struct;
#define MNT_DETACH 0x00000002 /* Just detach from the tree */
#define MNT_EXPIRE 0x00000004 /* Mark for expiry */
#define UMOUNT_NOFOLLOW 0x00000008 /* Don't follow symlink on umount */
+#define UMOUNT_WAIT 0x00000010 /* Wait to unmount completely */
#define UMOUNT_UNUSED 0x80000000 /* Flag guaranteed to be unused */
/* sb->s_iflags */
--
2.14.0.rc1.383.gd1ce394fe2-goog
next reply other threads:[~2017-09-13 20:09 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-13 20:09 Jaegeuk Kim [this message]
2017-09-13 23:04 ` [PATCH] vfs: introduce UMOUNT_WAIT which waits for umount completion Al Viro
2017-09-13 23:31 ` Jaegeuk Kim
2017-09-13 23:44 ` Al Viro
2017-09-14 1:10 ` Jaegeuk Kim
2017-09-14 1:30 ` Al Viro
2017-09-14 18:37 ` Al Viro
2017-09-14 19:14 ` Jaegeuk Kim
2017-09-15 0:19 ` Jaegeuk Kim
2017-09-15 2:06 ` Al Viro
2017-09-15 3:45 ` Jaegeuk Kim
2017-09-15 4:21 ` Al Viro
2017-09-15 18:44 ` Jaegeuk Kim
2017-09-15 22:12 ` Theodore Ts'o
2017-09-15 23:29 ` Jaegeuk Kim
2017-09-15 23:43 ` Al Viro
2017-09-19 15:55 ` Jaegeuk Kim
2017-09-16 7:11 ` Amir Goldstein
2017-09-20 17:38 ` [PATCH v2] " Jaegeuk Kim
2017-09-20 18:38 ` Al Viro
2017-09-21 0:34 ` Jaegeuk Kim
2017-09-21 2:42 ` Al Viro
2017-09-21 5:02 ` Jaegeuk Kim
2017-09-21 14:48 ` Theodore Ts'o
2017-09-21 17:16 ` Jaegeuk Kim
2017-09-21 18:20 ` [PATCH v3] vfs: introduce UMOUNT_WAIT to wait for delayed_fput/mntput completion Jaegeuk Kim
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170913200941.39420-1-jaegeuk@kernel.org \
--to=jaegeuk@kernel.org \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).