[PATCH 1/3] rpdfs: Use write_seqlock_bh() for balloc info

Valerie Aurora <[email protected]> Thu, 19 Mar 2026 10:37:25 +0100
Newsgroups dev.linux.lists.rpdfs-devel
Message-ID <[email protected]>
The balloc info seqlock is taken from bh context due to
rpdfs_balloc_publish_region() being called from an RCU callback, so it
needs to use write_seqlock_bh() instead of write_seqlock(). Found via
lockdep.

Signed-off-by: Valerie Aurora <[email protected]>
---
 fs/rpdfs/balloc.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/rpdfs/balloc.c b/fs/rpdfs/balloc.c
index 6a43a7c08aa6..ec1070b4a2d6 100644
--- a/fs/rpdfs/balloc.c
+++ b/fs/rpdfs/balloc.c
@@ -136,9 +136,9 @@ void rpdfs_balloc_publish_region(struct rpdfs_fs_info *rfi, struct rpdfs_balloc_
 		rpdfs_balloc_free_region(reg);
 		atomic_inc(&balinf->enospc_count);
 	} else {
-		write_seqlock(&balinf->seqlock);
+		write_seqlock_bh(&balinf->seqlock);
 		list_add_tail(&reg->head, &balinf->region_list);
-		write_sequnlock(&balinf->seqlock);
+		write_sequnlock_bh(&balinf->seqlock);
 	}
 	wake_up(&balinf->waitq);
 }
@@ -192,12 +192,12 @@ struct rpdfs_balloc_region *rpdfs_balloc_take_region(struct rpdfs_fs_info *rfi)
 		while_read_seqretry(&balinf->seqlock)
 			empty = list_empty(&balinf->region_list);
 		if (!empty) {
-			write_seqlock(&balinf->seqlock);
+			write_seqlock_bh(&balinf->seqlock);
 			reg = list_first_entry_or_null(&balinf->region_list,
 						       struct rpdfs_balloc_region, head);
 			if (reg)
 				list_del_init(&reg->head);
-			write_sequnlock(&balinf->seqlock);
+			write_sequnlock_bh(&balinf->seqlock);
 		}
 		if (reg)
 			break;
@@ -252,9 +252,9 @@ void rpdfs_balloc_return_region(struct rpdfs_fs_info *rfi, struct rpdfs_balloc_r
 	put_cpu_ptr(balinf->pcpu_region);
 
 	if (reg) {
-		write_seqlock(&balinf->seqlock);
+		write_seqlock_bh(&balinf->seqlock);
 		list_add(&reg->head, &balinf->region_list);
-		write_sequnlock(&balinf->seqlock);
+		write_sequnlock_bh(&balinf->seqlock);
 		wake_up(&balinf->waitq);
 	}
 }
-- 
2.49.0