diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-06-09 09:34:18 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-06-09 09:34:18 -0400 |
commit | 8b512d9a88875affe584bb3d2a7a235f84343b9e (patch) | |
tree | 80c46a675aeffaedd8d18e2bb6361768f4f4845a /fs/nfs | |
parent | 5528f911b4c43a5de5da34bcbd7e3f2a62503617 (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.c | 14 |
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); | |||
63 | static void nfs_destroy_inode(struct inode *); | 63 | static void nfs_destroy_inode(struct inode *); |
64 | static int nfs_write_inode(struct inode *,int); | 64 | static int nfs_write_inode(struct inode *,int); |
65 | static void nfs_clear_inode(struct inode *); | 65 | static void nfs_clear_inode(struct inode *); |
66 | static void nfs_umount_begin(struct super_block *); | 66 | static void nfs_umount_begin(struct vfsmount *, int); |
67 | static int nfs_statfs(struct super_block *, struct kstatfs *); | 67 | static int nfs_statfs(struct super_block *, struct kstatfs *); |
68 | static int nfs_show_options(struct seq_file *, struct vfsmount *); | 68 | static int nfs_show_options(struct seq_file *, struct vfsmount *); |
69 | static int nfs_show_stats(struct seq_file *, struct vfsmount *); | 69 | static 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 | ||
165 | void | 165 | static void nfs_umount_begin(struct vfsmount *vfsmnt, int flags) |
166 | nfs_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 | } |