submit_bh: Drop unnecessary return values and API users
Subsystems (2)
cover submit_bh: Drop unnecessary return values and API users
submit_bh/submit_bh_wbc are non-blocking functions which just submits the bio and returns. The caller of submit_bh/submit_bh_wbc needs to wait on buffer till I/O completion and then check buffer head's b_state field to know if there was any I/O error.
Hence there is no need for these functions to have any return type. Even now they always returns 0. Hence drop the return value and make their return type as void to avoid any confusion.
Ritesh Harjani (3):
jbd2: Drop useless return value of submit_bh fs/buffer: Drop useless return value of submit_bh fs/buffer: Make submit_bh & submit_bh_wbc return type as void
fs/buffer.c | 19 ++++++++----------- fs/jbd2/commit.c | 11 +++++------ fs/jbd2/journal.c | 6 ++---- include/linux/buffer_head.h | 2 +- 4 files changed, 16 insertions(+), 22 deletions(-)
--
2.35.3
RFC 1/3 jbd2: Drop useless return value of submit_bh
submit_bh always returns 0. This patch cleans up 2 of it's caller in jbd2 to drop submit_bh's useless return value.
Once all submit_bh callers are cleaned up, we can make it's return type as void.
--- fs/jbd2/commit.c | 11 +++++------ fs/jbd2/journal.c | 6 ++---- 2 files changed, 7 insertions(+), 10 deletions(-)
fs/jbd2/commit.c +5 -6
@@ -122,8 +122,8 @@ static int journal_submit_commit_record(journal_t *journal, {struct commit_header *tmp;struct buffer_head *bh; -int ret;struct timespec64 now; +int write_flags =REQ_SYNC ; *cbh =NULL ;
@@ -155,13 +155,12 @@ static int journal_submit_commit_record(journal_t *journal,if (journal->j_flags &JBD2_BARRIER && !jbd2_has_feature_async_commit (journal)) - ret =submit_bh (REQ_OP_WRITE , -REQ_SYNC |REQ_PREFLUSH |REQ_FUA , bh); -else - ret =submit_bh (REQ_OP_WRITE ,REQ_SYNC , bh); + write_flags |=REQ_PREFLUSH |REQ_FUA ; + +submit_bh (REQ_OP_WRITE , write_flags, bh); *cbh = bh; -return ret; +return 0 ; }/*
fs/jbd2/journal.c +2 -4
@@ -1606,7 +1606,7 @@ static int jbd2_write_superblock(journal_t *journal, int write_flags) {struct buffer_head *bh = journal->j_sb_buffer;journal_superblock_t *sb = journal->j_superblock; -int ret; +int ret =0 ;/* Buffer got discarded which means block device got invalidated */ if (!buffer_mapped (bh)) {
@@ -1636,14 +1636,12 @@ static int jbd2_write_superblock(journal_t *journal, int write_flags) sb->s_checksum =jbd2_superblock_csum (journal, sb);get_bh (bh); bh->b_end_io = end_buffer_write_sync; - ret =submit_bh (REQ_OP_WRITE , write_flags, bh); +submit_bh (REQ_OP_WRITE , write_flags, bh);wait_on_buffer (bh);if (buffer_write_io_error (bh)) {clear_buffer_write_io_error (bh);set_buffer_uptodate (bh); ret = -EIO ; - } -if (ret) {printk (KERN_ERR "JBD2: Error %d detected when updating " "journal superblock for %s.\n" , ret, journal->j_devname);
Signature · 1 line
2.35.3
Re: [RFC 1/3] jbd2: Drop useless return value of submit_bh
Looks good:
Re: [RFC 1/3] jbd2: Drop useless return value of submit_bh
In reply to Ritesh HarjaniQuoted 6 lines · Ritesh Harjani
submit_bhalways returns 0. This patch cleans up 2 of it's caller in jbd2 to drop submit_bh's useless return value.
Once allsubmit_bhcallers are cleaned up, we can make it's return type as void.Signed-off-by Ritesh Harjani <[email protected]>
Looks good. Feel free to add:
Honza
Quoted 69 lines
--- fs/jbd2/commit.c | 11 +++++------ fs/jbd2/journal.c | 6 ++---- 2 files changed, 7 insertions(+), 10 deletions(-)fs/jbd2/commit.c +5
-6@@ -122,8 +122,8 @@ static int journal_submit_commit_record(journal_t *journal, {struct commit_header *tmp;struct buffer_head *bh; -int ret;struct timespec64 now; +int write_flags =REQ_SYNC ; *cbh =NULL ;@@ -155,13 +155,12 @@ static int journal_submit_commit_record(journal_t *journal,if (journal->j_flags &JBD2_BARRIER && !jbd2_has_feature_async_commit (journal)) - ret =submit_bh (REQ_OP_WRITE , -REQ_SYNC |REQ_PREFLUSH |REQ_FUA , bh); -else - ret =submit_bh (REQ_OP_WRITE ,REQ_SYNC , bh); + write_flags |=REQ_PREFLUSH |REQ_FUA ; + +submit_bh (REQ_OP_WRITE , write_flags, bh); *cbh = bh; -return ret; +return 0 ; }/* fs/jbd2/journal.c +2
-4@@ -1606,7 +1606,7 @@ static int jbd2_write_superblock(journal_t *journal, int write_flags) {struct buffer_head *bh = journal->j_sb_buffer;journal_superblock_t *sb = journal->j_superblock; -int ret; +int ret =0 ;/* Buffer got discarded which means block device got invalidated */ if (!buffer_mapped (bh)) {@@ -1636,14 +1636,12 @@ static int jbd2_write_superblock(journal_t *journal, int write_flags) sb->s_checksum =jbd2_superblock_csum (journal, sb);get_bh (bh); bh->b_end_io = end_buffer_write_sync; - ret =submit_bh (REQ_OP_WRITE , write_flags, bh); +submit_bh (REQ_OP_WRITE , write_flags, bh);wait_on_buffer (bh);if (buffer_write_io_error (bh)) {clear_buffer_write_io_error (bh);set_buffer_uptodate (bh); ret = -EIO ; - } -if (ret) {printk (KERN_ERR "JBD2: Error %d detected when updating " "journal superblock for %s.\n" , ret, journal->j_devname);Signature · 1 line
2.35.3
Signature · 2 lines
Jan Kara <[email protected]> SUSE Labs, CR
Re: [RFC 1/3] jbd2: Drop useless return value of submit_bh
In reply to Ritesh HarjaniQuoted 6 lines · Ritesh Harjani
fs/jbd2/journal.c +1
-1@@ -1636,14 +1636,12 @@ static int jbd2_write_superblock(journal_t *journal, int write_flags) sb->s_checksum =jbd2_superblock_csum (journal, sb);get_bh (bh); bh->b_end_io = end_buffer_write_sync; - ret =submit_bh (REQ_OP_WRITE , write_flags, bh); +submit_bh (REQ_OP_WRITE , write_flags, bh);
fs/jbd2/journal.c static int jbd2_write_superblock(journal_t *journal, int write_flags) · line 1647
Quoted 10 lines
fs/jbd2/journal.c +0
-2wait_on_buffer (bh);if (buffer_write_io_error (bh)) {clear_buffer_write_io_error (bh);set_buffer_uptodate (bh); ret = -EIO ; - } -if (ret) {printk (KERN_ERR "JBD2: Error %d detected when updating " "journal superblock for %s.\n" , ret, journal->j_devname);
Maybe rephrase the error message? And join it together to match the current preferred style.
printk(KERN_ERR "JBD2: I/O error when updating journal superblock for %s.\n", journal->j_devname);
Re: [RFC 1/3] jbd2: Drop useless return value of submit_bh
Quoted 21 lines · Matthew Wilcox
Quoted 6 lines · Ritesh Harjani
fs/jbd2/journal.c +1
-1@@ -1636,14 +1636,12 @@ static int jbd2_write_superblock(journal_t *journal, int write_flags) sb->s_checksum =jbd2_superblock_csum (journal, sb);get_bh (bh); bh->b_end_io = end_buffer_write_sync; - ret =submit_bh (REQ_OP_WRITE , write_flags, bh); +submit_bh (REQ_OP_WRITE , write_flags, bh);fs/jbd2/journal.c static int jbd2_write_superblock(journal_t *journal, int write_flags) · line 1647
Quoted 10 lines
fs/jbd2/journal.c +0
-2wait_on_buffer (bh);if (buffer_write_io_error (bh)) {clear_buffer_write_io_error (bh);set_buffer_uptodate (bh); ret = -EIO ; - } -if (ret) {printk (KERN_ERR "JBD2: Error %d detected when updating " "journal superblock for %s.\n" , ret, journal->j_devname);Maybe rephrase the error message? And join it together to match the current preferred style.
Quoted 2 lines
printk(KERN_ERR "JBD2: I/O error when updating journal superblock for %s.\n", journal->j_devname);
Sure, I will update the printk message like above and send out a v3 (since I haven't receieved any other comments so I think v3 should be good to be picked up now)
-ritesh
Re: [RFC 1/3] jbd2: Drop useless return value of submit_bh
Quoted 22 lines · Ritesh Harjani
Quoted 21 lines · Matthew Wilcox
Quoted 6 lines · Ritesh Harjani
fs/jbd2/journal.c +1
-1@@ -1636,14 +1636,12 @@ static int jbd2_write_superblock(journal_t *journal, int write_flags) sb->s_checksum =jbd2_superblock_csum (journal, sb);get_bh (bh); bh->b_end_io = end_buffer_write_sync; - ret =submit_bh (REQ_OP_WRITE , write_flags, bh); +submit_bh (REQ_OP_WRITE , write_flags, bh);fs/jbd2/journal.c static int jbd2_write_superblock(journal_t *journal, int write_flags) · line 1647
Quoted 10 lines
fs/jbd2/journal.c +0
-2wait_on_buffer (bh);if (buffer_write_io_error (bh)) {clear_buffer_write_io_error (bh);set_buffer_uptodate (bh); ret = -EIO ; - } -if (ret) {printk (KERN_ERR "JBD2: Error %d detected when updating " "journal superblock for %s.\n" , ret, journal->j_devname);Maybe rephrase the error message? And join it together to match the current preferred style.
Quoted 6 lines
Quoted 2 lines
printk(KERN_ERR "JBD2: I/O error when updating journal superblock for %s.\n", journal->j_devname);Sure, I will update the printk message like above and send out a v3 (since I haven't receieved any other comments so I think v3 should be good to be picked up now)
We were planning to send this patch series via ext4 tree.
But it seems this might conflict with the below mentioned patches sitting in linux-next. So let me rebase my patches on top of these and maybe hold to this series until the current set of changes land in linux tree to avoid any merge conflicts later.
But either ways do let me know if you would like to take any other preferred route. Since this is not critical, so I am fine with either ways you suggest.
-ritesh
author Bart Van Assche <[email protected]> Thu Jul 14 11:07:13 2022 -0700
fs/buffer: Combine two submit_bh() and ll_rw_block() arguments
Both submit_bh() and ll_rw_block() accept a request operation type and request flags as their first two arguments. Micro-optimize these two functions by combining these first two arguments into a single argument. This patch does not change the behavior of any of the modified code.
RFC 2/3 fs/buffer: Drop useless return value of submit_bh
In reply to Ritesh Harjanisubmit_bh always returns 0. This patch drops the useless return value of submit_bh from __sync_dirty_buffer(). Once all of submit_bh callers are cleaned up, we can make it's return type as void.
--- fs/buffer.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)
fs/buffer.c +4 -6
@@ -3121,8 +3121,6 @@ EXPORT_SYMBOL(write_dirty_buffer);*/ int __sync_dirty_buffer (struct buffer_head *bh,int op_flags) { -int ret =0 ; -WARN_ON (atomic_read (&bh->b_count) <1 );lock_buffer (bh);if (test_clear_buffer_dirty (bh)) {
@@ -3137,14 +3135,14 @@ int __sync_dirty_buffer(struct buffer_head *bh, int op_flags)get_bh (bh); bh->b_end_io = end_buffer_write_sync; - ret =submit_bh (REQ_OP_WRITE , op_flags, bh); +submit_bh (REQ_OP_WRITE , op_flags, bh);wait_on_buffer (bh); -if (!ret && !buffer_uptodate (bh)) - ret = -EIO ; +if (!buffer_uptodate (bh)) +return -EIO ; }else {unlock_buffer (bh); } -return ret; +return 0 ; }EXPORT_SYMBOL (__sync_dirty_buffer);
Signature · 1 line
2.35.3
Re: [RFC 2/3] fs/buffer: Drop useless return value of submit_bh
Quoted 3 lines · Ritesh Harjani
submit_bhalways returns 0. This patch drops the useless return value ofsubmit_bhfrom__sync_dirty_buffer(). Once all ofsubmit_bhcallers are cleaned up, we can make it's return type as void.
Looks good:
Re: [RFC 2/3] fs/buffer: Drop useless return value of submit_bh
In reply to Ritesh HarjaniQuoted 5 lines · Ritesh Harjani
submit_bhalways returns 0. This patch drops the useless return value ofsubmit_bhfrom__sync_dirty_buffer(). Once all ofsubmit_bhcallers are cleaned up, we can make it's return type as void.Signed-off-by Ritesh Harjani <[email protected]>
Looks good. Feel free to add:
Honza
Quoted 39 lines
--- fs/buffer.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)fs/buffer.c +4
-6@@ -3121,8 +3121,6 @@ EXPORT_SYMBOL(write_dirty_buffer);*/ int __sync_dirty_buffer (struct buffer_head *bh,int op_flags) { -int ret =0 ; -WARN_ON (atomic_read (&bh->b_count) <1 );lock_buffer (bh);if (test_clear_buffer_dirty (bh)) {@@ -3137,14 +3135,14 @@ int __sync_dirty_buffer(struct buffer_head *bh, int op_flags)get_bh (bh); bh->b_end_io = end_buffer_write_sync; - ret =submit_bh (REQ_OP_WRITE , op_flags, bh); +submit_bh (REQ_OP_WRITE , op_flags, bh);wait_on_buffer (bh); -if (!ret && !buffer_uptodate (bh)) - ret = -EIO ; +if (!buffer_uptodate (bh)) +return -EIO ; }else {unlock_buffer (bh); } -return ret; +return 0 ; }EXPORT_SYMBOL (__sync_dirty_buffer);Signature · 1 line
2.35.3
Signature · 2 lines
Jan Kara <[email protected]> SUSE Labs, CR
RFC 3/3 fs/buffer: Make submit_bh & submit_bh_wbc return type as void
In reply to Ritesh Harjanisubmit_bh/submit_bh_wbc are non-blocking functions which just submits the bio and returns. The caller of submit_bh/submit_bh_wbc needs to wait on buffer till I/O completion and then check buffer head's b_state field to know if there was any I/O error.
Hence there is no need for these functions to have any return type. Even now they always returns 0. Hence drop the return value and make their return type as void to avoid any confusion.
--- fs/buffer.c | 9 ++++----- include/linux/buffer_head.h | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-)
fs/buffer.c +4 -5
@@ -52,7 +52,7 @@#include "internal.h" static int fsync_buffers_list (spinlock_t *lock,struct list_head *list); -static int submit_bh_wbc (int op,int op_flags,struct buffer_head *bh, +static void submit_bh_wbc (int op,int op_flags,struct buffer_head *bh,struct writeback_control *wbc);#define BH_ENTRY (list) list_entry((list), struct buffer_head, b_assoc_buffers)
@@ -2994,7 +2994,7 @@ static void end_bio_bh_io_sync(struct bio *bio)bio_put (bio); } -static int submit_bh_wbc (int op,int op_flags,struct buffer_head *bh, +static void submit_bh_wbc (int op,int op_flags,struct buffer_head *bh,struct writeback_control *wbc) {struct bio *bio;
@@ -3037,12 +3037,11 @@ static int submit_bh_wbc(int op, int op_flags, struct buffer_head *bh, }submit_bio (bio); -return 0 ; } -int submit_bh (int op,int op_flags,struct buffer_head *bh) +void submit_bh (int op,int op_flags,struct buffer_head *bh) { -return submit_bh_wbc (op, op_flags, bh,NULL ); +submit_bh_wbc (op, op_flags, bh,NULL ); }EXPORT_SYMBOL (submit_bh);
include/linux/buffer_head.h +1 -1
@@ -205,7 +205,7 @@ void ll_rw_block(int, int, int, struct buffer_head * bh[]);int sync_dirty_buffer (struct buffer_head *bh);int __sync_dirty_buffer (struct buffer_head *bh,int op_flags);void write_dirty_buffer (struct buffer_head *bh,int op_flags); -int submit_bh (int ,int ,struct buffer_head *); +void submit_bh (int op,int op_flags,struct buffer_head *bh);void write_boundary_block (struct block_device *bdev,sector_t bblock,unsigned blocksize);int bh_uptodate_or_lock (struct buffer_head *bh);
Signature · 1 line
2.35.3
Re: [RFC 3/3] fs/buffer: Make submit_bh & submit_bh_wbc return type as void
Quoted 1 line · Ritesh Harjani
submit_bh/submit_bh_wbc are non-blocking functions which just submits
s/submits/submit/
Quoted 1 line
the bio and returns. The caller of submit_bh/submit_bh_wbc needs to wait
s/retuns/return/
Otherwise looks good:
Re: [RFC 3/3] fs/buffer: Make submit_bh & submit_bh_wbc return type as void
In reply to Ritesh HarjaniQuoted 10 lines · Ritesh Harjani
submit_bh/submit_bh_wbc are non-blocking functions which just submits the bio and returns. The caller of submit_bh/submit_bh_wbc needs to wait on buffer till I/O completion and then check buffer head's
b_statefield to know if there was any I/O error.Hence there is no need for these functions to have any return type. Even now they always returns 0. Hence drop the return value and make their return type as void to avoid any confusion.
Signed-off-by Ritesh Harjani <[email protected]>
Looks good. Feel free to add:
Honza
Quoted 58 lines
--- fs/buffer.c | 9 ++++----- include/linux/buffer_head.h | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-)fs/buffer.c +4
-5@@ -52,7 +52,7 @@#include "internal.h" static int fsync_buffers_list (spinlock_t *lock,struct list_head *list); -static int submit_bh_wbc (int op,int op_flags,struct buffer_head *bh, +static void submit_bh_wbc (int op,int op_flags,struct buffer_head *bh,struct writeback_control *wbc);#define BH_ENTRY (list) list_entry((list), struct buffer_head, b_assoc_buffers)@@ -2994,7 +2994,7 @@ static void end_bio_bh_io_sync(struct bio *bio)bio_put (bio); } -static int submit_bh_wbc (int op,int op_flags,struct buffer_head *bh, +static void submit_bh_wbc (int op,int op_flags,struct buffer_head *bh,struct writeback_control *wbc) {struct bio *bio;@@ -3037,12 +3037,11 @@ static int submit_bh_wbc(int op, int op_flags, struct buffer_head *bh, }submit_bio (bio); -return 0 ; } -int submit_bh (int op,int op_flags,struct buffer_head *bh) +void submit_bh (int op,int op_flags,struct buffer_head *bh) { -return submit_bh_wbc (op, op_flags, bh,NULL ); +submit_bh_wbc (op, op_flags, bh,NULL ); }EXPORT_SYMBOL (submit_bh);include/linux/buffer_head.h +1
-1@@ -205,7 +205,7 @@ void ll_rw_block(int, int, int, struct buffer_head * bh[]);int sync_dirty_buffer (struct buffer_head *bh);int __sync_dirty_buffer (struct buffer_head *bh,int op_flags);void write_dirty_buffer (struct buffer_head *bh,int op_flags); -int submit_bh (int ,int ,struct buffer_head *); +void submit_bh (int op,int op_flags,struct buffer_head *bh);void write_boundary_block (struct block_device *bdev,sector_t bblock,unsigned blocksize);int bh_uptodate_or_lock (struct buffer_head *bh);Signature · 1 line
2.35.3
Signature · 2 lines
Jan Kara <[email protected]> SUSE Labs, CR