]> git.openpandora.org Git - pandora-kernel.git/commitdiff
delayed mntput
authorAl Viro <viro@zeniv.linux.org.uk>
Fri, 8 Aug 2014 17:08:20 +0000 (13:08 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 9 Oct 2014 06:38:53 +0000 (02:38 -0400)
On final mntput() we want fs shutdown to happen before return to
userland; however, the only case where we want it happen right
there (i.e. where task_work_add won't do) is MNT_INTERNAL victim.
Those have to be fully synchronous - failure halfway through module
init might count on having vfsmount killed right there.  Fortunately,
final mntput on MNT_INTERNAL vfsmounts happens on shallow stack.
So we handle those synchronously and do an analog of delayed fput
logics for everything else.

As the result, we are guaranteed that fs shutdown will always happen
on shallow stack.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/mount.h
fs/namespace.c

index 6740a621552950e7a795b249f635b5eeea7065d1..8f2a14ae38a20ea8132316a9c7573ecb3ed156b1 100644 (file)
@@ -29,7 +29,10 @@ struct mount {
        struct mount *mnt_parent;
        struct dentry *mnt_mountpoint;
        struct vfsmount mnt;
-       struct rcu_head mnt_rcu;
+       union {
+               struct rcu_head mnt_rcu;
+               struct llist_node mnt_llist;
+       };
 #ifdef CONFIG_SMP
        struct mnt_pcp __percpu *mnt_pcp;
 #else
diff --cc fs/namespace.c
Simple merge