Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f2c2c55

Browse files
trondmypdamschuma-ntap
authored andcommitted
NFS: Move delegation recall into the NFSv4 callback for rename_setup()
Move the delegation recall out of the generic code, and into the NFSv4 specific callback. Signed-off-by: Trond Myklebust <[email protected]> Signed-off-by: Anna Schumaker <[email protected]>
1 parent 912678d commit f2c2c55

File tree

6 files changed

+20
-14
lines changed

6 files changed

+20
-14
lines changed

fs/nfs/dir.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2020,10 +2020,6 @@ int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
20202020
}
20212021
}
20222022

2023-
NFS_PROTO(old_inode)->return_delegation(old_inode);
2024-
if (new_inode != NULL)
2025-
NFS_PROTO(new_inode)->return_delegation(new_inode);
2026-
20272023
task = nfs_async_rename(old_dir, new_dir, old_dentry, new_dentry, NULL);
20282024
if (IS_ERR(task)) {
20292025
error = PTR_ERR(task);

fs/nfs/nfs3proc.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,9 @@ nfs3_proc_unlink_done(struct rpc_task *task, struct inode *dir)
433433
}
434434

435435
static void
436-
nfs3_proc_rename_setup(struct rpc_message *msg, struct inode *dir)
436+
nfs3_proc_rename_setup(struct rpc_message *msg,
437+
struct dentry *old_dentry,
438+
struct dentry *new_dentry)
437439
{
438440
msg->rpc_proc = &nfs3_procedures[NFS3PROC_RENAME];
439441
}

fs/nfs/nfs4proc.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4267,14 +4267,21 @@ static int nfs4_proc_unlink_done(struct rpc_task *task, struct inode *dir)
42674267
return 1;
42684268
}
42694269

4270-
static void nfs4_proc_rename_setup(struct rpc_message *msg, struct inode *dir)
4270+
static void nfs4_proc_rename_setup(struct rpc_message *msg,
4271+
struct dentry *old_dentry,
4272+
struct dentry *new_dentry)
42714273
{
4272-
struct nfs_server *server = NFS_SERVER(dir);
42734274
struct nfs_renameargs *arg = msg->rpc_argp;
42744275
struct nfs_renameres *res = msg->rpc_resp;
4276+
struct inode *old_inode = d_inode(old_dentry);
4277+
struct inode *new_inode = d_inode(new_dentry);
42754278

4279+
if (old_inode)
4280+
nfs4_inode_return_delegation(old_inode);
4281+
if (new_inode)
4282+
nfs4_inode_return_delegation(new_inode);
42764283
msg->rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_RENAME];
4277-
res->server = server;
4284+
res->server = NFS_SB(old_dentry->d_sb);
42784285
nfs4_init_sequence(&arg->seq_args, &res->seq_res, 1);
42794286
}
42804287

fs/nfs/proc.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,9 @@ static int nfs_proc_unlink_done(struct rpc_task *task, struct inode *dir)
338338
}
339339

340340
static void
341-
nfs_proc_rename_setup(struct rpc_message *msg, struct inode *dir)
341+
nfs_proc_rename_setup(struct rpc_message *msg,
342+
struct dentry *old_dentry,
343+
struct dentry *new_dentry)
342344
{
343345
msg->rpc_proc = &nfs_procedures[NFSPROC_RENAME];
344346
}

fs/nfs/unlink.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,7 @@ nfs_async_rename(struct inode *old_dir, struct inode *new_dir,
386386

387387
nfs_sb_active(old_dir->i_sb);
388388

389-
NFS_PROTO(data->old_dir)->rename_setup(&msg, old_dir);
389+
NFS_PROTO(data->old_dir)->rename_setup(&msg, old_dentry, new_dentry);
390390

391391
return rpc_run_task(&task_setup_data);
392392
}
@@ -463,9 +463,6 @@ nfs_sillyrename(struct inode *dir, struct dentry *dentry)
463463

464464
fileid = NFS_FILEID(d_inode(dentry));
465465

466-
/* Return delegation in anticipation of the rename */
467-
NFS_PROTO(d_inode(dentry))->return_delegation(d_inode(dentry));
468-
469466
sdentry = NULL;
470467
do {
471468
int slen;

include/linux/nfs_xdr.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1594,7 +1594,9 @@ struct nfs_rpc_ops {
15941594
void (*unlink_setup) (struct rpc_message *, struct inode *dir);
15951595
void (*unlink_rpc_prepare) (struct rpc_task *, struct nfs_unlinkdata *);
15961596
int (*unlink_done) (struct rpc_task *, struct inode *);
1597-
void (*rename_setup) (struct rpc_message *msg, struct inode *dir);
1597+
void (*rename_setup) (struct rpc_message *msg,
1598+
struct dentry *old_dentry,
1599+
struct dentry *new_dentry);
15981600
void (*rename_rpc_prepare)(struct rpc_task *task, struct nfs_renamedata *);
15991601
int (*rename_done) (struct rpc_task *task, struct inode *old_dir, struct inode *new_dir);
16001602
int (*link) (struct inode *, struct inode *, const struct qstr *);

0 commit comments

Comments
 (0)