On 3/28/24 3:38 PM, Damien Le Moal wrote:
On 3/29/24 07:20, Bart Van Assche wrote:
+ /* Wait for the zone write plugs to be RCU-freed. */
+ rcu_barrier();
+}
It is not clear to me why the above rcu_barrier() call is necessary? I'm
not aware of any other kernel code where kfree_rcu() is followed by an
rcu_barrier() call.
Right after that, the mempool (in v4, free list here) is destroyed. So the
rcu_barrier() is needed to ensure that the grace period is past and that all
plugs are back in the pool/freelist. Without this, I saw problems/crashes when
removing devices.
This patch would be easier to read if the rcu_barrier() call would be
moved out of disk_free_zone_wplugs() and into its caller.
Thanks,
Bart.