Re: [PATCH RFC] ext4: fix potential race between online resizing and write operations
From: "Paul E. McKenney" <paulmck@kernel.org>
Date: 2020-02-25 16:42:04
Also in:
lkml
From: "Paul E. McKenney" <paulmck@kernel.org>
Date: 2020-02-25 16:42:04
Also in:
lkml
On Tue, Feb 25, 2020 at 09:17:11AM -0500, Joel Fernandes wrote:
On Mon, Feb 24, 2020 at 10:55 PM Paul E. McKenney [off-list ref] wrote: [...]quoted
quoted
quoted
As for "task_struct's rcu_read_lock_nesting". Will it be enough just have a look at preempt_count of current process? If we have for example nested rcu_read_locks: <snip> rcu_read_lock() rcu_read_lock() rcu_read_lock() <snip> the counter would be 3.No, because preempt_count is not incremented during rcu_read_lock(). RCU reader sections can be preempted, they just cannot goto sleep in a reader section (unless the kernel is RT).You are both right. Vlad is correct for CONFIG_PREEMPT=n and CONFIG_DEBUG_ATOMIC_SLEEP=y and Joel is correct otherwise, give or take the possibility of other late-breaking corner cases. ;-)Oh yes, but even for PREEMPT=n, rcu_read_lock() is just a NOOP for that configuration and doesn't really mess around with preempt_count if I recall :-D. (doesn't need to mess with preempt_count because being in kernel mode is non-preemptible for PREEMPT=n anyway).
For PREEMPT=n, rcu_read_lock() is preempt_disable(), see the code in include/linux/rcupdate.h. ;-) Thanx, Paul