ext4: refactor ext4_da_map_blocks()
authorZhang Yi <yi.zhang@huawei.com>
Sat, 27 Jan 2024 01:58:00 +0000 (09:58 +0800)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 2 Feb 2024 04:47:02 +0000 (23:47 -0500)
Refactor and cleanup ext4_da_map_blocks(), reduce some unnecessary
parameters and branches, no logic changes.

Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20240127015825.1608160-2-yi.zhang@huaweicloud.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/inode.c

index 4cae8698f70cf94de38c94b0edfd4767ad6c43c7..bbd5ee6dd3f375a5fafeaadc787a11dc93e00710 100644 (file)
@@ -1704,7 +1704,6 @@ static int ext4_da_map_blocks(struct inode *inode, sector_t iblock,
        /* Lookup extent status tree firstly */
        if (ext4_es_lookup_extent(inode, iblock, NULL, &es)) {
                if (ext4_es_is_hole(&es)) {
-                       retval = 0;
                        down_read(&EXT4_I(inode)->i_data_sem);
                        goto add_delayed;
                }
@@ -1749,26 +1748,9 @@ static int ext4_da_map_blocks(struct inode *inode, sector_t iblock,
                retval = ext4_ext_map_blocks(NULL, inode, map, 0);
        else
                retval = ext4_ind_map_blocks(NULL, inode, map, 0);
-
-add_delayed:
-       if (retval == 0) {
-               int ret;
-
-               /*
-                * XXX: __block_prepare_write() unmaps passed block,
-                * is it OK?
-                */
-
-               ret = ext4_insert_delayed_block(inode, map->m_lblk);
-               if (ret != 0) {
-                       retval = ret;
-                       goto out_unlock;
-               }
-
-               map_bh(bh, inode->i_sb, invalid_block);
-               set_buffer_new(bh);
-               set_buffer_delay(bh);
-       } else if (retval > 0) {
+       if (retval < 0)
+               goto out_unlock;
+       if (retval > 0) {
                unsigned int status;
 
                if (unlikely(retval != map->m_len)) {
@@ -1783,11 +1765,24 @@ add_delayed:
                                EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN;
                ext4_es_insert_extent(inode, map->m_lblk, map->m_len,
                                      map->m_pblk, status);
+               goto out_unlock;
        }
 
+add_delayed:
+       /*
+        * XXX: __block_prepare_write() unmaps passed block,
+        * is it OK?
+        */
+       retval = ext4_insert_delayed_block(inode, map->m_lblk);
+       if (retval)
+               goto out_unlock;
+
+       map_bh(bh, inode->i_sb, invalid_block);
+       set_buffer_new(bh);
+       set_buffer_delay(bh);
+
 out_unlock:
        up_read((&EXT4_I(inode)->i_data_sem));
-
        return retval;
 }