ext4: move_extent_per_page() cleanup
authorAkira Fujita <a-fujita@rs.jp.nec.com>
Tue, 24 Nov 2009 15:31:56 +0000 (10:31 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 24 Nov 2009 15:31:56 +0000 (10:31 -0500)
Integrate duplicate lines (acquire/release semaphore and invalidate
extent cache in move_extent_per_page()) into mext_replace_branches(),
to reduce source and object code size.

Signed-off-by: Akira Fujita <a-fujita@rs.jp.nec.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/move_extent.c

index 445ecd7616a6a16adc914008a2c6577ca49a347b..cad1e2edda7e2b4b613817b770d7cc6f94dc80c0 100644 (file)
@@ -660,6 +660,9 @@ mext_replace_branches(handle_t *handle, struct inode *orig_inode,
        int replaced_count = 0;
        int dext_alen;
 
+       /* Protect extent trees against block allocations via delalloc */
+       double_down_write_data_sem(orig_inode, donor_inode);
+
        /* Get the original extent for the block "orig_off" */
        *err = get_ext_path(orig_inode, orig_off, &orig_path);
        if (*err)
@@ -755,6 +758,11 @@ out:
                kfree(donor_path);
        }
 
+       ext4_ext_invalidate_cache(orig_inode);
+       ext4_ext_invalidate_cache(donor_inode);
+
+       double_up_write_data_sem(orig_inode, donor_inode);
+
        return replaced_count;
 }
 
@@ -820,19 +828,9 @@ move_extent_per_page(struct file *o_filp, struct inode *donor_inode,
         * Just swap data blocks between orig and donor.
         */
        if (uninit) {
-               /*
-                * Protect extent trees against block allocations
-                * via delalloc
-                */
-               double_down_write_data_sem(orig_inode, donor_inode);
                replaced_count = mext_replace_branches(handle, orig_inode,
                                                donor_inode, orig_blk_offset,
                                                block_len_in_page, err);
-
-               /* Clear the inode cache not to refer to the old data */
-               ext4_ext_invalidate_cache(orig_inode);
-               ext4_ext_invalidate_cache(donor_inode);
-               double_up_write_data_sem(orig_inode, donor_inode);
                goto out2;
        }
 
@@ -880,8 +878,6 @@ move_extent_per_page(struct file *o_filp, struct inode *donor_inode,
        /* Release old bh and drop refs */
        try_to_release_page(page, 0);
 
-       /* Protect extent trees against block allocations via delalloc */
-       double_down_write_data_sem(orig_inode, donor_inode);
        replaced_count = mext_replace_branches(handle, orig_inode, donor_inode,
                                        orig_blk_offset, block_len_in_page,
                                        &err2);
@@ -890,18 +886,10 @@ move_extent_per_page(struct file *o_filp, struct inode *donor_inode,
                        block_len_in_page = replaced_count;
                        replaced_size =
                                block_len_in_page << orig_inode->i_blkbits;
-               } else {
-                       double_up_write_data_sem(orig_inode, donor_inode);
+               } else
                        goto out;
-               }
        }
 
-       /* Clear the inode cache not to refer to the old data */
-       ext4_ext_invalidate_cache(orig_inode);
-       ext4_ext_invalidate_cache(donor_inode);
-
-       double_up_write_data_sem(orig_inode, donor_inode);
-
        if (!page_has_buffers(page))
                create_empty_buffers(page, 1 << orig_inode->i_blkbits, 0);