]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
md-bitmap: Convert read_file_page and write_file_page to bh_submit()
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Thu, 28 May 2026 17:31:43 +0000 (18:31 +0100)
committerChristian Brauner <brauner@kernel.org>
Thu, 4 Jun 2026 08:28:10 +0000 (10:28 +0200)
Avoid an extra indirect function call by using bh_submit() instead of
submit_bh().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Link: https://patch.msgid.link/20260528173150.1093780-31-willy@infradead.org
Reviewed-by: Jan Kara <jack@suse.cz>
Cc: linux-raid@vger.kernel.org
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
drivers/md/md-bitmap.c

index 83378c033c7285a5a0ca0ec007cf273373c04383..ffc9891be22b6539d99edd4e6fbe7b0e2ecb9d35 100644 (file)
@@ -501,6 +501,18 @@ static void write_sb_page(struct bitmap *bitmap, unsigned long pg_index,
 static void md_bitmap_file_kick(struct bitmap *bitmap);
 
 #ifdef CONFIG_MD_BITMAP_FILE
+static void end_bitmap_write(struct bio *bio)
+{
+       struct buffer_head *bh;
+       bool uptodate = bio_endio_bh(bio, &bh);
+       struct bitmap *bitmap = bh->b_private;
+
+       if (!uptodate)
+               set_bit(BITMAP_WRITE_ERROR, &bitmap->flags);
+       if (atomic_dec_and_test(&bitmap->pending_writes))
+               wake_up(&bitmap->write_wait);
+}
+
 static void write_file_page(struct bitmap *bitmap, struct page *page, int wait)
 {
        struct buffer_head *bh = page_buffers(page);
@@ -509,7 +521,7 @@ static void write_file_page(struct bitmap *bitmap, struct page *page, int wait)
                atomic_inc(&bitmap->pending_writes);
                set_buffer_locked(bh);
                set_buffer_mapped(bh);
-               submit_bh(REQ_OP_WRITE | REQ_SYNC, bh);
+               bh_submit(bh, REQ_OP_WRITE | REQ_SYNC, end_bitmap_write);
                bh = bh->b_this_page;
        }
 
@@ -518,16 +530,6 @@ static void write_file_page(struct bitmap *bitmap, struct page *page, int wait)
                           atomic_read(&bitmap->pending_writes) == 0);
 }
 
-static void end_bitmap_write(struct buffer_head *bh, int uptodate)
-{
-       struct bitmap *bitmap = bh->b_private;
-
-       if (!uptodate)
-               set_bit(BITMAP_WRITE_ERROR, &bitmap->flags);
-       if (atomic_dec_and_test(&bitmap->pending_writes))
-               wake_up(&bitmap->write_wait);
-}
-
 static void free_buffers(struct page *page)
 {
        struct buffer_head *bh;
@@ -591,12 +593,11 @@ static int read_file_page(struct file *file, unsigned long index,
                        else
                                count -= blocksize;
 
-                       bh->b_end_io = end_bitmap_write;
                        bh->b_private = bitmap;
                        atomic_inc(&bitmap->pending_writes);
                        set_buffer_locked(bh);
                        set_buffer_mapped(bh);
-                       submit_bh(REQ_OP_READ, bh);
+                       bh_submit(bh, REQ_OP_READ, end_bitmap_write);
                }
                blk_cur++;
                bh = bh->b_this_page;