Commit 67e55205 authored by Alessio Igor Bogani's avatar Alessio Igor Bogani Committed by Al Viro

vfs: umount_begin BKL pushdown

Push BKL down into ->umount_begin()
Signed-off-by: default avatarAlessio Igor Bogani <abogani@texware.it>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 091bf762
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#include <linux/mount.h> #include <linux/mount.h>
#include <linux/idr.h> #include <linux/idr.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/smp_lock.h>
#include <net/9p/9p.h> #include <net/9p/9p.h>
#include <net/9p/client.h> #include <net/9p/client.h>
...@@ -230,9 +231,12 @@ static int v9fs_show_options(struct seq_file *m, struct vfsmount *mnt) ...@@ -230,9 +231,12 @@ static int v9fs_show_options(struct seq_file *m, struct vfsmount *mnt)
static void static void
v9fs_umount_begin(struct super_block *sb) v9fs_umount_begin(struct super_block *sb)
{ {
struct v9fs_session_info *v9ses = sb->s_fs_info; struct v9fs_session_info *v9ses;
lock_kernel();
v9ses = sb->s_fs_info;
v9fs_session_cancel(v9ses); v9fs_session_cancel(v9ses);
unlock_kernel();
} }
static const struct super_operations v9fs_super_ops = { static const struct super_operations v9fs_super_ops = {
......
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/kthread.h> #include <linux/kthread.h>
#include <linux/freezer.h> #include <linux/freezer.h>
#include <linux/smp_lock.h>
#include "cifsfs.h" #include "cifsfs.h"
#include "cifspdu.h" #include "cifspdu.h"
#define DECLARE_GLOBALS_HERE #define DECLARE_GLOBALS_HERE
...@@ -530,6 +531,7 @@ static void cifs_umount_begin(struct super_block *sb) ...@@ -530,6 +531,7 @@ static void cifs_umount_begin(struct super_block *sb)
if (tcon == NULL) if (tcon == NULL)
return; return;
lock_kernel();
read_lock(&cifs_tcp_ses_lock); read_lock(&cifs_tcp_ses_lock);
if (tcon->tc_count == 1) if (tcon->tc_count == 1)
tcon->tidStatus = CifsExiting; tcon->tidStatus = CifsExiting;
...@@ -548,6 +550,7 @@ static void cifs_umount_begin(struct super_block *sb) ...@@ -548,6 +550,7 @@ static void cifs_umount_begin(struct super_block *sb)
} }
/* BB FIXME - finish add checks for tidStatus BB */ /* BB FIXME - finish add checks for tidStatus BB */
unlock_kernel();
return; return;
} }
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <linux/random.h> #include <linux/random.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/exportfs.h> #include <linux/exportfs.h>
#include <linux/smp_lock.h>
MODULE_AUTHOR("Miklos Szeredi <miklos@szeredi.hu>"); MODULE_AUTHOR("Miklos Szeredi <miklos@szeredi.hu>");
MODULE_DESCRIPTION("Filesystem in Userspace"); MODULE_DESCRIPTION("Filesystem in Userspace");
...@@ -259,7 +260,9 @@ struct inode *fuse_iget(struct super_block *sb, u64 nodeid, ...@@ -259,7 +260,9 @@ struct inode *fuse_iget(struct super_block *sb, u64 nodeid,
static void fuse_umount_begin(struct super_block *sb) static void fuse_umount_begin(struct super_block *sb)
{ {
lock_kernel();
fuse_abort_conn(get_fuse_conn_super(sb)); fuse_abort_conn(get_fuse_conn_super(sb));
unlock_kernel();
} }
static void fuse_send_destroy(struct fuse_conn *fc) static void fuse_send_destroy(struct fuse_conn *fc)
......
...@@ -1073,9 +1073,7 @@ static int do_umount(struct vfsmount *mnt, int flags) ...@@ -1073,9 +1073,7 @@ static int do_umount(struct vfsmount *mnt, int flags)
*/ */
if (flags & MNT_FORCE && sb->s_op->umount_begin) { if (flags & MNT_FORCE && sb->s_op->umount_begin) {
lock_kernel();
sb->s_op->umount_begin(sb); sb->s_op->umount_begin(sb);
unlock_kernel();
} }
/* /*
......
...@@ -683,9 +683,12 @@ static int nfs_show_stats(struct seq_file *m, struct vfsmount *mnt) ...@@ -683,9 +683,12 @@ static int nfs_show_stats(struct seq_file *m, struct vfsmount *mnt)
*/ */
static void nfs_umount_begin(struct super_block *sb) static void nfs_umount_begin(struct super_block *sb)
{ {
struct nfs_server *server = NFS_SB(sb); struct nfs_server *server;
struct rpc_clnt *rpc; struct rpc_clnt *rpc;
lock_kernel();
server = NFS_SB(sb);
/* -EIO all pending I/O */ /* -EIO all pending I/O */
rpc = server->client_acl; rpc = server->client_acl;
if (!IS_ERR(rpc)) if (!IS_ERR(rpc))
...@@ -693,6 +696,8 @@ static void nfs_umount_begin(struct super_block *sb) ...@@ -693,6 +696,8 @@ static void nfs_umount_begin(struct super_block *sb)
rpc = server->client; rpc = server->client;
if (!IS_ERR(rpc)) if (!IS_ERR(rpc))
rpc_killall_tasks(rpc); rpc_killall_tasks(rpc);
unlock_kernel();
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment