* [PATCH v4 0/2] Fix warnings for RISC-V builds
@ 2026-02-27 15:26 Sean Chang
2026-02-27 15:26 ` [PATCH v4 1/2] sunrpc: fix unused variable warnings by using no_printk Sean Chang
2026-02-27 15:26 ` [PATCH v4 2/2] net: macb: use ethtool_sprintf to fill ethtool stats strings Sean Chang
0 siblings, 2 replies; 12+ messages in thread
From: Sean Chang @ 2026-02-27 15:26 UTC (permalink / raw)
To: Andrew Lunn, nicolas.ferre, claudiu.beznea, trond.myklebust, anna
Cc: netdev, linux-nfs, linux-kernel, Sean Chang
This series addresses several compiler warnings found when building the
kernel for RISC-V.
The first patch fixes unused variable warnings in the NFS client (including
nfs4proc and flexfilelayout) that occur in certain build configurations.
The second patch fixes a format-truncation warning in the MACB ethernet
driver by ensuring the snprintf output fits within the destination buffer.
v4:
- Refactor patch 1 to use no_printk() in sunrpc headers instead of marking
variables as __maybe_unused. This provides a cleaner, global fix and
enables compiler type checking.
v3:
- Expand commit descriptions to include technical details regarding macro
expansion, as requested by Andrew Lunn.
- Test the different platform, such as ARM, ARM64, X86_64.
v2:
- Split the original treewide patch into subsystem-specific commits.
- Added more detailed commit descriptions to satisfy checkpatch.
Sean Chang (2):
sunrpc: fix unused variable warnings by using no_printk
net: macb: use ethtool_sprintf to fill ethtool stats strings
drivers/net/ethernet/cadence/macb_main.c | 7 ++-----
include/linux/sunrpc/debug.h | 4 ++--
2 files changed, 4 insertions(+), 7 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v4 1/2] sunrpc: fix unused variable warnings by using no_printk
2026-02-27 15:26 [PATCH v4 0/2] Fix warnings for RISC-V builds Sean Chang
@ 2026-02-27 15:26 ` Sean Chang
2026-02-27 15:58 ` Chuck Lever
` (2 more replies)
2026-02-27 15:26 ` [PATCH v4 2/2] net: macb: use ethtool_sprintf to fill ethtool stats strings Sean Chang
1 sibling, 3 replies; 12+ messages in thread
From: Sean Chang @ 2026-02-27 15:26 UTC (permalink / raw)
To: Andrew Lunn, nicolas.ferre, claudiu.beznea, trond.myklebust, anna
Cc: netdev, linux-nfs, linux-kernel, Sean Chang
When CONFIG_SUNRPC_DEBUG is disabled, the dfprintk() macros currently
expand to empty do-while loops. This causes variables used solely
within these calls to appear unused, triggering -Wunused-variable
warnings.
Instead of marking every affected variable with __maybe_unused,
update the dfprintk and dfprintk_rcu stubs to use no_printk().
This allows the compiler to see the variables and perform type
checking without emitting any code, thus silencing the warnings
globally for these macros.
Suggested-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Sean Chang <seanwascoding@gmail.com>
---
include/linux/sunrpc/debug.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/linux/sunrpc/debug.h b/include/linux/sunrpc/debug.h
index eb4bd62df319..55c54df8bc7d 100644
--- a/include/linux/sunrpc/debug.h
+++ b/include/linux/sunrpc/debug.h
@@ -52,8 +52,8 @@ do { \
# define RPC_IFDEBUG(x) x
#else
# define ifdebug(fac) if (0)
-# define dfprintk(fac, fmt, ...) do {} while (0)
-# define dfprintk_rcu(fac, fmt, ...) do {} while (0)
+# define dfprintk(fac, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
+# define dfprintk_rcu(fac, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
# define RPC_IFDEBUG(x)
#endif
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v4 2/2] net: macb: use ethtool_sprintf to fill ethtool stats strings
2026-02-27 15:26 [PATCH v4 0/2] Fix warnings for RISC-V builds Sean Chang
2026-02-27 15:26 ` [PATCH v4 1/2] sunrpc: fix unused variable warnings by using no_printk Sean Chang
@ 2026-02-27 15:26 ` Sean Chang
1 sibling, 0 replies; 12+ messages in thread
From: Sean Chang @ 2026-02-27 15:26 UTC (permalink / raw)
To: Andrew Lunn, nicolas.ferre, claudiu.beznea, trond.myklebust, anna
Cc: netdev, linux-nfs, linux-kernel, Sean Chang
The RISC-V toolchain triggers a stringop-truncation warning when using
snprintf() with a fixed ETH_GSTRING_LEN (32 bytes) buffer.
Convert the driver to use the modern ethtool_sprintf() API from
linux/ethtool.h. This removes the need for manual snprintf() and
memcpy() calls, handles the 32-byte padding automatically, and
simplifies the logic by removing manual pointer arithmetic.
Suggested-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Sean Chang <seanwascoding@gmail.com>
---
drivers/net/ethernet/cadence/macb_main.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
index 5bc35f651ebd..79ca19097b2d 100644
--- a/drivers/net/ethernet/cadence/macb_main.c
+++ b/drivers/net/ethernet/cadence/macb_main.c
@@ -3145,7 +3145,6 @@ static int gem_get_sset_count(struct net_device *dev, int sset)
static void gem_get_ethtool_strings(struct net_device *dev, u32 sset, u8 *p)
{
- char stat_string[ETH_GSTRING_LEN];
struct macb *bp = netdev_priv(dev);
struct macb_queue *queue;
unsigned int i;
@@ -3158,10 +3157,8 @@ static void gem_get_ethtool_strings(struct net_device *dev, u32 sset, u8 *p)
ETH_GSTRING_LEN);
for (q = 0, queue = bp->queues; q < bp->num_queues; ++q, ++queue) {
- for (i = 0; i < QUEUE_STATS_LEN; i++, p += ETH_GSTRING_LEN) {
- snprintf(stat_string, ETH_GSTRING_LEN, "q%d_%s",
- q, queue_statistics[i].stat_string);
- memcpy(p, stat_string, ETH_GSTRING_LEN);
+ for (i = 0; i < QUEUE_STATS_LEN; i++) {
+ ethtool_sprintf(&p, "q%u_%s", q, queue_statistics[i].stat_string);
}
}
break;
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v4 1/2] sunrpc: fix unused variable warnings by using no_printk
2026-02-27 15:26 ` [PATCH v4 1/2] sunrpc: fix unused variable warnings by using no_printk Sean Chang
@ 2026-02-27 15:58 ` Chuck Lever
2026-02-27 16:00 ` Andrew Lunn
2026-02-27 17:38 ` David Laight
2 siblings, 0 replies; 12+ messages in thread
From: Chuck Lever @ 2026-02-27 15:58 UTC (permalink / raw)
To: Sean Chang, Andrew Lunn, nicolas.ferre, claudiu.beznea,
Trond Myklebust, Anna Schumaker
Cc: netdev, linux-nfs, linux-kernel
On Fri, Feb 27, 2026, at 10:26 AM, Sean Chang wrote:
> When CONFIG_SUNRPC_DEBUG is disabled, the dfprintk() macros currently
> expand to empty do-while loops. This causes variables used solely
> within these calls to appear unused, triggering -Wunused-variable
> warnings.
>
> Instead of marking every affected variable with __maybe_unused,
> update the dfprintk and dfprintk_rcu stubs to use no_printk().
> This allows the compiler to see the variables and perform type
> checking without emitting any code, thus silencing the warnings
> globally for these macros.
>
> Suggested-by: Andrew Lunn <andrew@lunn.ch>
> Signed-off-by: Sean Chang <seanwascoding@gmail.com>
> ---
> include/linux/sunrpc/debug.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/include/linux/sunrpc/debug.h b/include/linux/sunrpc/debug.h
> index eb4bd62df319..55c54df8bc7d 100644
> --- a/include/linux/sunrpc/debug.h
> +++ b/include/linux/sunrpc/debug.h
> @@ -52,8 +52,8 @@ do { \
> # define RPC_IFDEBUG(x) x
> #else
> # define ifdebug(fac) if (0)
> -# define dfprintk(fac, fmt, ...) do {} while (0)
> -# define dfprintk_rcu(fac, fmt, ...) do {} while (0)
> +# define dfprintk(fac, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
> +# define dfprintk_rcu(fac, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
> # define RPC_IFDEBUG(x)
> #endif
>
> --
> 2.34.1
Seems obviously good to me.
Reviewed-by: Chuck Lever <chuck.lever@oracle.com>
--
Chuck Lever
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 1/2] sunrpc: fix unused variable warnings by using no_printk
2026-02-27 15:26 ` [PATCH v4 1/2] sunrpc: fix unused variable warnings by using no_printk Sean Chang
2026-02-27 15:58 ` Chuck Lever
@ 2026-02-27 16:00 ` Andrew Lunn
2026-02-27 17:38 ` David Laight
2 siblings, 0 replies; 12+ messages in thread
From: Andrew Lunn @ 2026-02-27 16:00 UTC (permalink / raw)
To: Sean Chang
Cc: nicolas.ferre, claudiu.beznea, trond.myklebust, anna, netdev,
linux-nfs, linux-kernel
On Fri, Feb 27, 2026 at 11:26:23PM +0800, Sean Chang wrote:
> When CONFIG_SUNRPC_DEBUG is disabled, the dfprintk() macros currently
> expand to empty do-while loops. This causes variables used solely
> within these calls to appear unused, triggering -Wunused-variable
> warnings.
>
> Instead of marking every affected variable with __maybe_unused,
> update the dfprintk and dfprintk_rcu stubs to use no_printk().
> This allows the compiler to see the variables and perform type
> checking without emitting any code, thus silencing the warnings
> globally for these macros.
>
> Suggested-by: Andrew Lunn <andrew@lunn.ch>
> Signed-off-by: Sean Chang <seanwascoding@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 1/2] sunrpc: fix unused variable warnings by using no_printk
2026-02-27 15:26 ` [PATCH v4 1/2] sunrpc: fix unused variable warnings by using no_printk Sean Chang
2026-02-27 15:58 ` Chuck Lever
2026-02-27 16:00 ` Andrew Lunn
@ 2026-02-27 17:38 ` David Laight
2026-02-27 17:57 ` Andrew Lunn
2 siblings, 1 reply; 12+ messages in thread
From: David Laight @ 2026-02-27 17:38 UTC (permalink / raw)
To: Sean Chang
Cc: Andrew Lunn, nicolas.ferre, claudiu.beznea, trond.myklebust, anna,
netdev, linux-nfs, linux-kernel
On Fri, 27 Feb 2026 23:26:23 +0800
Sean Chang <seanwascoding@gmail.com> wrote:
> When CONFIG_SUNRPC_DEBUG is disabled, the dfprintk() macros currently
> expand to empty do-while loops. This causes variables used solely
> within these calls to appear unused, triggering -Wunused-variable
> warnings.
>
> Instead of marking every affected variable with __maybe_unused,
> update the dfprintk and dfprintk_rcu stubs to use no_printk().
> This allows the compiler to see the variables and perform type
> checking without emitting any code, thus silencing the warnings
> globally for these macros.
>
> Suggested-by: Andrew Lunn <andrew@lunn.ch>
> Signed-off-by: Sean Chang <seanwascoding@gmail.com>
> ---
> include/linux/sunrpc/debug.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/include/linux/sunrpc/debug.h b/include/linux/sunrpc/debug.h
> index eb4bd62df319..55c54df8bc7d 100644
> --- a/include/linux/sunrpc/debug.h
> +++ b/include/linux/sunrpc/debug.h
> @@ -52,8 +52,8 @@ do { \
> # define RPC_IFDEBUG(x) x
> #else
> # define ifdebug(fac) if (0)
> -# define dfprintk(fac, fmt, ...) do {} while (0)
> -# define dfprintk_rcu(fac, fmt, ...) do {} while (0)
> +# define dfprintk(fac, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
> +# define dfprintk_rcu(fac, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
You can omit fmt, then you don't need the ##
#define dfprintk(fac, ...) no_printk(__VA_ARGS__)
David
> # define RPC_IFDEBUG(x)
> #endif
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 1/2] sunrpc: fix unused variable warnings by using no_printk
2026-02-27 17:38 ` David Laight
@ 2026-02-27 17:57 ` Andrew Lunn
2026-02-27 18:15 ` David Laight
0 siblings, 1 reply; 12+ messages in thread
From: Andrew Lunn @ 2026-02-27 17:57 UTC (permalink / raw)
To: David Laight
Cc: Sean Chang, nicolas.ferre, claudiu.beznea, trond.myklebust, anna,
netdev, linux-nfs, linux-kernel
> > # define ifdebug(fac) if (0)
> > -# define dfprintk(fac, fmt, ...) do {} while (0)
> > -# define dfprintk_rcu(fac, fmt, ...) do {} while (0)
> > +# define dfprintk(fac, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
> > +# define dfprintk_rcu(fac, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
>
> You can omit fmt, then you don't need the ##
> #define dfprintk(fac, ...) no_printk(__VA_ARGS__)
/*
* Dummy printk for disabled debugging statements to use whilst maintaining
* gcc's format checking.
*/
#define no_printk(fmt, ...) \
({ \
if (0) \
_printk(fmt, ##__VA_ARGS__); \
0; \
})
Without fmt, gcc cannot do format checking. Or worse, it takes the
first member of __VA_ARGS__ as the format, and gives spurious errors?
Andrew
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 1/2] sunrpc: fix unused variable warnings by using no_printk
2026-02-27 17:57 ` Andrew Lunn
@ 2026-02-27 18:15 ` David Laight
2026-02-28 14:56 ` Sean Chang
0 siblings, 1 reply; 12+ messages in thread
From: David Laight @ 2026-02-27 18:15 UTC (permalink / raw)
To: Andrew Lunn
Cc: Sean Chang, nicolas.ferre, claudiu.beznea, trond.myklebust, anna,
netdev, linux-nfs, linux-kernel
On Fri, 27 Feb 2026 18:57:33 +0100
Andrew Lunn <andrew@lunn.ch> wrote:
> > > # define ifdebug(fac) if (0)
> > > -# define dfprintk(fac, fmt, ...) do {} while (0)
> > > -# define dfprintk_rcu(fac, fmt, ...) do {} while (0)
> > > +# define dfprintk(fac, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
> > > +# define dfprintk_rcu(fac, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
> >
> > You can omit fmt, then you don't need the ##
> > #define dfprintk(fac, ...) no_printk(__VA_ARGS__)
>
> /*
> * Dummy printk for disabled debugging statements to use whilst maintaining
> * gcc's format checking.
> */
> #define no_printk(fmt, ...) \
> ({ \
> if (0) \
> _printk(fmt, ##__VA_ARGS__); \
> 0; \
> })
>
> Without fmt, gcc cannot do format checking. Or worse, it takes the
> first member of __VA_ARGS__ as the format, and gives spurious errors?
By the time the compiler looks at it the pre-processor has expanded
__VA_ARGS__.
So it doesn't matter that the format string is in the __VA_ARGS__
list rather than preceding it.
David
>
> Andrew
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 1/2] sunrpc: fix unused variable warnings by using no_printk
2026-02-27 18:15 ` David Laight
@ 2026-02-28 14:56 ` Sean Chang
2026-02-28 17:23 ` Sean Chang
0 siblings, 1 reply; 12+ messages in thread
From: Sean Chang @ 2026-02-28 14:56 UTC (permalink / raw)
To: David Laight
Cc: Andrew Lunn, nicolas.ferre, claudiu.beznea, trond.myklebust, anna,
netdev, linux-nfs, linux-kernel
On Sat, Feb 28, 2026 at 2:15 AM David Laight
<david.laight.linux@gmail.com> wrote:
>
> On Fri, 27 Feb 2026 18:57:33 +0100
> Andrew Lunn <andrew@lunn.ch> wrote:
>
> > > > # define ifdebug(fac) if (0)
> > > > -# define dfprintk(fac, fmt, ...) do {} while (0)
> > > > -# define dfprintk_rcu(fac, fmt, ...) do {} while (0)
> > > > +# define dfprintk(fac, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
> > > > +# define dfprintk_rcu(fac, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
> > >
> > > You can omit fmt, then you don't need the ##
> > > #define dfprintk(fac, ...) no_printk(__VA_ARGS__)
> >
> > /*
> > * Dummy printk for disabled debugging statements to use whilst maintaining
> > * gcc's format checking.
> > */
> > #define no_printk(fmt, ...) \
> > ({ \
> > if (0) \
> > _printk(fmt, ##__VA_ARGS__); \
> > 0; \
> > })
> >
> > Without fmt, gcc cannot do format checking. Or worse, it takes the
> > first member of __VA_ARGS__ as the format, and gives spurious errors?
>
> By the time the compiler looks at it the pre-processor has expanded
> __VA_ARGS__.
> So it doesn't matter that the format string is in the __VA_ARGS__
> list rather than preceding it.
>
Hi David,
Thanks for the explanation. I agree that since __VA_ARGS__ will
always contain the format string in this context, the ## and explicit
fmt are indeed redundant. Since no_printk itself already handles
the ##__VA_ARGS__ logic internally, there's no need to duplicate
it in the dfprintk definition.
I'll switch to the simpler in v5:
-# define dfprintk(fac, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
-# define dfprintk_rcu(fac, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
+#define dfprintk(fac, ...) no_printk(__VA_ARGS__)
+# define dfprintk_rcu(fac, ...) no_printk(__VA_ARGS__)
Best regards,
Sean
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 1/2] sunrpc: fix unused variable warnings by using no_printk
2026-02-28 14:56 ` Sean Chang
@ 2026-02-28 17:23 ` Sean Chang
2026-02-28 20:04 ` Andrew Lunn
0 siblings, 1 reply; 12+ messages in thread
From: Sean Chang @ 2026-02-28 17:23 UTC (permalink / raw)
To: David Laight
Cc: Andrew Lunn, nicolas.ferre, claudiu.beznea, trond.myklebust, anna,
netdev, linux-nfs, linux-kernel
On Sat, Feb 28, 2026 at 10:56 PM Sean Chang <seanwascoding@gmail.com> wrote:
>
> On Sat, Feb 28, 2026 at 2:15 AM David Laight
> <david.laight.linux@gmail.com> wrote:
> >
> > On Fri, 27 Feb 2026 18:57:33 +0100
> > Andrew Lunn <andrew@lunn.ch> wrote:
> >
> > > > > # define ifdebug(fac) if (0)
> > > > > -# define dfprintk(fac, fmt, ...) do {} while (0)
> > > > > -# define dfprintk_rcu(fac, fmt, ...) do {} while (0)
> > > > > +# define dfprintk(fac, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
> > > > > +# define dfprintk_rcu(fac, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
> > > >
> > > > You can omit fmt, then you don't need the ##
> > > > #define dfprintk(fac, ...) no_printk(__VA_ARGS__)
> > >
> > > /*
> > > * Dummy printk for disabled debugging statements to use whilst maintaining
> > > * gcc's format checking.
> > > */
> > > #define no_printk(fmt, ...) \
> > > ({ \
> > > if (0) \
> > > _printk(fmt, ##__VA_ARGS__); \
> > > 0; \
> > > })
> > >
> > > Without fmt, gcc cannot do format checking. Or worse, it takes the
> > > first member of __VA_ARGS__ as the format, and gives spurious errors?
> >
> > By the time the compiler looks at it the pre-processor has expanded
> > __VA_ARGS__.
> > So it doesn't matter that the format string is in the __VA_ARGS__
> > list rather than preceding it.
> >
>
> Hi David,
> Thanks for the explanation. I agree that since __VA_ARGS__ will
> always contain the format string in this context, the ## and explicit
> fmt are indeed redundant. Since no_printk itself already handles
> the ##__VA_ARGS__ logic internally, there's no need to duplicate
> it in the dfprintk definition.
>
> I'll switch to the simpler in v5:
> -# define dfprintk(fac, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
> -# define dfprintk_rcu(fac, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
> +#define dfprintk(fac, ...) no_printk(__VA_ARGS__)
> +# define dfprintk_rcu(fac, ...) no_printk(__VA_ARGS__)
>
HI all,
I've also identified the cause of the build error in fs/nfsd/nfsfh.c
reported by syzbot [1]. The "use of undeclared identifier 'buf'" occurs
because buf is only declared within the RPC_IFDEBUG macro,
which is removed when CONFIG_SUNRPC_DEBUG is disabled.
To fix this, I will follow the pattern used in net/sunrpc/xprtrdma/
svc_rdma_transport.c by wrapping the dprintk call that references
buf within an #if IS_ENABLED(CONFIG_SUNRPC_DEBUG) block.
static struct svc_xprt *svc_rdma_accept(struct svc_xprt *xprt)
{
....
RPC_IFDEBUG(struct sockaddr *sap);
...
#if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
dprintk("svcrdma: new connection accepted on device %s:\n", dev->name);
sap = (struct sockaddr *)&newxprt->sc_cm_id->route.addr.src_addr;
dprintk(" local address : %pIS:%u\n", sap, rpc_get_port(sap));
sap = (struct sockaddr *)&newxprt->sc_cm_id->route.addr.dst_addr;
dprintk(" remote address : %pIS:%u\n", sap, rpc_get_port(sap));
dprintk(" max_sge : %d\n", newxprt->sc_max_send_sges);
dprintk(" sq_depth : %d\n", newxprt->sc_sq_depth);
dprintk(" rdma_rw_ctxs : %d\n", ctxts);
dprintk(" max_requests : %d\n", newxprt->sc_max_requests);
dprintk(" ord : %d\n", conn_param.initiator_depth);
#endif
...
}
The refactor in fs/nfsd/nfsfh.c will look like this:
static __be32 nfsd_setuser_and_check_port(struct svc_rqst *rqstp,
struct svc_cred *cred,
struct svc_export *exp)
{
/* Check if the request originated from a secure port. */
if (rqstp && !nfsd_originating_port_ok(rqstp, cred, exp)) {
RPC_IFDEBUG(char buf[RPC_MAX_ADDRBUFLEN]);
+#if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
dprintk("nfsd: request from insecure port %s!\n",
svc_print_addr(rqstp, buf, sizeof(buf)));
+#endif
return nfserr_perm;
}
/* Set user creds for this exportpoint */
return nfserrno(nfsd_setuser(cred, exp));
}
This fix, along with the macro simplification suggested by David, will
be included in v5.
[1] https://lore.kernel.org/all/69a2e269.050a0220.3a55be.003e.GAE@google.com/
Best regards,
Sean
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 1/2] sunrpc: fix unused variable warnings by using no_printk
2026-02-28 17:23 ` Sean Chang
@ 2026-02-28 20:04 ` Andrew Lunn
2026-03-01 15:40 ` Sean Chang
0 siblings, 1 reply; 12+ messages in thread
From: Andrew Lunn @ 2026-02-28 20:04 UTC (permalink / raw)
To: Sean Chang
Cc: David Laight, nicolas.ferre, claudiu.beznea, trond.myklebust,
anna, netdev, linux-nfs, linux-kernel
> HI all,
> I've also identified the cause of the build error in fs/nfsd/nfsfh.c
> reported by syzbot [1]. The "use of undeclared identifier 'buf'" occurs
> because buf is only declared within the RPC_IFDEBUG macro,
> which is removed when CONFIG_SUNRPC_DEBUG is disabled.
> To fix this, I will follow the pattern used in net/sunrpc/xprtrdma/
> svc_rdma_transport.c by wrapping the dprintk call that references
> buf within an #if IS_ENABLED(CONFIG_SUNRPC_DEBUG) block.
Please try to avoid adding such #if code. Compile testing does not
work as well if there are millions of #if def combinations. Ideally we
want the stub functions to allow as much as possible to be compiled,
and then let the optimizer throw it out because it is unreachable.
>
> static struct svc_xprt *svc_rdma_accept(struct svc_xprt *xprt)
> {
> ....
> RPC_IFDEBUG(struct sockaddr *sap);
> ...
> #if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
> dprintk("svcrdma: new connection accepted on device %s:\n", dev->name);
> sap = (struct sockaddr *)&newxprt->sc_cm_id->route.addr.src_addr;
> dprintk(" local address : %pIS:%u\n", sap, rpc_get_port(sap));
> sap = (struct sockaddr *)&newxprt->sc_cm_id->route.addr.dst_addr;
> dprintk(" remote address : %pIS:%u\n", sap, rpc_get_port(sap));
> dprintk(" max_sge : %d\n", newxprt->sc_max_send_sges);
> dprintk(" sq_depth : %d\n", newxprt->sc_sq_depth);
> dprintk(" rdma_rw_ctxs : %d\n", ctxts);
> dprintk(" max_requests : %d\n", newxprt->sc_max_requests);
> dprintk(" ord : %d\n", conn_param.initiator_depth);
> #endif
> ...
> }
>
> The refactor in fs/nfsd/nfsfh.c will look like this:
>
> static __be32 nfsd_setuser_and_check_port(struct svc_rqst *rqstp,
> struct svc_cred *cred,
> struct svc_export *exp)
> {
> /* Check if the request originated from a secure port. */
> if (rqstp && !nfsd_originating_port_ok(rqstp, cred, exp)) {
> RPC_IFDEBUG(char buf[RPC_MAX_ADDRBUFLEN]);
> +#if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
> dprintk("nfsd: request from insecure port %s!\n",
> svc_print_addr(rqstp, buf, sizeof(buf)));
> +#endif
In this case, now dprintk() uses it arguments, i think you can drop
the RPC_IFDEBUG() and always have buf. This code then gets
compiled. Ask make to produce fs/nfsd/nfsfh.lst and see if it
generated any code for this, or has it optimized it out.
Andrew
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 1/2] sunrpc: fix unused variable warnings by using no_printk
2026-02-28 20:04 ` Andrew Lunn
@ 2026-03-01 15:40 ` Sean Chang
0 siblings, 0 replies; 12+ messages in thread
From: Sean Chang @ 2026-03-01 15:40 UTC (permalink / raw)
To: Andrew Lunn
Cc: David Laight, nicolas.ferre, claudiu.beznea, trond.myklebust,
anna, netdev, linux-nfs, linux-kernel
On Sun, Mar 1, 2026 at 4:04 AM Andrew Lunn <andrew@lunn.ch> wrote:
>
> Please try to avoid adding such #if code. Compile testing does not
> work as well if there are millions of #if def combinations. Ideally we
> want the stub functions to allow as much as possible to be compiled,
> and then let the optimizer throw it out because it is unreachable.
>
> >
> > static struct svc_xprt *svc_rdma_accept(struct svc_xprt *xprt)
> > {
> > ....
> > RPC_IFDEBUG(struct sockaddr *sap);
> > ...
> > #if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
> > dprintk("svcrdma: new connection accepted on device %s:\n", dev->name);
> > sap = (struct sockaddr *)&newxprt->sc_cm_id->route.addr.src_addr;
> > dprintk(" local address : %pIS:%u\n", sap, rpc_get_port(sap));
> > sap = (struct sockaddr *)&newxprt->sc_cm_id->route.addr.dst_addr;
> > dprintk(" remote address : %pIS:%u\n", sap, rpc_get_port(sap));
> > dprintk(" max_sge : %d\n", newxprt->sc_max_send_sges);
> > dprintk(" sq_depth : %d\n", newxprt->sc_sq_depth);
> > dprintk(" rdma_rw_ctxs : %d\n", ctxts);
> > dprintk(" max_requests : %d\n", newxprt->sc_max_requests);
> > dprintk(" ord : %d\n", conn_param.initiator_depth);
> > #endif
> > ...
> > }
> >
> > The refactor in fs/nfsd/nfsfh.c will look like this:
> >
> > static __be32 nfsd_setuser_and_check_port(struct svc_rqst *rqstp,
> > struct svc_cred *cred,
> > struct svc_export *exp)
> > {
> > /* Check if the request originated from a secure port. */
> > if (rqstp && !nfsd_originating_port_ok(rqstp, cred, exp)) {
> > RPC_IFDEBUG(char buf[RPC_MAX_ADDRBUFLEN]);
> > +#if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
> > dprintk("nfsd: request from insecure port %s!\n",
> > svc_print_addr(rqstp, buf, sizeof(buf)));
> > +#endif
>
> In this case, now dprintk() uses it arguments, i think you can drop
> the RPC_IFDEBUG() and always have buf. This code then gets
> compiled. Ask make to produce fs/nfsd/nfsfh.lst and see if it
> generated any code for this, or has it optimized it out.
>
Hi Andrew,
You are absolutely right. I have verified the generated code with
fs/nfsd/nfsfh.lst and net/sunrpc/xprtrdma/svc_rdma_transport.lst
under -O2 optimization.
Even after dropping the #ifdef and always declaring the char buf[],
the compiler successfully optimizes everything out when
CONFIG_SUNRPC_DEBUG is disabled. Specifically:
- There is no stack allocation (no sub %rsp) for the buffer.
- The logic flows directly as if the dprintk lines were never there.
Given this, I agree it is the perfect time to also remove the
RPC_IFDEBUG(x) macro entirely, as it is only used in these
two files and is now redundant with the new no_printk approach.
I will send out v6 shortly with these cleanups.
Best Regards,
Sean
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2026-03-01 15:41 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-27 15:26 [PATCH v4 0/2] Fix warnings for RISC-V builds Sean Chang
2026-02-27 15:26 ` [PATCH v4 1/2] sunrpc: fix unused variable warnings by using no_printk Sean Chang
2026-02-27 15:58 ` Chuck Lever
2026-02-27 16:00 ` Andrew Lunn
2026-02-27 17:38 ` David Laight
2026-02-27 17:57 ` Andrew Lunn
2026-02-27 18:15 ` David Laight
2026-02-28 14:56 ` Sean Chang
2026-02-28 17:23 ` Sean Chang
2026-02-28 20:04 ` Andrew Lunn
2026-03-01 15:40 ` Sean Chang
2026-02-27 15:26 ` [PATCH v4 2/2] net: macb: use ethtool_sprintf to fill ethtool stats strings Sean Chang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox