Skip to content

Commit

Permalink
NFSD: Refactor nfsd4_do_encode_secinfo() again
Browse files Browse the repository at this point in the history
Extract the code that encodes the secinfo4 union data type to
clarify the logic. The removed warning is pretty well obscured and
thus probably not terribly useful.

Reviewed-by: NeilBrown <neilb@suse.de>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
  • Loading branch information
chucklever committed Jan 11, 2025
1 parent 201cb20 commit 825562b
Showing 1 changed file with 34 additions and 31 deletions.
65 changes: 34 additions & 31 deletions fs/nfsd/nfs4xdr.c
Original file line number Diff line number Diff line change
Expand Up @@ -4613,13 +4613,41 @@ nfsd4_encode_rpcsec_gss_info(struct xdr_stream *xdr,
return nfs_ok;
}

static __be32
nfsd4_encode_secinfo4(struct xdr_stream *xdr, rpc_authflavor_t pf,
u32 *supported)
{
struct rpcsec_gss_info info;
__be32 status;

if (rpcauth_get_gssinfo(pf, &info) == 0) {
(*supported)++;

/* flavor */
status = nfsd4_encode_uint32_t(xdr, RPC_AUTH_GSS);
if (status != nfs_ok)
return status;
/* flavor_info */
status = nfsd4_encode_rpcsec_gss_info(xdr, &info);
if (status != nfs_ok)
return status;
} else if (pf < RPC_AUTH_MAXFLAVOR) {
(*supported)++;

/* flavor */
status = nfsd4_encode_uint32_t(xdr, pf);
if (status != nfs_ok)
return status;
}
return nfs_ok;
}

static __be32
nfsd4_do_encode_secinfo(struct xdr_stream *xdr, struct svc_export *exp)
{
u32 i, nflavs, supported;
struct exp_flavor_info *flavs;
struct exp_flavor_info def_flavs[2];
static bool report = true;
__be32 *flavorsp;
__be32 status;

Expand All @@ -4643,42 +4671,17 @@ nfsd4_do_encode_secinfo(struct xdr_stream *xdr, struct svc_export *exp)
}
}

supported = 0;
flavorsp = xdr_reserve_space(xdr, XDR_UNIT);
if (!flavorsp)
return nfserr_resource;

for (i = 0; i < nflavs; i++) {
rpc_authflavor_t pf = flavs[i].pseudoflavor;
struct rpcsec_gss_info info;

if (rpcauth_get_gssinfo(pf, &info) == 0) {
supported++;

/* flavor */
status = nfsd4_encode_uint32_t(xdr, RPC_AUTH_GSS);
if (status != nfs_ok)
return status;
/* flavor_info */
status = nfsd4_encode_rpcsec_gss_info(xdr, &info);
if (status != nfs_ok)
return status;
} else if (pf < RPC_AUTH_MAXFLAVOR) {
supported++;

/* flavor */
status = nfsd4_encode_uint32_t(xdr, pf);
if (status != nfs_ok)
return status;
} else {
if (report)
pr_warn("NFS: SECINFO: security flavor %u "
"is not supported\n", pf);
}
for (i = 0, supported = 0; i < nflavs; i++) {
status = nfsd4_encode_secinfo4(xdr, flavs[i].pseudoflavor,
&supported);
if (status != nfs_ok)
return status;
}

if (nflavs != supported)
report = false;
*flavorsp = cpu_to_be32(supported);
return 0;
}
Expand Down

0 comments on commit 825562b

Please sign in to comment.