On Sun, 2025-07-13 at 00:30 +0100, linux@xxxxxxxxxxx wrote: > From: "Dr. David Alan Gilbert" <linux@xxxxxxxxxxx> > > Remove a bunch of unused xdr_*decode* functions: > The last use of xdr_decode_netobj() was removed in 2021 by: > commit 7cf96b6d0104 ("lockd: Update the NLMv4 SHARE arguments decoder > to > use struct xdr_stream") > The last use of xdr_decode_string_inplace() was removed in 2021 by: > commit 3049e974a7c7 ("lockd: Update the NLMv4 FREE_ALL arguments > decoder > to use struct xdr_stream") > The last use of xdr_stream_decode_opaque() was removed in 2024 by: > commit fed8a17c61ff ("xdrgen: typedefs should use the built-in string > and > opaque functions") > > The functions xdr_stream_decode_string() and > xdr_stream_decode_opaque_dup() were both added in 2018 by the > commit 0e779aa70308 ("SUNRPC: Add helpers for decoding opaque and > string > types") > but never used. > > Remove them. > > Signed-off-by: Dr. David Alan Gilbert <linux@xxxxxxxxxxx> > --- > include/linux/sunrpc/xdr.h | 9 --- > net/sunrpc/xdr.c | 110 ----------------------------------- > -- > 2 files changed, 119 deletions(-) > > diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h > index a2ab813a9800..e370886632b0 100644 > --- a/include/linux/sunrpc/xdr.h > +++ b/include/linux/sunrpc/xdr.h > @@ -128,10 +128,7 @@ xdr_buf_init(struct xdr_buf *buf, void *start, > size_t len) > __be32 *xdr_encode_opaque_fixed(__be32 *p, const void *ptr, unsigned > int len); > __be32 *xdr_encode_opaque(__be32 *p, const void *ptr, unsigned int > len); > __be32 *xdr_encode_string(__be32 *p, const char *s); > -__be32 *xdr_decode_string_inplace(__be32 *p, char **sp, unsigned int > *lenp, > - unsigned int maxlen); > __be32 *xdr_encode_netobj(__be32 *p, const struct xdr_netobj *); > -__be32 *xdr_decode_netobj(__be32 *p, struct xdr_netobj *); > > void xdr_inline_pages(struct xdr_buf *, unsigned int, > struct page **, unsigned int, unsigned > int); > @@ -341,12 +338,6 @@ xdr_stream_remaining(const struct xdr_stream > *xdr) > return xdr->nwords << 2; > } > > -ssize_t xdr_stream_decode_opaque(struct xdr_stream *xdr, void *ptr, > - size_t size); > -ssize_t xdr_stream_decode_opaque_dup(struct xdr_stream *xdr, void > **ptr, > - size_t maxlen, gfp_t gfp_flags); > -ssize_t xdr_stream_decode_string(struct xdr_stream *xdr, char *str, > - size_t size); > ssize_t xdr_stream_decode_string_dup(struct xdr_stream *xdr, char > **str, > size_t maxlen, gfp_t gfp_flags); > ssize_t xdr_stream_decode_opaque_auth(struct xdr_stream *xdr, u32 > *flavor, > diff --git a/net/sunrpc/xdr.c b/net/sunrpc/xdr.c > index 2ea00e354ba6..a0aae1144212 100644 > --- a/net/sunrpc/xdr.c > +++ b/net/sunrpc/xdr.c > @@ -37,19 +37,6 @@ xdr_encode_netobj(__be32 *p, const struct > xdr_netobj *obj) > } > EXPORT_SYMBOL_GPL(xdr_encode_netobj); > > -__be32 * > -xdr_decode_netobj(__be32 *p, struct xdr_netobj *obj) > -{ > - unsigned int len; > - > - if ((len = be32_to_cpu(*p++)) > XDR_MAX_NETOBJ) > - return NULL; > - obj->len = len; > - obj->data = (u8 *) p; > - return p + XDR_QUADLEN(len); > -} > -EXPORT_SYMBOL_GPL(xdr_decode_netobj); > - > /** > * xdr_encode_opaque_fixed - Encode fixed length opaque data > * @p: pointer to current position in XDR buffer. > @@ -102,21 +89,6 @@ xdr_encode_string(__be32 *p, const char *string) > } > EXPORT_SYMBOL_GPL(xdr_encode_string); > > -__be32 * > -xdr_decode_string_inplace(__be32 *p, char **sp, > - unsigned int *lenp, unsigned int maxlen) > -{ > - u32 len; > - > - len = be32_to_cpu(*p++); > - if (len > maxlen) > - return NULL; > - *lenp = len; > - *sp = (char *) p; > - return p + XDR_QUADLEN(len); > -} > -EXPORT_SYMBOL_GPL(xdr_decode_string_inplace); > - > /** > * xdr_terminate_string - '\0'-terminate a string residing in an > xdr_buf > * @buf: XDR buffer where string resides > @@ -2247,88 +2219,6 @@ int xdr_process_buf(const struct xdr_buf *buf, > unsigned int offset, > } > EXPORT_SYMBOL_GPL(xdr_process_buf); > > -/** > - * xdr_stream_decode_opaque - Decode variable length opaque > - * @xdr: pointer to xdr_stream > - * @ptr: location to store opaque data > - * @size: size of storage buffer @ptr > - * > - * Return values: > - * On success, returns size of object stored in *@ptr > - * %-EBADMSG on XDR buffer overflow > - * %-EMSGSIZE on overflow of storage buffer @ptr > - */ > -ssize_t xdr_stream_decode_opaque(struct xdr_stream *xdr, void *ptr, > size_t size) > -{ > - ssize_t ret; > - void *p; > - > - ret = xdr_stream_decode_opaque_inline(xdr, &p, size); > - if (ret <= 0) > - return ret; > - memcpy(ptr, p, ret); > - return ret; > -} > -EXPORT_SYMBOL_GPL(xdr_stream_decode_opaque); > - > -/** > - * xdr_stream_decode_opaque_dup - Decode and duplicate variable > length opaque > - * @xdr: pointer to xdr_stream > - * @ptr: location to store pointer to opaque data > - * @maxlen: maximum acceptable object size > - * @gfp_flags: GFP mask to use > - * > - * Return values: > - * On success, returns size of object stored in *@ptr > - * %-EBADMSG on XDR buffer overflow > - * %-EMSGSIZE if the size of the object would exceed @maxlen > - * %-ENOMEM on memory allocation failure > - */ > -ssize_t xdr_stream_decode_opaque_dup(struct xdr_stream *xdr, void > **ptr, > - size_t maxlen, gfp_t gfp_flags) > -{ > - ssize_t ret; > - void *p; > - > - ret = xdr_stream_decode_opaque_inline(xdr, &p, maxlen); > - if (ret > 0) { > - *ptr = kmemdup(p, ret, gfp_flags); > - if (*ptr != NULL) > - return ret; > - ret = -ENOMEM; > - } > - *ptr = NULL; > - return ret; > -} > -EXPORT_SYMBOL_GPL(xdr_stream_decode_opaque_dup); > - > -/** > - * xdr_stream_decode_string - Decode variable length string > - * @xdr: pointer to xdr_stream > - * @str: location to store string > - * @size: size of storage buffer @str > - * > - * Return values: > - * On success, returns length of NUL-terminated string stored in > *@str > - * %-EBADMSG on XDR buffer overflow > - * %-EMSGSIZE on overflow of storage buffer @str > - */ > -ssize_t xdr_stream_decode_string(struct xdr_stream *xdr, char *str, > size_t size) > -{ > - ssize_t ret; > - void *p; > - > - ret = xdr_stream_decode_opaque_inline(xdr, &p, size); > - if (ret > 0) { > - memcpy(str, p, ret); > - str[ret] = '\0'; > - return strlen(str); > - } > - *str = '\0'; > - return ret; > -} > -EXPORT_SYMBOL_GPL(xdr_stream_decode_string); > - > /** > * xdr_stream_decode_string_dup - Decode and duplicate variable > length string > * @xdr: pointer to xdr_stream I can pick these up. -- Trond Myklebust Linux NFS client maintainer, Hammerspace trondmy@xxxxxxxxxx, trond.myklebust@xxxxxxxxxxxxxxx