Message ID | 1449067193-53310-3-git-send-email-aweits@rit.edu (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Dec 2, 2015 at 6:39 AM, Andrew Elble <aweits@rit.edu> wrote: > Allow LAYOUTRETURN and DELEGRETURN to use machine credentials if the > server supports it. Add request for OPEN_DOWNGRADE as the close path > also uses that. > > Signed-off-by: Andrew Elble <aweits@rit.edu> > --- > fs/nfs/nfs4proc.c | 20 ++++++++++++++++++++ > include/linux/nfs_fs_sb.h | 1 + > 2 files changed, 21 insertions(+) > > diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c > index 765a03559363..f7f45792676d 100644 > --- a/fs/nfs/nfs4proc.c > +++ b/fs/nfs/nfs4proc.c > @@ -5384,6 +5384,11 @@ static int _nfs4_proc_delegreturn(struct inode *inode, struct rpc_cred *cred, co > if (data == NULL) > return -ENOMEM; > nfs4_init_sequence(&data->args.seq_args, &data->res.seq_res, 1); > + > + nfs4_state_protect(server->nfs_client, > + NFS_SP4_MACH_CRED_CLEANUP, > + &task_setup_data.rpc_client, &msg); > + > data->args.fhandle = &data->fh; > data->args.stateid = &data->stateid; > data->args.bitmask = server->cache_consistency_bitmask; > @@ -6862,10 +6867,13 @@ static const struct nfs41_state_protection nfs4_sp4_mach_cred_request = { > }, > .allow.u.words = { > [0] = 1 << (OP_CLOSE) | > + 1 << (OP_OPEN_DOWNGRADE) | > 1 << (OP_LOCKU) | > + 1 << (OP_DELEGRETURN) | > 1 << (OP_COMMIT), > [1] = 1 << (OP_SECINFO - 32) | > 1 << (OP_SECINFO_NO_NAME - 32) | > + 1 << (OP_LAYOUTRETURN - 32) | > 1 << (OP_TEST_STATEID - 32) | > 1 << (OP_FREE_STATEID - 32) | > 1 << (OP_WRITE - 32) > @@ -6930,11 +6938,19 @@ static int nfs4_sp4_select_mode(struct nfs_client *clp, > } > > if (test_bit(OP_CLOSE, sp->allow.u.longs) && > + test_bit(OP_OPEN_DOWNGRADE, sp->allow.u.longs) && > + test_bit(OP_DELEGRETURN, sp->allow.u.longs) && > test_bit(OP_LOCKU, sp->allow.u.longs)) { > dfprintk(MOUNT, " cleanup mode enabled\n"); > set_bit(NFS_SP4_MACH_CRED_CLEANUP, &clp->cl_sp4_flags); > } > > + if (test_bit(OP_LAYOUTRETURN, sp->allow.u.longs)) { > + dfprintk(MOUNT, " pnfs cleanup mode enabled\n"); > + set_bit(NFS_SP4_MACH_CRED_PNFS_CLEANUP, > + &clp->cl_sp4_flags); > + } > + > if (test_bit(OP_SECINFO, sp->allow.u.longs) && > test_bit(OP_SECINFO_NO_NAME, sp->allow.u.longs)) { > dfprintk(MOUNT, " secinfo mode enabled\n"); > @@ -8086,6 +8102,10 @@ int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp, bool sync) > }; > int status = 0; > > + nfs4_state_protect(NFS_SERVER(lrp->args.inode)->nfs_client, > + NFS_SP4_MACH_CRED_PNFS_CLEANUP, > + &task_setup_data.rpc_client, &msg); > + > dprintk("--> %s\n", __func__); > if (!sync) { > lrp->inode = nfs_igrab_and_active(lrp->args.inode); > diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h > index 2469ab0bb3a1..7fcc13c8cf1f 100644 > --- a/include/linux/nfs_fs_sb.h > +++ b/include/linux/nfs_fs_sb.h > @@ -102,6 +102,7 @@ struct nfs_client { > #define NFS_SP4_MACH_CRED_STATEID 4 /* TEST_STATEID and FREE_STATEID */ > #define NFS_SP4_MACH_CRED_WRITE 5 /* WRITE */ > #define NFS_SP4_MACH_CRED_COMMIT 6 /* COMMIT */ > +#define NFS_SP4_MACH_CRED_PNFS_CLEANUP 7 /* LAYOUTRETURN */ > #endif /* CONFIG_NFS_V4 */ > > /* Our own IP address, as a null-terminated string. This patch looks fine, but can we please break it out of the series? There doesn't appear to be any dependency between this and the other patches, so it would be easier if I could just take it directly. -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Trond Myklebust <trond.myklebust@primarydata.com> writes: > On Wed, Dec 2, 2015 at 6:39 AM, Andrew Elble <aweits@rit.edu> wrote: >> Allow LAYOUTRETURN and DELEGRETURN to use machine credentials if the >> server supports it. Add request for OPEN_DOWNGRADE as the close path >> also uses that. > > This patch looks fine, but can we please break it out of the series? > There doesn't appear to be any dependency between this and the other > patches, so it would be easier if I could just take it directly. I'm fine with that - I have to (at least) do v2 on the rest, do you want me to repost it separately? Thanks, Andy
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 765a03559363..f7f45792676d 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -5384,6 +5384,11 @@ static int _nfs4_proc_delegreturn(struct inode *inode, struct rpc_cred *cred, co if (data == NULL) return -ENOMEM; nfs4_init_sequence(&data->args.seq_args, &data->res.seq_res, 1); + + nfs4_state_protect(server->nfs_client, + NFS_SP4_MACH_CRED_CLEANUP, + &task_setup_data.rpc_client, &msg); + data->args.fhandle = &data->fh; data->args.stateid = &data->stateid; data->args.bitmask = server->cache_consistency_bitmask; @@ -6862,10 +6867,13 @@ static const struct nfs41_state_protection nfs4_sp4_mach_cred_request = { }, .allow.u.words = { [0] = 1 << (OP_CLOSE) | + 1 << (OP_OPEN_DOWNGRADE) | 1 << (OP_LOCKU) | + 1 << (OP_DELEGRETURN) | 1 << (OP_COMMIT), [1] = 1 << (OP_SECINFO - 32) | 1 << (OP_SECINFO_NO_NAME - 32) | + 1 << (OP_LAYOUTRETURN - 32) | 1 << (OP_TEST_STATEID - 32) | 1 << (OP_FREE_STATEID - 32) | 1 << (OP_WRITE - 32) @@ -6930,11 +6938,19 @@ static int nfs4_sp4_select_mode(struct nfs_client *clp, } if (test_bit(OP_CLOSE, sp->allow.u.longs) && + test_bit(OP_OPEN_DOWNGRADE, sp->allow.u.longs) && + test_bit(OP_DELEGRETURN, sp->allow.u.longs) && test_bit(OP_LOCKU, sp->allow.u.longs)) { dfprintk(MOUNT, " cleanup mode enabled\n"); set_bit(NFS_SP4_MACH_CRED_CLEANUP, &clp->cl_sp4_flags); } + if (test_bit(OP_LAYOUTRETURN, sp->allow.u.longs)) { + dfprintk(MOUNT, " pnfs cleanup mode enabled\n"); + set_bit(NFS_SP4_MACH_CRED_PNFS_CLEANUP, + &clp->cl_sp4_flags); + } + if (test_bit(OP_SECINFO, sp->allow.u.longs) && test_bit(OP_SECINFO_NO_NAME, sp->allow.u.longs)) { dfprintk(MOUNT, " secinfo mode enabled\n"); @@ -8086,6 +8102,10 @@ int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp, bool sync) }; int status = 0; + nfs4_state_protect(NFS_SERVER(lrp->args.inode)->nfs_client, + NFS_SP4_MACH_CRED_PNFS_CLEANUP, + &task_setup_data.rpc_client, &msg); + dprintk("--> %s\n", __func__); if (!sync) { lrp->inode = nfs_igrab_and_active(lrp->args.inode); diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h index 2469ab0bb3a1..7fcc13c8cf1f 100644 --- a/include/linux/nfs_fs_sb.h +++ b/include/linux/nfs_fs_sb.h @@ -102,6 +102,7 @@ struct nfs_client { #define NFS_SP4_MACH_CRED_STATEID 4 /* TEST_STATEID and FREE_STATEID */ #define NFS_SP4_MACH_CRED_WRITE 5 /* WRITE */ #define NFS_SP4_MACH_CRED_COMMIT 6 /* COMMIT */ +#define NFS_SP4_MACH_CRED_PNFS_CLEANUP 7 /* LAYOUTRETURN */ #endif /* CONFIG_NFS_V4 */ /* Our own IP address, as a null-terminated string.
Allow LAYOUTRETURN and DELEGRETURN to use machine credentials if the server supports it. Add request for OPEN_DOWNGRADE as the close path also uses that. Signed-off-by: Andrew Elble <aweits@rit.edu> --- fs/nfs/nfs4proc.c | 20 ++++++++++++++++++++ include/linux/nfs_fs_sb.h | 1 + 2 files changed, 21 insertions(+)