Commit a1aee9aa authored by Chuck Lever's avatar Chuck Lever
Browse files

NFSD: Clean up nfsd4_encode_entry4()



Reshape nfsd4_encode_entry4() to be more like the legacy dirent
encoders, which were recently rewritten to use xdr_stream.

Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent 3fc5048c
Loading
Loading
Loading
Loading
+6 −9
Original line number Diff line number Diff line
@@ -3772,7 +3772,6 @@ nfsd4_encode_entry4(void *ccdv, const char *name, int namlen,
	u32 name_and_cookie;
	int entry_bytes;
	__be32 nfserr = nfserr_toosmall;
	__be32 *p;

	/* In nfsv4, "." and ".." never make it onto the wire.. */
	if (name && isdotent(name, namlen)) {
@@ -3783,17 +3782,15 @@ nfsd4_encode_entry4(void *ccdv, const char *name, int namlen,
	/* Encode the previous entry's cookie value */
	nfsd4_encode_entry4_nfs_cookie4(cd, offset);

	p = xdr_reserve_space(xdr, 4);
	if (!p)
	if (xdr_stream_encode_item_present(xdr) != XDR_UNIT)
		goto fail;
	*p++ = xdr_one;                             /* mark entry present */

	/* Reserve send buffer space for this entry's cookie value. */
	cookie_offset = xdr->buf->len;
	p = xdr_reserve_space(xdr, 3*4 + namlen);
	if (!p)
	if (nfsd4_encode_nfs_cookie4(xdr, OFFSET_MAX) != nfs_ok)
		goto fail;
	if (nfsd4_encode_component4(xdr, name, namlen) != nfs_ok)
		goto fail;
	p = xdr_encode_hyper(p, OFFSET_MAX);        /* offset of next entry */
	p = xdr_encode_array(p, name, namlen);      /* name length & name */

	nfserr = nfsd4_encode_entry4_fattr(cd, name, namlen);
	switch (nfserr) {
	case nfs_ok:
+3 −0
Original line number Diff line number Diff line
@@ -120,6 +120,7 @@ nfsd4_encode_uint64_t(struct xdr_stream *xdr, u64 val)
}

#define nfsd4_encode_changeid4(x, v)	nfsd4_encode_uint64_t(x, v)
#define nfsd4_encode_nfs_cookie4(x, v)	nfsd4_encode_uint64_t(x, v)
#define nfsd4_encode_length4(x, v)	nfsd4_encode_uint64_t(x, v)
#define nfsd4_encode_offset4(x, v)	nfsd4_encode_uint64_t(x, v)

@@ -174,6 +175,8 @@ nfsd4_encode_opaque(struct xdr_stream *xdr, const void *data, size_t size)
	return nfs_ok;
}

#define nfsd4_encode_component4(x, d, s)	nfsd4_encode_opaque(x, d, s)

struct nfsd4_compound_state {
	struct svc_fh		current_fh;
	struct svc_fh		save_fh;