forked from Minki/linux
nfsd4: implement secinfo_no_name
Implementation of this operation is mandatory for NFSv4.1. Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
0ff7ab4671
commit
04f4ad16b2
@ -779,6 +779,29 @@ nfsd4_secinfo(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static __be32
|
||||||
|
nfsd4_secinfo_no_name(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
|
||||||
|
struct nfsd4_secinfo_no_name *sin)
|
||||||
|
{
|
||||||
|
__be32 err;
|
||||||
|
|
||||||
|
switch (sin->sin_style) {
|
||||||
|
case NFS4_SECINFO_STYLE4_CURRENT_FH:
|
||||||
|
break;
|
||||||
|
case NFS4_SECINFO_STYLE4_PARENT:
|
||||||
|
err = nfsd4_do_lookupp(rqstp, &cstate->current_fh);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return nfserr_inval;
|
||||||
|
}
|
||||||
|
exp_get(cstate->current_fh.fh_export);
|
||||||
|
sin->sin_exp = cstate->current_fh.fh_export;
|
||||||
|
fh_put(&cstate->current_fh);
|
||||||
|
return nfs_ok;
|
||||||
|
}
|
||||||
|
|
||||||
static __be32
|
static __be32
|
||||||
nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
|
nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
|
||||||
struct nfsd4_setattr *setattr)
|
struct nfsd4_setattr *setattr)
|
||||||
@ -1327,6 +1350,10 @@ static struct nfsd4_operation nfsd4_ops[] = {
|
|||||||
.op_flags = ALLOWED_WITHOUT_FH,
|
.op_flags = ALLOWED_WITHOUT_FH,
|
||||||
.op_name = "OP_RECLAIM_COMPLETE",
|
.op_name = "OP_RECLAIM_COMPLETE",
|
||||||
},
|
},
|
||||||
|
[OP_SECINFO_NO_NAME] = {
|
||||||
|
.op_func = (nfsd4op_func)nfsd4_secinfo_no_name,
|
||||||
|
.op_name = "OP_SECINFO_NO_NAME",
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *nfsd4_op_name(unsigned opnum)
|
static const char *nfsd4_op_name(unsigned opnum)
|
||||||
|
@ -846,6 +846,17 @@ nfsd4_decode_secinfo(struct nfsd4_compoundargs *argp,
|
|||||||
DECODE_TAIL;
|
DECODE_TAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static __be32
|
||||||
|
nfsd4_decode_secinfo_no_name(struct nfsd4_compoundargs *argp,
|
||||||
|
struct nfsd4_secinfo_no_name *sin)
|
||||||
|
{
|
||||||
|
DECODE_HEAD;
|
||||||
|
|
||||||
|
READ_BUF(4);
|
||||||
|
READ32(sin->sin_style);
|
||||||
|
DECODE_TAIL;
|
||||||
|
}
|
||||||
|
|
||||||
static __be32
|
static __be32
|
||||||
nfsd4_decode_setattr(struct nfsd4_compoundargs *argp, struct nfsd4_setattr *setattr)
|
nfsd4_decode_setattr(struct nfsd4_compoundargs *argp, struct nfsd4_setattr *setattr)
|
||||||
{
|
{
|
||||||
@ -1358,7 +1369,7 @@ static nfsd4_dec nfsd41_dec_ops[] = {
|
|||||||
[OP_LAYOUTCOMMIT] = (nfsd4_dec)nfsd4_decode_notsupp,
|
[OP_LAYOUTCOMMIT] = (nfsd4_dec)nfsd4_decode_notsupp,
|
||||||
[OP_LAYOUTGET] = (nfsd4_dec)nfsd4_decode_notsupp,
|
[OP_LAYOUTGET] = (nfsd4_dec)nfsd4_decode_notsupp,
|
||||||
[OP_LAYOUTRETURN] = (nfsd4_dec)nfsd4_decode_notsupp,
|
[OP_LAYOUTRETURN] = (nfsd4_dec)nfsd4_decode_notsupp,
|
||||||
[OP_SECINFO_NO_NAME] = (nfsd4_dec)nfsd4_decode_notsupp,
|
[OP_SECINFO_NO_NAME] = (nfsd4_dec)nfsd4_decode_secinfo_no_name,
|
||||||
[OP_SEQUENCE] = (nfsd4_dec)nfsd4_decode_sequence,
|
[OP_SEQUENCE] = (nfsd4_dec)nfsd4_decode_sequence,
|
||||||
[OP_SET_SSV] = (nfsd4_dec)nfsd4_decode_notsupp,
|
[OP_SET_SSV] = (nfsd4_dec)nfsd4_decode_notsupp,
|
||||||
[OP_TEST_STATEID] = (nfsd4_dec)nfsd4_decode_notsupp,
|
[OP_TEST_STATEID] = (nfsd4_dec)nfsd4_decode_notsupp,
|
||||||
@ -3162,7 +3173,7 @@ static nfsd4_enc nfsd4_enc_ops[] = {
|
|||||||
[OP_LAYOUTCOMMIT] = (nfsd4_enc)nfsd4_encode_noop,
|
[OP_LAYOUTCOMMIT] = (nfsd4_enc)nfsd4_encode_noop,
|
||||||
[OP_LAYOUTGET] = (nfsd4_enc)nfsd4_encode_noop,
|
[OP_LAYOUTGET] = (nfsd4_enc)nfsd4_encode_noop,
|
||||||
[OP_LAYOUTRETURN] = (nfsd4_enc)nfsd4_encode_noop,
|
[OP_LAYOUTRETURN] = (nfsd4_enc)nfsd4_encode_noop,
|
||||||
[OP_SECINFO_NO_NAME] = (nfsd4_enc)nfsd4_encode_noop,
|
[OP_SECINFO_NO_NAME] = (nfsd4_enc)nfsd4_encode_secinfo,
|
||||||
[OP_SEQUENCE] = (nfsd4_enc)nfsd4_encode_sequence,
|
[OP_SEQUENCE] = (nfsd4_enc)nfsd4_encode_sequence,
|
||||||
[OP_SET_SSV] = (nfsd4_enc)nfsd4_encode_noop,
|
[OP_SET_SSV] = (nfsd4_enc)nfsd4_encode_noop,
|
||||||
[OP_TEST_STATEID] = (nfsd4_enc)nfsd4_encode_noop,
|
[OP_TEST_STATEID] = (nfsd4_enc)nfsd4_encode_noop,
|
||||||
|
@ -311,6 +311,11 @@ struct nfsd4_secinfo {
|
|||||||
struct svc_export *si_exp; /* response */
|
struct svc_export *si_exp; /* response */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct nfsd4_secinfo_no_name {
|
||||||
|
u32 sin_style; /* request */
|
||||||
|
struct svc_export *sin_exp; /* response */
|
||||||
|
};
|
||||||
|
|
||||||
struct nfsd4_setattr {
|
struct nfsd4_setattr {
|
||||||
stateid_t sa_stateid; /* request */
|
stateid_t sa_stateid; /* request */
|
||||||
u32 sa_bmval[3]; /* request */
|
u32 sa_bmval[3]; /* request */
|
||||||
|
@ -136,6 +136,9 @@
|
|||||||
#define SEQ4_STATUS_CB_PATH_DOWN_SESSION 0x00000200
|
#define SEQ4_STATUS_CB_PATH_DOWN_SESSION 0x00000200
|
||||||
#define SEQ4_STATUS_BACKCHANNEL_FAULT 0x00000400
|
#define SEQ4_STATUS_BACKCHANNEL_FAULT 0x00000400
|
||||||
|
|
||||||
|
#define NFS4_SECINFO_STYLE4_CURRENT_FH 0
|
||||||
|
#define NFS4_SECINFO_STYLE4_PARENT 1
|
||||||
|
|
||||||
#define NFS4_MAX_UINT64 (~(u64)0)
|
#define NFS4_MAX_UINT64 (~(u64)0)
|
||||||
|
|
||||||
/* An NFS4 sessions server must support at least NFS4_MAX_OPS operations.
|
/* An NFS4 sessions server must support at least NFS4_MAX_OPS operations.
|
||||||
|
Loading…
Reference in New Issue
Block a user