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.

Reviewed-by: Qu Wenruo <w...@suse.com>
Reviewed-by: Johannes Thumshirn <johannes.thumsh...@wdc.com>
Signed-off-by: Josef Bacik <jo...@toxicpanda.com>
---
 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 93464b93ee9d..c24ffbf0fb74 100644
--- a/fs/btrfs/transaction.c
+++ b/fs/btrfs/transaction.c
@@ -408,6 +408,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) {
@@ -456,11 +457,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;
 }
 
 
-- 
2.26.2

Reply via email to