Skip to content

Commit

Permalink
vfs: umount_begin BKL pushdown
Browse files Browse the repository at this point in the history
Push BKL down into ->umount_begin()

Signed-off-by: Alessio Igor Bogani <[email protected]>
Signed-off-by: Al Viro <[email protected]>
  • Loading branch information
Alessio Igor Bogani authored and Al Viro committed May 9, 2009
1 parent 091bf76 commit 67e5520
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 4 deletions.
6 changes: 5 additions & 1 deletion fs/9p/vfs_super.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include <linux/mount.h>
#include <linux/idr.h>
#include <linux/sched.h>
#include <linux/smp_lock.h>
#include <net/9p/9p.h>
#include <net/9p/client.h>

Expand Down Expand Up @@ -230,9 +231,12 @@ static int v9fs_show_options(struct seq_file *m, struct vfsmount *mnt)
static void
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);
unlock_kernel();
}

static const struct super_operations v9fs_super_ops = {
Expand Down
3 changes: 3 additions & 0 deletions fs/cifs/cifsfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#include <linux/delay.h>
#include <linux/kthread.h>
#include <linux/freezer.h>
#include <linux/smp_lock.h>
#include "cifsfs.h"
#include "cifspdu.h"
#define DECLARE_GLOBALS_HERE
Expand Down Expand Up @@ -530,6 +531,7 @@ static void cifs_umount_begin(struct super_block *sb)
if (tcon == NULL)
return;

lock_kernel();
read_lock(&cifs_tcp_ses_lock);
if (tcon->tc_count == 1)
tcon->tidStatus = CifsExiting;
Expand All @@ -548,6 +550,7 @@ static void cifs_umount_begin(struct super_block *sb)
}
/* BB FIXME - finish add checks for tidStatus BB */

unlock_kernel();
return;
}

Expand Down
3 changes: 3 additions & 0 deletions fs/fuse/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include <linux/random.h>
#include <linux/sched.h>
#include <linux/exportfs.h>
#include <linux/smp_lock.h>

MODULE_AUTHOR("Miklos Szeredi <[email protected]>");
MODULE_DESCRIPTION("Filesystem in Userspace");
Expand Down Expand Up @@ -259,7 +260,9 @@ struct inode *fuse_iget(struct super_block *sb, u64 nodeid,

static void fuse_umount_begin(struct super_block *sb)
{
lock_kernel();
fuse_abort_conn(get_fuse_conn_super(sb));
unlock_kernel();
}

static void fuse_send_destroy(struct fuse_conn *fc)
Expand Down
2 changes: 0 additions & 2 deletions fs/namespace.c
Original file line number Diff line number Diff line change
Expand Up @@ -1073,9 +1073,7 @@ static int do_umount(struct vfsmount *mnt, int flags)
*/

if (flags & MNT_FORCE && sb->s_op->umount_begin) {
lock_kernel();
sb->s_op->umount_begin(sb);
unlock_kernel();
}

/*
Expand Down
7 changes: 6 additions & 1 deletion fs/nfs/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -683,16 +683,21 @@ static int nfs_show_stats(struct seq_file *m, struct vfsmount *mnt)
*/
static void nfs_umount_begin(struct super_block *sb)
{
struct nfs_server *server = NFS_SB(sb);
struct nfs_server *server;
struct rpc_clnt *rpc;

lock_kernel();

server = NFS_SB(sb);
/* -EIO all pending I/O */
rpc = server->client_acl;
if (!IS_ERR(rpc))
rpc_killall_tasks(rpc);
rpc = server->client;
if (!IS_ERR(rpc))
rpc_killall_tasks(rpc);

unlock_kernel();
}

/*
Expand Down

0 comments on commit 67e5520

Please sign in to comment.