Message ID | a11d1c323a74b1c452da3e4544019754b95bfaf4.1606938211.git.josef@toxicpanda.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Cleanup error handling in relocation | expand |
On 2020/12/3 上午3:50, Josef Bacik wrote: > We can create a reloc root when we record the root in the trans, which > can fail for all sorts of different reasons. Propagate this error up > the chain of callers. Future patches will fix the callers of > btrfs_record_root_in_trans() to handle the error. > > Signed-off-by: Josef Bacik <josef@toxicpanda.com> Reviewed-by: Qu Wenruo <wqu@suse.com> But an unrelated thing inlined below. > --- > fs/btrfs/transaction.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c > index a614f7699ce4..28e7a7464b60 100644 > --- a/fs/btrfs/transaction.c > +++ b/fs/btrfs/transaction.c > @@ -400,6 +400,7 @@ static int record_root_in_trans(struct btrfs_trans_handle *trans, > int force) > { > struct btrfs_fs_info *fs_info = root->fs_info; > + int ret = 0; > > if ((test_bit(BTRFS_ROOT_SHAREABLE, &root->state) && > root->last_trans < trans->transid) || force) { > @@ -448,11 +449,11 @@ static int record_root_in_trans(struct btrfs_trans_handle *trans, > * lock. smp_wmb() makes sure that all the writes above are > * done before we pop in the zero below > */ The large block of comment is not really for btrfs_init_reloc_root(), but more for ROOT_IN_TRANS_SETUP and root->last_trans. This is a little confusing, and may be it's a good idea to move them a little in another patch. Thanks, Qu > - btrfs_init_reloc_root(trans, root); > + ret = btrfs_init_reloc_root(trans, root); > smp_mb__before_atomic(); > clear_bit(BTRFS_ROOT_IN_TRANS_SETUP, &root->state); > } > - return 0; > + return ret; > } > > >
On 02/12/2020 20:54, Josef Bacik wrote: Looks good, Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> In a separate future patch we might also want to reverse this if statement, so we save a level of indent. > if ((test_bit(BTRFS_ROOT_SHAREABLE, &root->state) && > root->last_trans < trans->transid) || force) {
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index a614f7699ce4..28e7a7464b60 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -400,6 +400,7 @@ static int record_root_in_trans(struct btrfs_trans_handle *trans, int force) { struct btrfs_fs_info *fs_info = root->fs_info; + int ret = 0; if ((test_bit(BTRFS_ROOT_SHAREABLE, &root->state) && root->last_trans < trans->transid) || force) { @@ -448,11 +449,11 @@ static int record_root_in_trans(struct btrfs_trans_handle *trans, * lock. smp_wmb() makes sure that all the writes above are * done before we pop in the zero below */ - btrfs_init_reloc_root(trans, root); + ret = btrfs_init_reloc_root(trans, root); smp_mb__before_atomic(); clear_bit(BTRFS_ROOT_IN_TRANS_SETUP, &root->state); } - return 0; + return ret; }
We can create a reloc root when we record the root in the trans, which can fail for all sorts of different reasons. Propagate this error up the chain of callers. Future patches will fix the callers of btrfs_record_root_in_trans() to handle the error. Signed-off-by: Josef Bacik <josef@toxicpanda.com> --- fs/btrfs/transaction.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)