aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2006-06-09 09:34:18 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2006-06-09 09:34:18 -0400
commit8b512d9a88875affe584bb3d2a7a235f84343b9e (patch)
tree80c46a675aeffaedd8d18e2bb6361768f4f4845a /fs/nfs
parent5528f911b4c43a5de5da34bcbd7e3f2a62503617 (diff)
VFS: Remove dependency of ->umount_begin() call on MNT_FORCE
Allow filesystems to decide to perform pre-umount processing whether or not MNT_FORCE is set. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs')
-rw-r--r--fs/nfs/inode.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index 9ff039f9a836..fda2b4966179 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -63,7 +63,7 @@ static struct inode *nfs_alloc_inode(struct super_block *sb);
63static void nfs_destroy_inode(struct inode *); 63static void nfs_destroy_inode(struct inode *);
64static int nfs_write_inode(struct inode *,int); 64static int nfs_write_inode(struct inode *,int);
65static void nfs_clear_inode(struct inode *); 65static void nfs_clear_inode(struct inode *);
66static void nfs_umount_begin(struct super_block *); 66static void nfs_umount_begin(struct vfsmount *, int);
67static int nfs_statfs(struct super_block *, struct kstatfs *); 67static int nfs_statfs(struct super_block *, struct kstatfs *);
68static int nfs_show_options(struct seq_file *, struct vfsmount *); 68static int nfs_show_options(struct seq_file *, struct vfsmount *);
69static int nfs_show_stats(struct seq_file *, struct vfsmount *); 69static int nfs_show_stats(struct seq_file *, struct vfsmount *);
@@ -162,15 +162,19 @@ nfs_clear_inode(struct inode *inode)
162 BUG_ON(atomic_read(&nfsi->data_updates) != 0); 162 BUG_ON(atomic_read(&nfsi->data_updates) != 0);
163} 163}
164 164
165void 165static void nfs_umount_begin(struct vfsmount *vfsmnt, int flags)
166nfs_umount_begin(struct super_block *sb)
167{ 166{
168 struct rpc_clnt *rpc = NFS_SB(sb)->client; 167 struct nfs_server *server;
168 struct rpc_clnt *rpc;
169 169
170 if (!(flags & MNT_FORCE))
171 return;
170 /* -EIO all pending I/O */ 172 /* -EIO all pending I/O */
173 server = NFS_SB(vfsmnt->mnt_sb);
174 rpc = server->client;
171 if (!IS_ERR(rpc)) 175 if (!IS_ERR(rpc))
172 rpc_killall_tasks(rpc); 176 rpc_killall_tasks(rpc);
173 rpc = NFS_SB(sb)->client_acl; 177 rpc = server->client_acl;
174 if (!IS_ERR(rpc)) 178 if (!IS_ERR(rpc))
175 rpc_killall_tasks(rpc); 179 rpc_killall_tasks(rpc);
176} 180}