Re: linux-next: build failure after merge of the rcu tree

From: Stephen Rothwell
Date: Thu Jan 16 2020 - 22:09:16 EST


Hi all,

On Thu, 12 Dec 2019 13:45:16 +1100 Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> wrote:
>
> After merging the rcu tree, today's linux-next build (x86_64 allmodconfig)
> failed like this:
>
> drivers/misc/watch_queue.c: In function 'watch_queue_set_filter':
> drivers/misc/watch_queue.c:526:2: error: implicit declaration of function 'rcu_swap_protected' [-Werror=implicit-function-declaration]
> 526 | rcu_swap_protected(wqueue->filter, wfilter,
> | ^~~~~~~~~~~~~~~~~~
>
> Caused by commit
>
> af8c9224182e ("rcu: Remove rcu_swap_protected()")
>
> interacting with commit
>
> fe78d401ca6b ("General notification queue with user mmap()'able ring buffer")
>
> from the keys tree.
>
> I have added the following merge fix patch for today:
>
> From: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx>
> Date: Thu, 12 Dec 2019 13:37:52 +1100
> Subject: [PATCH] rcu: fix up for "Remove rcu_swap_protected()"
>
> Signed-off-by: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx>
> ---
> drivers/misc/watch_queue.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/misc/watch_queue.c b/drivers/misc/watch_queue.c
> index b3fc59b4ef6c..a4a77ec977ac 100644
> --- a/drivers/misc/watch_queue.c
> +++ b/drivers/misc/watch_queue.c
> @@ -523,8 +523,8 @@ static long watch_queue_set_filter(struct inode *inode,
> kfree(tf);
> set:
> inode_lock(inode);
> - rcu_swap_protected(wqueue->filter, wfilter,
> - lockdep_is_held(&inode->i_rwsem));
> + wfilter = rcu_replace_pointer(wqueue->filter, wfilter,
> + lockdep_is_held(&inode->i_rwsem));
> inode_unlock(inode);
> if (wfilter)
> kfree_rcu(wfilter, rcu);

This has bee replaced with this patch:

From: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx>
Date: Thu, 12 Dec 2019 13:37:52 +1100
Subject: [PATCH] rcu: fix up for "Remove rcu_swap_protected()"

Signed-off-by: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx>
---
kernel/watch_queue.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/watch_queue.c b/kernel/watch_queue.c
index d48f422f391a..f195cbbbb3d3 100644
--- a/kernel/watch_queue.c
+++ b/kernel/watch_queue.c
@@ -354,8 +354,8 @@ long watch_queue_set_filter(struct pipe_inode_info *pipe,
kfree(tf);
set:
pipe_lock(pipe);
- rcu_swap_protected(wqueue->filter, wfilter,
- lockdep_is_held(&pipe->mutex));
+ wfilter = rcu_replace_pointer(wqueue->filter, wfilter,
+ lockdep_is_held(&pipe->mutex));
pipe_unlock(pipe);
if (wfilter)
kfree_rcu(wfilter, rcu);

--
Cheers,
Stephen Rothwell

Attachment: pgplh_VJDoosT.pgp
Description: OpenPGP digital signature