* [PATCH v1 0/5] Clean up XDR encoders for NFSv4 READDIR
@ 2023-10-04 13:41 Chuck Lever
2023-10-04 13:41 ` [PATCH v1 1/5] NFSD: Rename nfsd4_encode_dirent() Chuck Lever
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Chuck Lever @ 2023-10-04 13:41 UTC (permalink / raw)
To: linux-nfs; +Cc: Chuck Lever
Tidy up the server-side XDR encoders for READDIR results and
directory entries. Series applies to nfsd-next. See topic branch
"nfsd4-encoder-overhaul" in this repo:
https://git.kernel.org/pub/scm/linux/kernel/git/cel/linux.git
---
Chuck Lever (5):
NFSD: Rename nfsd4_encode_dirent()
NFSD: Clean up nfsd4_encode_rdattr_error()
NFSD: Add an nfsd4_encode_nfs_cookie4() helper
NFSD: Clean up nfsd4_encode_entry4()
NFSD: Clean up nfsd4_encode_readdir()
fs/nfsd/nfs4xdr.c | 200 +++++++++++++++++++++++-----------------------
fs/nfsd/xdr4.h | 3 +
2 files changed, 104 insertions(+), 99 deletions(-)
--
Chuck Lever
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v1 1/5] NFSD: Rename nfsd4_encode_dirent()
2023-10-04 13:41 [PATCH v1 0/5] Clean up XDR encoders for NFSv4 READDIR Chuck Lever
@ 2023-10-04 13:41 ` Chuck Lever
2023-10-04 13:41 ` [PATCH v1 2/5] NFSD: Clean up nfsd4_encode_rdattr_error() Chuck Lever
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Chuck Lever @ 2023-10-04 13:41 UTC (permalink / raw)
To: linux-nfs; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
Rename nfsd4_encode_dirent() to match the naming convention already
used in the NFSv2 and NFSv3 readdir paths. The new name reflects the
name of the spec-defined XDR data type for an NFSv4 directory entry.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
fs/nfsd/nfs4xdr.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index f1f0b707c7d9..a6b6ff5819e9 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -3670,8 +3670,8 @@ static inline int attributes_need_mount(u32 *bmval)
}
static __be32
-nfsd4_encode_dirent_fattr(struct xdr_stream *xdr, struct nfsd4_readdir *cd,
- const char *name, int namlen)
+nfsd4_encode_entry4_fattr(struct nfsd4_readdir *cd, const char *name,
+ int namlen)
{
struct svc_export *exp = cd->rd_fhp->fh_export;
struct dentry *dentry;
@@ -3714,7 +3714,7 @@ nfsd4_encode_dirent_fattr(struct xdr_stream *xdr, struct nfsd4_readdir *cd,
}
out_encode:
- nfserr = nfsd4_encode_fattr4(cd->rd_rqstp, xdr, NULL, exp, dentry,
+ nfserr = nfsd4_encode_fattr4(cd->rd_rqstp, cd->xdr, NULL, exp, dentry,
cd->rd_bmval, ignore_crossmnt);
out_put:
dput(dentry);
@@ -3740,7 +3740,7 @@ nfsd4_encode_rdattr_error(struct xdr_stream *xdr, __be32 nfserr)
}
static int
-nfsd4_encode_dirent(void *ccdv, const char *name, int namlen,
+nfsd4_encode_entry4(void *ccdv, const char *name, int namlen,
loff_t offset, u64 ino, unsigned int d_type)
{
struct readdir_cd *ccd = ccdv;
@@ -3777,7 +3777,7 @@ nfsd4_encode_dirent(void *ccdv, const char *name, int namlen,
p = xdr_encode_hyper(p, OFFSET_MAX); /* offset of next entry */
p = xdr_encode_array(p, name, namlen); /* name length & name */
- nfserr = nfsd4_encode_dirent_fattr(xdr, cd, name, namlen);
+ nfserr = nfsd4_encode_entry4_fattr(cd, name, namlen);
switch (nfserr) {
case nfs_ok:
break;
@@ -4489,9 +4489,8 @@ nfsd4_encode_readdir(struct nfsd4_compoundres *resp, __be32 nfserr,
readdir->cookie_offset = 0;
offset = readdir->rd_cookie;
- nfserr = nfsd_readdir(readdir->rd_rqstp, readdir->rd_fhp,
- &offset,
- &readdir->common, nfsd4_encode_dirent);
+ nfserr = nfsd_readdir(readdir->rd_rqstp, readdir->rd_fhp, &offset,
+ &readdir->common, nfsd4_encode_entry4);
if (nfserr == nfs_ok &&
readdir->common.err == nfserr_toosmall &&
xdr->buf->len == starting_len + 8) {
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v1 2/5] NFSD: Clean up nfsd4_encode_rdattr_error()
2023-10-04 13:41 [PATCH v1 0/5] Clean up XDR encoders for NFSv4 READDIR Chuck Lever
2023-10-04 13:41 ` [PATCH v1 1/5] NFSD: Rename nfsd4_encode_dirent() Chuck Lever
@ 2023-10-04 13:41 ` Chuck Lever
2023-10-04 13:41 ` [PATCH v1 3/5] NFSD: Add an nfsd4_encode_nfs_cookie4() helper Chuck Lever
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Chuck Lever @ 2023-10-04 13:41 UTC (permalink / raw)
To: linux-nfs; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
No need for specialized code here, as this function is invoked only
rarely. Convert it to encode to xdr_stream using conventional XDR
helpers.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
fs/nfsd/nfs4xdr.c | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index a6b6ff5819e9..26a9391d7766 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -3722,21 +3722,22 @@ nfsd4_encode_entry4_fattr(struct nfsd4_readdir *cd, const char *name,
return nfserr;
}
-static __be32 *
-nfsd4_encode_rdattr_error(struct xdr_stream *xdr, __be32 nfserr)
+static __be32
+nfsd4_encode_entry4_rdattr_error(struct xdr_stream *xdr, __be32 nfserr)
{
- __be32 *p;
-
- p = xdr_reserve_space(xdr, 20);
- if (!p)
- return NULL;
- *p++ = htonl(2);
- *p++ = htonl(FATTR4_WORD0_RDATTR_ERROR); /* bmval0 */
- *p++ = htonl(0); /* bmval1 */
+ __be32 status;
- *p++ = htonl(4); /* attribute length */
- *p++ = nfserr; /* no htonl */
- return p;
+ /* attrmask */
+ status = nfsd4_encode_bitmap4(xdr, FATTR4_WORD0_RDATTR_ERROR, 0, 0);
+ if (status != nfs_ok)
+ return status;
+ /* attr_vals */
+ if (xdr_stream_encode_u32(xdr, XDR_UNIT) != XDR_UNIT)
+ return nfserr_resource;
+ /* rdattr_error */
+ if (xdr_stream_encode_be32(xdr, nfserr) != XDR_UNIT)
+ return nfserr_resource;
+ return nfs_ok;
}
static int
@@ -3808,8 +3809,7 @@ nfsd4_encode_entry4(void *ccdv, const char *name, int namlen,
*/
if (!(cd->rd_bmval[0] & FATTR4_WORD0_RDATTR_ERROR))
goto fail;
- p = nfsd4_encode_rdattr_error(xdr, nfserr);
- if (p == NULL) {
+ if (nfsd4_encode_entry4_rdattr_error(xdr, nfserr)) {
nfserr = nfserr_toosmall;
goto fail;
}
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v1 3/5] NFSD: Add an nfsd4_encode_nfs_cookie4() helper
2023-10-04 13:41 [PATCH v1 0/5] Clean up XDR encoders for NFSv4 READDIR Chuck Lever
2023-10-04 13:41 ` [PATCH v1 1/5] NFSD: Rename nfsd4_encode_dirent() Chuck Lever
2023-10-04 13:41 ` [PATCH v1 2/5] NFSD: Clean up nfsd4_encode_rdattr_error() Chuck Lever
@ 2023-10-04 13:41 ` Chuck Lever
2023-10-04 13:42 ` [PATCH v1 4/5] NFSD: Clean up nfsd4_encode_entry4() Chuck Lever
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Chuck Lever @ 2023-10-04 13:41 UTC (permalink / raw)
To: linux-nfs; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
De-duplicate the entry4 cookie encoder, similar to the arrangement
for the NFSv2 and NFSv3 directory entry encoders.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
fs/nfsd/nfs4xdr.c | 32 ++++++++++++++++++++------------
1 file changed, 20 insertions(+), 12 deletions(-)
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 26a9391d7766..3eba3f316d97 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -3660,6 +3660,22 @@ __be32 nfsd4_encode_fattr_to_buf(__be32 **p, int words,
return ret;
}
+/*
+ * The buffer space for this field was reserved during a previous
+ * call to nfsd4_encode_entry4().
+ */
+static void nfsd4_encode_entry4_nfs_cookie4(const struct nfsd4_readdir *readdir,
+ u64 offset)
+{
+ __be64 cookie = cpu_to_be64(offset);
+ struct xdr_stream *xdr = readdir->xdr;
+
+ if (!readdir->cookie_offset)
+ return;
+ write_bytes_to_xdr_buf(xdr->buf, readdir->cookie_offset, &cookie,
+ sizeof(cookie));
+}
+
static inline int attributes_need_mount(u32 *bmval)
{
if (bmval[0] & ~(FATTR4_WORD0_RDATTR_ERROR | FATTR4_WORD0_LEASE_TIME))
@@ -3752,7 +3768,6 @@ nfsd4_encode_entry4(void *ccdv, const char *name, int namlen,
u32 name_and_cookie;
int entry_bytes;
__be32 nfserr = nfserr_toosmall;
- __be64 wire_offset;
__be32 *p;
/* In nfsv4, "." and ".." never make it onto the wire.. */
@@ -3761,11 +3776,8 @@ nfsd4_encode_entry4(void *ccdv, const char *name, int namlen,
return 0;
}
- if (cd->cookie_offset) {
- wire_offset = cpu_to_be64(offset);
- write_bytes_to_xdr_buf(xdr->buf, cd->cookie_offset,
- &wire_offset, 8);
- }
+ /* Encode the previous entry's cookie value */
+ nfsd4_encode_entry4_nfs_cookie4(cd, offset);
p = xdr_reserve_space(xdr, 4);
if (!p)
@@ -4447,7 +4459,6 @@ nfsd4_encode_readdir(struct nfsd4_compoundres *resp, __be32 nfserr,
int maxcount;
int bytes_left;
loff_t offset;
- __be64 wire_offset;
struct xdr_stream *xdr = resp->xdr;
int starting_len = xdr->buf->len;
__be32 *p;
@@ -4505,11 +4516,8 @@ nfsd4_encode_readdir(struct nfsd4_compoundres *resp, __be32 nfserr,
if (nfserr)
goto err_no_verf;
- if (readdir->cookie_offset) {
- wire_offset = cpu_to_be64(offset);
- write_bytes_to_xdr_buf(xdr->buf, readdir->cookie_offset,
- &wire_offset, 8);
- }
+ /* Encode the final entry's cookie value */
+ nfsd4_encode_entry4_nfs_cookie4(readdir, offset);
p = xdr_reserve_space(xdr, 8);
if (!p) {
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v1 4/5] NFSD: Clean up nfsd4_encode_entry4()
2023-10-04 13:41 [PATCH v1 0/5] Clean up XDR encoders for NFSv4 READDIR Chuck Lever
` (2 preceding siblings ...)
2023-10-04 13:41 ` [PATCH v1 3/5] NFSD: Add an nfsd4_encode_nfs_cookie4() helper Chuck Lever
@ 2023-10-04 13:42 ` Chuck Lever
2023-10-04 13:42 ` [PATCH v1 5/5] NFSD: Clean up nfsd4_encode_readdir() Chuck Lever
2023-10-09 17:36 ` [PATCH v1 0/5] Clean up XDR encoders for NFSv4 READDIR Jeff Layton
5 siblings, 0 replies; 7+ messages in thread
From: Chuck Lever @ 2023-10-04 13:42 UTC (permalink / raw)
To: linux-nfs; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
Reshape nfsd4_encode_entry4() to be more like the legacy dirent
encoders, which were recently rewritten to use xdr_stream.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
fs/nfsd/nfs4xdr.c | 15 ++++++---------
fs/nfsd/xdr4.h | 3 +++
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 3eba3f316d97..cfc8e241e8fb 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -3768,7 +3768,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)) {
@@ -3779,17 +3778,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:
diff --git a/fs/nfsd/xdr4.h b/fs/nfsd/xdr4.h
index cd124969589e..6f5c3f4b4ca3 100644
--- a/fs/nfsd/xdr4.h
+++ b/fs/nfsd/xdr4.h
@@ -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;
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v1 5/5] NFSD: Clean up nfsd4_encode_readdir()
2023-10-04 13:41 [PATCH v1 0/5] Clean up XDR encoders for NFSv4 READDIR Chuck Lever
` (3 preceding siblings ...)
2023-10-04 13:42 ` [PATCH v1 4/5] NFSD: Clean up nfsd4_encode_entry4() Chuck Lever
@ 2023-10-04 13:42 ` Chuck Lever
2023-10-09 17:36 ` [PATCH v1 0/5] Clean up XDR encoders for NFSv4 READDIR Jeff Layton
5 siblings, 0 replies; 7+ messages in thread
From: Chuck Lever @ 2023-10-04 13:42 UTC (permalink / raw)
To: linux-nfs; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
Untangle nfsd4_encode_readdir() so it is more clear what XDR data
item is being encoded by which piece of code.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
fs/nfsd/nfs4xdr.c | 112 ++++++++++++++++++++++++++---------------------------
1 file changed, 55 insertions(+), 57 deletions(-)
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index cfc8e241e8fb..5efcd9691e5d 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -4448,85 +4448,83 @@ nfsd4_encode_readlink(struct nfsd4_compoundres *resp, __be32 nfserr,
return nfserr;
}
-static __be32
-nfsd4_encode_readdir(struct nfsd4_compoundres *resp, __be32 nfserr,
- union nfsd4_op_u *u)
+static __be32 nfsd4_encode_dirlist4(struct xdr_stream *xdr,
+ struct nfsd4_readdir *readdir,
+ u32 max_payload)
{
- struct nfsd4_readdir *readdir = &u->readdir;
- int maxcount;
- int bytes_left;
+ int bytes_left, maxcount, starting_len = xdr->buf->len;
loff_t offset;
- struct xdr_stream *xdr = resp->xdr;
- int starting_len = xdr->buf->len;
- __be32 *p;
-
- nfserr = nfsd4_encode_verifier4(xdr, &readdir->rd_verf);
- if (nfserr != nfs_ok)
- return nfserr;
+ __be32 status;
/*
* Number of bytes left for directory entries allowing for the
- * final 8 bytes of the readdir and a following failed op:
+ * final 8 bytes of the readdir and a following failed op.
*/
- bytes_left = xdr->buf->buflen - xdr->buf->len
- - COMPOUND_ERR_SLACK_SPACE - 8;
- if (bytes_left < 0) {
- nfserr = nfserr_resource;
- goto err_no_verf;
- }
- maxcount = svc_max_payload(resp->rqstp);
- maxcount = min_t(u32, readdir->rd_maxcount, maxcount);
+ bytes_left = xdr->buf->buflen - xdr->buf->len -
+ COMPOUND_ERR_SLACK_SPACE - XDR_UNIT * 2;
+ if (bytes_left < 0)
+ return nfserr_resource;
+ maxcount = min_t(u32, readdir->rd_maxcount, max_payload);
+
/*
- * Note the rfc defines rd_maxcount as the size of the
- * READDIR4resok structure, which includes the verifier above
- * and the 8 bytes encoded at the end of this function:
+ * The RFC defines rd_maxcount as the size of the
+ * READDIR4resok structure, which includes the verifier
+ * and the 8 bytes encoded at the end of this function.
*/
- if (maxcount < 16) {
- nfserr = nfserr_toosmall;
- goto err_no_verf;
- }
- maxcount = min_t(int, maxcount-16, bytes_left);
+ if (maxcount < XDR_UNIT * 4)
+ return nfserr_toosmall;
+ maxcount = min_t(int, maxcount - XDR_UNIT * 4, bytes_left);
- /* RFC 3530 14.2.24 allows us to ignore dircount when it's 0: */
+ /* RFC 3530 14.2.24 allows us to ignore dircount when it's 0 */
if (!readdir->rd_dircount)
- readdir->rd_dircount = svc_max_payload(resp->rqstp);
+ readdir->rd_dircount = max_payload;
+ /* *entries */
readdir->xdr = xdr;
readdir->rd_maxcount = maxcount;
readdir->common.err = 0;
readdir->cookie_offset = 0;
-
offset = readdir->rd_cookie;
- nfserr = nfsd_readdir(readdir->rd_rqstp, readdir->rd_fhp, &offset,
+ status = nfsd_readdir(readdir->rd_rqstp, readdir->rd_fhp, &offset,
&readdir->common, nfsd4_encode_entry4);
- if (nfserr == nfs_ok &&
- readdir->common.err == nfserr_toosmall &&
- xdr->buf->len == starting_len + 8) {
- /* nothing encoded; which limit did we hit?: */
- if (maxcount - 16 < bytes_left)
- /* It was the fault of rd_maxcount: */
- nfserr = nfserr_toosmall;
- else
- /* We ran out of buffer space: */
- nfserr = nfserr_resource;
+ if (status)
+ return status;
+ if (readdir->common.err == nfserr_toosmall &&
+ xdr->buf->len == starting_len) {
+ /* No entries were encoded. Which limit did we hit? */
+ if (maxcount - XDR_UNIT * 4 < bytes_left)
+ /* It was the fault of rd_maxcount */
+ return nfserr_toosmall;
+ /* We ran out of buffer space */
+ return nfserr_resource;
}
- if (nfserr)
- goto err_no_verf;
-
/* Encode the final entry's cookie value */
nfsd4_encode_entry4_nfs_cookie4(readdir, offset);
+ /* No entries follow */
+ if (xdr_stream_encode_item_absent(xdr) != XDR_UNIT)
+ return nfserr_resource;
- p = xdr_reserve_space(xdr, 8);
- if (!p) {
- WARN_ON_ONCE(1);
- goto err_no_verf;
- }
- *p++ = 0; /* no more entries */
- *p++ = htonl(readdir->common.err == nfserr_eof);
+ /* eof */
+ return nfsd4_encode_bool(xdr, readdir->common.err == nfserr_eof);
+}
- return 0;
-err_no_verf:
- xdr_truncate_encode(xdr, starting_len);
+static __be32
+nfsd4_encode_readdir(struct nfsd4_compoundres *resp, __be32 nfserr,
+ union nfsd4_op_u *u)
+{
+ struct nfsd4_readdir *readdir = &u->readdir;
+ struct xdr_stream *xdr = resp->xdr;
+ int starting_len = xdr->buf->len;
+
+ /* cookieverf */
+ nfserr = nfsd4_encode_verifier4(xdr, &readdir->rd_verf);
+ if (nfserr != nfs_ok)
+ return nfserr;
+
+ /* reply */
+ nfserr = nfsd4_encode_dirlist4(xdr, readdir, svc_max_payload(resp->rqstp));
+ if (nfserr != nfs_ok)
+ xdr_truncate_encode(xdr, starting_len);
return nfserr;
}
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v1 0/5] Clean up XDR encoders for NFSv4 READDIR
2023-10-04 13:41 [PATCH v1 0/5] Clean up XDR encoders for NFSv4 READDIR Chuck Lever
` (4 preceding siblings ...)
2023-10-04 13:42 ` [PATCH v1 5/5] NFSD: Clean up nfsd4_encode_readdir() Chuck Lever
@ 2023-10-09 17:36 ` Jeff Layton
5 siblings, 0 replies; 7+ messages in thread
From: Jeff Layton @ 2023-10-09 17:36 UTC (permalink / raw)
To: Chuck Lever, linux-nfs; +Cc: Chuck Lever
On Wed, 2023-10-04 at 09:41 -0400, Chuck Lever wrote:
> Tidy up the server-side XDR encoders for READDIR results and
> directory entries. Series applies to nfsd-next. See topic branch
> "nfsd4-encoder-overhaul" in this repo:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/cel/linux.git
>
> ---
>
> Chuck Lever (5):
> NFSD: Rename nfsd4_encode_dirent()
> NFSD: Clean up nfsd4_encode_rdattr_error()
> NFSD: Add an nfsd4_encode_nfs_cookie4() helper
> NFSD: Clean up nfsd4_encode_entry4()
> NFSD: Clean up nfsd4_encode_readdir()
>
>
> fs/nfsd/nfs4xdr.c | 200 +++++++++++++++++++++++-----------------------
> fs/nfsd/xdr4.h | 3 +
> 2 files changed, 104 insertions(+), 99 deletions(-)
>
> --
> Chuck Lever
>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-10-09 17:37 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-04 13:41 [PATCH v1 0/5] Clean up XDR encoders for NFSv4 READDIR Chuck Lever
2023-10-04 13:41 ` [PATCH v1 1/5] NFSD: Rename nfsd4_encode_dirent() Chuck Lever
2023-10-04 13:41 ` [PATCH v1 2/5] NFSD: Clean up nfsd4_encode_rdattr_error() Chuck Lever
2023-10-04 13:41 ` [PATCH v1 3/5] NFSD: Add an nfsd4_encode_nfs_cookie4() helper Chuck Lever
2023-10-04 13:42 ` [PATCH v1 4/5] NFSD: Clean up nfsd4_encode_entry4() Chuck Lever
2023-10-04 13:42 ` [PATCH v1 5/5] NFSD: Clean up nfsd4_encode_readdir() Chuck Lever
2023-10-09 17:36 ` [PATCH v1 0/5] Clean up XDR encoders for NFSv4 READDIR Jeff Layton
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox