]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/ext4/resize.c
Merge tag 'upstream-5.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/ubifs
[linux.git] / fs / ext4 / resize.c
index c0e9aef376a73723130c1c56526338150a0cc79b..a8c0f2b5b6e1f79f2948e786156c9c08b5751a6c 100644 (file)
@@ -388,28 +388,10 @@ static struct buffer_head *bclean(handle_t *handle, struct super_block *sb,
        return bh;
 }
 
-/*
- * If we have fewer than thresh credits, extend by EXT4_MAX_TRANS_DATA.
- * If that fails, restart the transaction & regain write access for the
- * buffer head which is used for block_bitmap modifications.
- */
-static int extend_or_restart_transaction(handle_t *handle, int thresh)
+static int ext4_resize_ensure_credits_batch(handle_t *handle, int credits)
 {
-       int err;
-
-       if (ext4_handle_has_enough_credits(handle, thresh))
-               return 0;
-
-       err = ext4_journal_extend(handle, EXT4_MAX_TRANS_DATA);
-       if (err < 0)
-               return err;
-       if (err) {
-               err = ext4_journal_restart(handle, EXT4_MAX_TRANS_DATA);
-               if (err)
-                       return err;
-       }
-
-       return 0;
+       return ext4_journal_ensure_credits_fn(handle, credits,
+               EXT4_MAX_TRANS_DATA, 0, 0);
 }
 
 /*
@@ -451,8 +433,8 @@ static int set_flexbg_block_bitmap(struct super_block *sb, handle_t *handle,
                        continue;
                }
 
-               err = extend_or_restart_transaction(handle, 1);
-               if (err)
+               err = ext4_resize_ensure_credits_batch(handle, 1);
+               if (err < 0)
                        return err;
 
                bh = sb_getblk(sb, flex_gd->groups[group].block_bitmap);
@@ -544,8 +526,8 @@ static int setup_new_flex_group_blocks(struct super_block *sb,
                        struct buffer_head *gdb;
 
                        ext4_debug("update backup group %#04llx\n", block);
-                       err = extend_or_restart_transaction(handle, 1);
-                       if (err)
+                       err = ext4_resize_ensure_credits_batch(handle, 1);
+                       if (err < 0)
                                goto out;
 
                        gdb = sb_getblk(sb, block);
@@ -602,8 +584,8 @@ static int setup_new_flex_group_blocks(struct super_block *sb,
 
                /* Initialize block bitmap of the @group */
                block = group_data[i].block_bitmap;
-               err = extend_or_restart_transaction(handle, 1);
-               if (err)
+               err = ext4_resize_ensure_credits_batch(handle, 1);
+               if (err < 0)
                        goto out;
 
                bh = bclean(handle, sb, block);
@@ -631,8 +613,8 @@ static int setup_new_flex_group_blocks(struct super_block *sb,
 
                /* Initialize inode bitmap of the @group */
                block = group_data[i].inode_bitmap;
-               err = extend_or_restart_transaction(handle, 1);
-               if (err)
+               err = ext4_resize_ensure_credits_batch(handle, 1);
+               if (err < 0)
                        goto out;
                /* Mark unused entries in inode bitmap used */
                bh = bclean(handle, sb, block);
@@ -1109,10 +1091,8 @@ static void update_backups(struct super_block *sb, sector_t blk_off, char *data,
                ext4_fsblk_t backup_block;
 
                /* Out of journal space, and can't get more - abort - so sad */
-               if (ext4_handle_valid(handle) &&
-                   handle->h_buffer_credits == 0 &&
-                   ext4_journal_extend(handle, EXT4_MAX_TRANS_DATA) &&
-                   (err = ext4_journal_restart(handle, EXT4_MAX_TRANS_DATA)))
+               err = ext4_resize_ensure_credits_batch(handle, 1);
+               if (err < 0)
                        break;
 
                if (meta_bg == 0)