Commit 2b484297 authored by Trond Myklebust's avatar Trond Myklebust

NFS: Add an 'open_context' element to struct nfs_rpc_ops

Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent c0204fd2
...@@ -34,7 +34,6 @@ ...@@ -34,7 +34,6 @@
#include <linux/mount.h> #include <linux/mount.h>
#include <linux/sched.h> #include <linux/sched.h>
#include "nfs4_fs.h"
#include "delegation.h" #include "delegation.h"
#include "iostat.h" #include "iostat.h"
#include "internal.h" #include "internal.h"
...@@ -1127,7 +1126,7 @@ static struct dentry *nfs_atomic_lookup(struct inode *dir, struct dentry *dentry ...@@ -1127,7 +1126,7 @@ static struct dentry *nfs_atomic_lookup(struct inode *dir, struct dentry *dentry
/* Open the file on the server */ /* Open the file on the server */
nfs_block_sillyrename(dentry->d_parent); nfs_block_sillyrename(dentry->d_parent);
inode = nfs4_atomic_open(dir, ctx, open_flags, &attr); inode = NFS_PROTO(dir)->open_context(dir, ctx, open_flags, &attr);
if (IS_ERR(inode)) { if (IS_ERR(inode)) {
nfs_unblock_sillyrename(dentry->d_parent); nfs_unblock_sillyrename(dentry->d_parent);
put_nfs_open_context(ctx); put_nfs_open_context(ctx);
...@@ -1175,8 +1174,10 @@ static int nfs_open_revalidate(struct dentry *dentry, struct nameidata *nd) ...@@ -1175,8 +1174,10 @@ static int nfs_open_revalidate(struct dentry *dentry, struct nameidata *nd)
if (!is_atomic_open(nd) || d_mountpoint(dentry)) if (!is_atomic_open(nd) || d_mountpoint(dentry))
goto no_open; goto no_open;
parent = dget_parent(dentry); parent = dget_parent(dentry);
dir = parent->d_inode; dir = parent->d_inode;
/* We can't create new files in nfs_open_revalidate(), so we /* We can't create new files in nfs_open_revalidate(), so we
* optimize away revalidation of negative dentries. * optimize away revalidation of negative dentries.
*/ */
...@@ -1205,7 +1206,7 @@ static int nfs_open_revalidate(struct dentry *dentry, struct nameidata *nd) ...@@ -1205,7 +1206,7 @@ static int nfs_open_revalidate(struct dentry *dentry, struct nameidata *nd)
* operations that change the directory. We therefore save the * operations that change the directory. We therefore save the
* change attribute *before* we do the RPC call. * change attribute *before* we do the RPC call.
*/ */
inode = nfs4_atomic_open(dir, ctx, openflags, NULL); inode = NFS_PROTO(dir)->open_context(dir, ctx, openflags, NULL);
if (IS_ERR(inode)) { if (IS_ERR(inode)) {
ret = PTR_ERR(inode); ret = PTR_ERR(inode);
switch (ret) { switch (ret) {
......
...@@ -242,7 +242,6 @@ extern int nfs4_proc_renew(struct nfs_client *, struct rpc_cred *); ...@@ -242,7 +242,6 @@ extern int nfs4_proc_renew(struct nfs_client *, struct rpc_cred *);
extern int nfs4_init_clientid(struct nfs_client *, struct rpc_cred *); extern int nfs4_init_clientid(struct nfs_client *, struct rpc_cred *);
extern int nfs41_init_clientid(struct nfs_client *, struct rpc_cred *); extern int nfs41_init_clientid(struct nfs_client *, struct rpc_cred *);
extern int nfs4_do_close(struct path *path, struct nfs4_state *state, gfp_t gfp_mask, int wait); extern int nfs4_do_close(struct path *path, struct nfs4_state *state, gfp_t gfp_mask, int wait);
extern struct inode *nfs4_atomic_open(struct inode *, struct nfs_open_context *, int, struct iattr *);
extern int nfs4_server_capabilities(struct nfs_server *server, struct nfs_fh *fhandle); extern int nfs4_server_capabilities(struct nfs_server *server, struct nfs_fh *fhandle);
extern int nfs4_proc_fs_locations(struct inode *dir, const struct qstr *name, extern int nfs4_proc_fs_locations(struct inode *dir, const struct qstr *name,
struct nfs4_fs_locations *fs_locations, struct page *page); struct nfs4_fs_locations *fs_locations, struct page *page);
......
...@@ -1998,7 +1998,7 @@ int nfs4_do_close(struct path *path, struct nfs4_state *state, gfp_t gfp_mask, i ...@@ -1998,7 +1998,7 @@ int nfs4_do_close(struct path *path, struct nfs4_state *state, gfp_t gfp_mask, i
return status; return status;
} }
struct inode * static struct inode *
nfs4_atomic_open(struct inode *dir, struct nfs_open_context *ctx, int open_flags, struct iattr *attr) nfs4_atomic_open(struct inode *dir, struct nfs_open_context *ctx, int open_flags, struct iattr *attr)
{ {
struct nfs4_state *state; struct nfs4_state *state;
...@@ -5358,6 +5358,7 @@ const struct nfs_rpc_ops nfs_v4_clientops = { ...@@ -5358,6 +5358,7 @@ const struct nfs_rpc_ops nfs_v4_clientops = {
.lock = nfs4_proc_lock, .lock = nfs4_proc_lock,
.clear_acl_cache = nfs4_zap_acl_attr, .clear_acl_cache = nfs4_zap_acl_attr,
.close_context = nfs4_close_context, .close_context = nfs4_close_context,
.open_context = nfs4_atomic_open,
}; };
/* /*
......
...@@ -1065,6 +1065,10 @@ struct nfs_rpc_ops { ...@@ -1065,6 +1065,10 @@ struct nfs_rpc_ops {
int (*lock_check_bounds)(const struct file_lock *); int (*lock_check_bounds)(const struct file_lock *);
void (*clear_acl_cache)(struct inode *); void (*clear_acl_cache)(struct inode *);
void (*close_context)(struct nfs_open_context *ctx, int); void (*close_context)(struct nfs_open_context *ctx, int);
struct inode * (*open_context) (struct inode *dir,
struct nfs_open_context *ctx,
int open_flags,
struct iattr *iattr);
}; };
/* /*
......
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