mirror of https://gitee.com/openkylin/linux.git
NFS: Add an 'open_context' element to struct nfs_rpc_ops
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
c0204fd2b8
commit
2b484297e4
|
@ -34,7 +34,6 @@
|
|||
#include <linux/mount.h>
|
||||
#include <linux/sched.h>
|
||||
|
||||
#include "nfs4_fs.h"
|
||||
#include "delegation.h"
|
||||
#include "iostat.h"
|
||||
#include "internal.h"
|
||||
|
@ -1127,7 +1126,7 @@ static struct dentry *nfs_atomic_lookup(struct inode *dir, struct dentry *dentry
|
|||
|
||||
/* Open the file on the server */
|
||||
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)) {
|
||||
nfs_unblock_sillyrename(dentry->d_parent);
|
||||
put_nfs_open_context(ctx);
|
||||
|
@ -1175,8 +1174,10 @@ static int nfs_open_revalidate(struct dentry *dentry, struct nameidata *nd)
|
|||
|
||||
if (!is_atomic_open(nd) || d_mountpoint(dentry))
|
||||
goto no_open;
|
||||
|
||||
parent = dget_parent(dentry);
|
||||
dir = parent->d_inode;
|
||||
|
||||
/* We can't create new files in nfs_open_revalidate(), so we
|
||||
* optimize away revalidation of negative dentries.
|
||||
*/
|
||||
|
@ -1205,7 +1206,7 @@ static int nfs_open_revalidate(struct dentry *dentry, struct nameidata *nd)
|
|||
* operations that change the directory. We therefore save the
|
||||
* 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)) {
|
||||
ret = PTR_ERR(inode);
|
||||
switch (ret) {
|
||||
|
|
|
@ -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 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 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_proc_fs_locations(struct inode *dir, const struct qstr *name,
|
||||
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
|
|||
return status;
|
||||
}
|
||||
|
||||
struct inode *
|
||||
static struct inode *
|
||||
nfs4_atomic_open(struct inode *dir, struct nfs_open_context *ctx, int open_flags, struct iattr *attr)
|
||||
{
|
||||
struct nfs4_state *state;
|
||||
|
@ -5358,6 +5358,7 @@ const struct nfs_rpc_ops nfs_v4_clientops = {
|
|||
.lock = nfs4_proc_lock,
|
||||
.clear_acl_cache = nfs4_zap_acl_attr,
|
||||
.close_context = nfs4_close_context,
|
||||
.open_context = nfs4_atomic_open,
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -1065,6 +1065,10 @@ struct nfs_rpc_ops {
|
|||
int (*lock_check_bounds)(const struct file_lock *);
|
||||
void (*clear_acl_cache)(struct inode *);
|
||||
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);
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue