Re: [PATCH v2 30/34] md-bitmap: Convert read_file_page and write_file_page to bh_submit()
Jan Kara <[email protected]>
| Newsgroups | gmane.linux.raid,gmane.linux.file-systems |
|---|---|
| Message-ID | <y73arbgifpvnmcmg5uzznfbrlhv3pfblayrbsfyzsjzuhccqpn@bijdwd3szzrg> |
On Thu 28-05-26 18:31:43, Matthew Wilcox (Oracle) wrote: > Avoid an extra indirect function call by using bh_submit() instead of > submit_bh(). > > Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> > Cc: [email protected] Looks good. Feel free to add: Reviewed-by: Jan Kara <[email protected]> Honza > --- > drivers/md/md-bitmap.c | 27 ++++++++++++++------------- > 1 file changed, 14 insertions(+), 13 deletions(-) > > diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c > index 028b9ca8ce52..7d778fe1c47c 100644 > --- a/drivers/md/md-bitmap.c > +++ b/drivers/md/md-bitmap.c > @@ -502,6 +502,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); > @@ -510,7 +522,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; > } > > @@ -519,16 +531,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; > @@ -592,12 +594,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; > -- > 2.47.3 > -- Jan Kara <[email protected]> SUSE Labs, CR