diff options
| -rw-r--r-- | fs/nfs/dir.c | 7 | ||||
| -rw-r--r-- | fs/nfs/nfs4_fs.h | 1 | ||||
| -rw-r--r-- | fs/nfs/nfs4proc.c | 3 | ||||
| -rw-r--r-- | include/linux/nfs_xdr.h | 4 |
4 files changed, 10 insertions, 5 deletions
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index e37ffddd79c2..1e9e18813ad7 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c | |||
| @@ -34,7 +34,6 @@ | |||
| 34 | #include <linux/mount.h> | 34 | #include <linux/mount.h> |
| 35 | #include <linux/sched.h> | 35 | #include <linux/sched.h> |
| 36 | 36 | ||
| 37 | #include "nfs4_fs.h" | ||
| 38 | #include "delegation.h" | 37 | #include "delegation.h" |
| 39 | #include "iostat.h" | 38 | #include "iostat.h" |
| 40 | #include "internal.h" | 39 | #include "internal.h" |
| @@ -1127,7 +1126,7 @@ static struct dentry *nfs_atomic_lookup(struct inode *dir, struct dentry *dentry | |||
| 1127 | 1126 | ||
| 1128 | /* Open the file on the server */ | 1127 | /* Open the file on the server */ |
| 1129 | nfs_block_sillyrename(dentry->d_parent); | 1128 | nfs_block_sillyrename(dentry->d_parent); |
| 1130 | inode = nfs4_atomic_open(dir, ctx, open_flags, &attr); | 1129 | inode = NFS_PROTO(dir)->open_context(dir, ctx, open_flags, &attr); |
| 1131 | if (IS_ERR(inode)) { | 1130 | if (IS_ERR(inode)) { |
| 1132 | nfs_unblock_sillyrename(dentry->d_parent); | 1131 | nfs_unblock_sillyrename(dentry->d_parent); |
| 1133 | put_nfs_open_context(ctx); | 1132 | put_nfs_open_context(ctx); |
| @@ -1175,8 +1174,10 @@ static int nfs_open_revalidate(struct dentry *dentry, struct nameidata *nd) | |||
| 1175 | 1174 | ||
| 1176 | if (!is_atomic_open(nd) || d_mountpoint(dentry)) | 1175 | if (!is_atomic_open(nd) || d_mountpoint(dentry)) |
| 1177 | goto no_open; | 1176 | goto no_open; |
| 1177 | |||
| 1178 | parent = dget_parent(dentry); | 1178 | parent = dget_parent(dentry); |
| 1179 | dir = parent->d_inode; | 1179 | dir = parent->d_inode; |
| 1180 | |||
| 1180 | /* We can't create new files in nfs_open_revalidate(), so we | 1181 | /* We can't create new files in nfs_open_revalidate(), so we |
| 1181 | * optimize away revalidation of negative dentries. | 1182 | * optimize away revalidation of negative dentries. |
| 1182 | */ | 1183 | */ |
| @@ -1205,7 +1206,7 @@ static int nfs_open_revalidate(struct dentry *dentry, struct nameidata *nd) | |||
| 1205 | * operations that change the directory. We therefore save the | 1206 | * operations that change the directory. We therefore save the |
| 1206 | * change attribute *before* we do the RPC call. | 1207 | * change attribute *before* we do the RPC call. |
| 1207 | */ | 1208 | */ |
| 1208 | inode = nfs4_atomic_open(dir, ctx, openflags, NULL); | 1209 | inode = NFS_PROTO(dir)->open_context(dir, ctx, openflags, NULL); |
| 1209 | if (IS_ERR(inode)) { | 1210 | if (IS_ERR(inode)) { |
| 1210 | ret = PTR_ERR(inode); | 1211 | ret = PTR_ERR(inode); |
| 1211 | switch (ret) { | 1212 | switch (ret) { |
diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h index 6cf12ba9f4e7..d24a8e07b5e2 100644 --- a/fs/nfs/nfs4_fs.h +++ b/fs/nfs/nfs4_fs.h | |||
| @@ -242,7 +242,6 @@ extern int nfs4_proc_renew(struct nfs_client *, struct rpc_cred *); | |||
| 242 | extern int nfs4_init_clientid(struct nfs_client *, struct rpc_cred *); | 242 | extern int nfs4_init_clientid(struct nfs_client *, struct rpc_cred *); |
| 243 | extern int nfs41_init_clientid(struct nfs_client *, struct rpc_cred *); | 243 | extern int nfs41_init_clientid(struct nfs_client *, struct rpc_cred *); |
| 244 | extern int nfs4_do_close(struct path *path, struct nfs4_state *state, gfp_t gfp_mask, int wait); | 244 | extern int nfs4_do_close(struct path *path, struct nfs4_state *state, gfp_t gfp_mask, int wait); |
| 245 | extern struct inode *nfs4_atomic_open(struct inode *, struct nfs_open_context *, int, struct iattr *); | ||
| 246 | extern int nfs4_server_capabilities(struct nfs_server *server, struct nfs_fh *fhandle); | 245 | extern int nfs4_server_capabilities(struct nfs_server *server, struct nfs_fh *fhandle); |
| 247 | extern int nfs4_proc_fs_locations(struct inode *dir, const struct qstr *name, | 246 | extern int nfs4_proc_fs_locations(struct inode *dir, const struct qstr *name, |
| 248 | struct nfs4_fs_locations *fs_locations, struct page *page); | 247 | struct nfs4_fs_locations *fs_locations, struct page *page); |
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 617b149ee16d..643abd26f2de 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
| @@ -1998,7 +1998,7 @@ out: | |||
| 1998 | return status; | 1998 | return status; |
| 1999 | } | 1999 | } |
| 2000 | 2000 | ||
| 2001 | struct inode * | 2001 | static struct inode * |
| 2002 | nfs4_atomic_open(struct inode *dir, struct nfs_open_context *ctx, int open_flags, struct iattr *attr) | 2002 | nfs4_atomic_open(struct inode *dir, struct nfs_open_context *ctx, int open_flags, struct iattr *attr) |
| 2003 | { | 2003 | { |
| 2004 | struct nfs4_state *state; | 2004 | struct nfs4_state *state; |
| @@ -5358,6 +5358,7 @@ const struct nfs_rpc_ops nfs_v4_clientops = { | |||
| 5358 | .lock = nfs4_proc_lock, | 5358 | .lock = nfs4_proc_lock, |
| 5359 | .clear_acl_cache = nfs4_zap_acl_attr, | 5359 | .clear_acl_cache = nfs4_zap_acl_attr, |
| 5360 | .close_context = nfs4_close_context, | 5360 | .close_context = nfs4_close_context, |
| 5361 | .open_context = nfs4_atomic_open, | ||
| 5361 | }; | 5362 | }; |
| 5362 | 5363 | ||
| 5363 | /* | 5364 | /* |
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index b1484dad7bef..6f345f8af4ae 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
| @@ -1065,6 +1065,10 @@ struct nfs_rpc_ops { | |||
| 1065 | int (*lock_check_bounds)(const struct file_lock *); | 1065 | int (*lock_check_bounds)(const struct file_lock *); |
| 1066 | void (*clear_acl_cache)(struct inode *); | 1066 | void (*clear_acl_cache)(struct inode *); |
| 1067 | void (*close_context)(struct nfs_open_context *ctx, int); | 1067 | void (*close_context)(struct nfs_open_context *ctx, int); |
| 1068 | struct inode * (*open_context) (struct inode *dir, | ||
| 1069 | struct nfs_open_context *ctx, | ||
| 1070 | int open_flags, | ||
| 1071 | struct iattr *iattr); | ||
| 1068 | }; | 1072 | }; |
| 1069 | 1073 | ||
| 1070 | /* | 1074 | /* |
