]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: rcu_pending: don't invoke __call_rcu() under lock
authorKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Sep 2024 05:11:36 +0000 (01:11 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sat, 21 Dec 2024 06:36:14 +0000 (01:36 -0500)
In userspace we don't (yet) have an SRCU implementation, so call_srcu()
recurses.

But we don't want to be invoking it under the lock anyways.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/rcu_pending.c

index 40a20192eee8915af49bce0873caf9af7ea5e830..67522aa344a735c8d53be736fb1897f1c00435af 100644 (file)
@@ -478,7 +478,9 @@ start_gp:
                 */
                if (!p->cb_armed) {
                        p->cb_armed = true;
+                       spin_unlock_irqrestore(&p->lock, flags);
                        __call_rcu(pending->srcu, &p->cb, rcu_pending_rcu_cb);
+                       goto free_node;
                } else {
                        __start_poll_synchronize_rcu(pending->srcu);
                }