From: Boqun Feng <boqun.feng@gmail.com>
To: Matthew Wilcox <willy@infradead.org>
Cc: Zhouyi Zhou <zhouzhouyi@gmail.com>,
paulmck@kernel.org,
Oleksandr Natalenko <oleksandr@natalenko.name>,
linux-kernel <linux-kernel@vger.kernel.org>,
stable@vger.kernel.org, Chris Clayton <chris2553@googlemail.com>,
Chris Rankin <rankincj@gmail.com>,
Josh Triplett <josh@joshtriplett.org>,
Steven Rostedt <rostedt@goodmis.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Lai Jiangshan <jiangshanlai@gmail.com>,
Joel Fernandes <joel@joelfernandes.org>,
rcu <rcu@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Linux-MM <linux-mm@kvack.org>, Miaohe Lin <linmiaohe@huawei.com>,
"Huang, Ying" <ying.huang@intel.com>
Subject: Re: linux-5.13.2: warning from kernel/rcu/tree_plugin.h:359
Date: Mon, 19 Jul 2021 18:14:21 +0800 [thread overview]
Message-ID: <YPVQfaamqwu1PRrK@boqun-archlinux> (raw)
In-Reply-To: <YPTmtNMJpykEpzx6@casper.infradead.org>
On Mon, Jul 19, 2021 at 03:43:00AM +0100, Matthew Wilcox wrote:
> On Mon, Jul 19, 2021 at 10:24:18AM +0800, Zhouyi Zhou wrote:
> > Meanwhile, I examined the 5.12.17 by naked eye, and found a suspicious place
> > that could possibly trigger that problem:
> >
> > struct swap_info_struct *get_swap_device(swp_entry_t entry)
> > {
> > struct swap_info_struct *si;
> > unsigned long offset;
> >
> > if (!entry.val)
> > goto out;
> > si = swp_swap_info(entry);
> > if (!si)
> > goto bad_nofile;
> >
> > rcu_read_lock();
> > if (data_race(!(si->flags & SWP_VALID)))
> > goto unlock_out;
> > offset = swp_offset(entry);
> > if (offset >= si->max)
> > goto unlock_out;
> >
> > return si;
> > bad_nofile:
> > pr_err("%s: %s%08lx\n", __func__, Bad_file, entry.val);
> > out:
> > return NULL;
> > unlock_out:
> > rcu_read_unlock();
> > return NULL;
> > }
> > I guess the function "return si" without a rcu_read_unlock.
>
> Yes, but the caller is supposed to call put_swap_device() which
> calls rcu_read_unlock(). See commit eb085574a752.
Right, but we need to make sure there is no sleepable function called
before put_swap_device() called, and the call trace showed the following
happened:
do_swap_page():
si = get_swap_device():
rcu_read_lock();
lock_page_or_retry():
might_sleep(); // call a sleepable function inside RCU read-side c.s.
__lock_page_or_retry():
wait_on_page_bit_common():
schedule():
rcu_note_context_switch();
// Warn here
put_swap_device();
rcu_read_unlock();
, which introduced by commit 2799e77529c2a
[Copy the author]
Regards,
Boqun
next prev parent reply other threads:[~2021-07-19 10:16 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <c9fd1311-662c-f993-c8ef-54af036f2f78@googlemail.com>
2021-07-18 21:01 ` linux-5.13.2: warning from kernel/rcu/tree_plugin.h:359 Oleksandr Natalenko
2021-07-18 21:03 ` Oleksandr Natalenko
2021-07-18 21:22 ` Matthew Wilcox
2021-07-18 21:36 ` Chris Clayton
2021-07-18 21:59 ` Paul E. McKenney
2021-07-18 22:51 ` Matthew Wilcox
2021-07-19 1:53 ` Paul E. McKenney
2021-07-19 2:24 ` Zhouyi Zhou
2021-07-19 2:27 ` Zhouyi Zhou
2021-07-19 2:43 ` Matthew Wilcox
2021-07-19 2:59 ` Zhouyi Zhou
2021-07-19 10:14 ` Boqun Feng [this message]
2021-07-19 11:12 ` Miaohe Lin
2021-07-19 11:17 ` Oleksandr Natalenko
2021-07-19 11:22 ` Matthew Wilcox
2021-07-19 11:50 ` Miaohe Lin
2021-07-19 11:59 ` Oleksandr Natalenko
2021-07-19 12:08 ` Miaohe Lin
2021-07-19 12:12 ` Oleksandr Natalenko
2021-07-19 12:16 ` Matthew Wilcox
2021-07-19 12:23 ` Oleksandr Natalenko
2021-07-19 16:47 ` Zhouyi Zhou
2021-07-19 16:56 ` Zhouyi Zhou
2021-07-22 7:30 ` Chris Clayton
2021-07-22 8:57 ` Zhouyi Zhou
2021-07-22 12:36 ` Matthew Wilcox
2021-07-22 13:26 ` Greg KH
2021-07-22 14:00 ` Greg KH
2021-07-23 1:51 ` Miaohe Lin
2021-07-23 7:02 ` Greg KH
2021-07-23 7:13 ` Miaohe Lin
2021-07-22 17:44 ` Zhouyi Zhou
2021-07-22 14:05 ` Paul E. McKenney
2021-07-19 12:17 ` Miaohe Lin
2021-07-19 7:32 ` Chris Clayton
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YPVQfaamqwu1PRrK@boqun-archlinux \
--to=boqun.feng@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=chris2553@googlemail.com \
--cc=jiangshanlai@gmail.com \
--cc=joel@joelfernandes.org \
--cc=josh@joshtriplett.org \
--cc=linmiaohe@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=oleksandr@natalenko.name \
--cc=paulmck@kernel.org \
--cc=rankincj@gmail.com \
--cc=rcu@vger.kernel.org \
--cc=rostedt@goodmis.org \
--cc=stable@vger.kernel.org \
--cc=willy@infradead.org \
--cc=ying.huang@intel.com \
--cc=zhouzhouyi@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.