On 8/22/25 9:19 AM, Jeff Layton wrote: > KERN_CONT hails from a simpler time, when SMP wasn't the norm. These > days, it doesn't quite work right since another printk() can always race > in between the first one and the one being "continued". > > Nothing calls dprintk_rcu_cont(), so just remove it. The only caller of > dprintk_cont() is in nfs_commit_release_pages(). Just use a normal > dprintk() there instead, since this is not SMP-safe anyway. > > Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx> > --- > fs/nfs/write.c | 6 +++--- > include/linux/sunrpc/debug.h | 24 ++---------------------- > 2 files changed, 5 insertions(+), 25 deletions(-) > > diff --git a/fs/nfs/write.c b/fs/nfs/write.c > index d881486d235ba042feedd2dd59d6a60b366b9600..4d5699b4a1fabff39e67998af40561620b532db6 100644 > --- a/fs/nfs/write.c > +++ b/fs/nfs/write.c > @@ -1862,7 +1862,7 @@ static void nfs_commit_release_pages(struct nfs_commit_data *data) > nfs_mapping_set_error(folio, status); > nfs_inode_remove_request(req); > } > - dprintk_cont(", error = %d\n", status); > + dprintk(", error = %d\n", status); > goto next; > } > > @@ -1872,11 +1872,11 @@ static void nfs_commit_release_pages(struct nfs_commit_data *data) > /* We have a match */ > if (folio) > nfs_inode_remove_request(req); > - dprintk_cont(" OK\n"); > + dprintk(" OK\n"); > goto next; > } > /* We have a mismatch. Write the page again */ > - dprintk_cont(" mismatch\n"); > + dprintk(" mismatch\n"); > nfs_mark_request_dirty(req); > atomic_long_inc(&NFS_I(data->inode)->redirtied_pages); > next: > diff --git a/include/linux/sunrpc/debug.h b/include/linux/sunrpc/debug.h > index f6aeed07fe04e3d51d7f9d23b10fe86d36241b45..99a6fa4a1d6af0b275546a53957f07c9a509f2ac 100644 > --- a/include/linux/sunrpc/debug.h > +++ b/include/linux/sunrpc/debug.h > @@ -23,12 +23,8 @@ extern unsigned int nlm_debug; > > #define dprintk(fmt, ...) \ > dfprintk(FACILITY, fmt, ##__VA_ARGS__) > -#define dprintk_cont(fmt, ...) \ > - dfprintk_cont(FACILITY, fmt, ##__VA_ARGS__) > #define dprintk_rcu(fmt, ...) \ > dfprintk_rcu(FACILITY, fmt, ##__VA_ARGS__) > -#define dprintk_rcu_cont(fmt, ...) \ > - dfprintk_rcu_cont(FACILITY, fmt, ##__VA_ARGS__) > > #undef ifdebug > #if IS_ENABLED(CONFIG_SUNRPC_DEBUG) > @@ -37,29 +33,14 @@ extern unsigned int nlm_debug; > # define dfprintk(fac, fmt, ...) \ > do { \ > ifdebug(fac) \ > - printk(KERN_DEFAULT fmt, ##__VA_ARGS__); \ > -} while (0) > - > -# define dfprintk_cont(fac, fmt, ...) \ > -do { \ > - ifdebug(fac) \ > - printk(KERN_CONT fmt, ##__VA_ARGS__); \ > + printk(KERN_DEFAULT fmt, ##__VA_ARGS__); \ > } while (0) > > # define dfprintk_rcu(fac, fmt, ...) \ > do { \ > ifdebug(fac) { \ > rcu_read_lock(); \ > - printk(KERN_DEFAULT fmt, ##__VA_ARGS__); \ > - rcu_read_unlock(); \ > - } \ > -} while (0) > - > -# define dfprintk_rcu_cont(fac, fmt, ...) \ > -do { \ > - ifdebug(fac) { \ > - rcu_read_lock(); \ > - printk(KERN_CONT fmt, ##__VA_ARGS__); \ > + printk(KERN_DEFAULT fmt, ##__VA_ARGS__); \ > rcu_read_unlock(); \ > } \ > } while (0) > @@ -68,7 +49,6 @@ do { \ > #else > # define ifdebug(fac) if (0) > # define dfprintk(fac, fmt, ...) do {} while (0) > -# define dfprintk_cont(fac, fmt, ...) do {} while (0) > # define dfprintk_rcu(fac, fmt, ...) do {} while (0) > # define RPC_IFDEBUG(x) > #endif > Reviewed-by: Chuck Lever <chuck.lever@xxxxxxxxxx> -- Chuck Lever