]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ext4: passing block allocation information to ext4_es_insert_extent()
authorZhang Yi <yi.zhang@huawei.com>
Tue, 13 Aug 2024 12:34:45 +0000 (20:34 +0800)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 2 Sep 2024 19:26:14 +0000 (15:26 -0400)
Just pass the block allocation flag to ext4_es_insert_extent() when we
replacing a current extent after an actually block allocation or extent
status conversion, this flag will be used by later changes.

Suggested-by: Jan Kara <jack@suse.cz>
Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
Link: https://patch.msgid.link/20240813123452.2824659-6-yi.zhang@huaweicloud.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/extents.c
fs/ext4/extents_status.c
fs/ext4/extents_status.h
fs/ext4/inode.c

index e067f2dd0335cd28b735da28091d04535c1dccd6..671dacd7c87350b15764e4e9599ae592714fc856 100644 (file)
@@ -3113,7 +3113,7 @@ static void ext4_zeroout_es(struct inode *inode, struct ext4_extent *ex)
                return;
 
        ext4_es_insert_extent(inode, ee_block, ee_len, ee_pblock,
-                             EXTENT_STATUS_WRITTEN);
+                             EXTENT_STATUS_WRITTEN, 0);
 }
 
 /* FIXME!! we need to try to merge to left or right after zero-out  */
@@ -4097,7 +4097,8 @@ again:
 insert_hole:
        /* Put just found gap into cache to speed up subsequent requests */
        ext_debug(inode, " -> %u:%u\n", hole_start, len);
-       ext4_es_insert_extent(inode, hole_start, len, ~0, EXTENT_STATUS_HOLE);
+       ext4_es_insert_extent(inode, hole_start, len, ~0,
+                             EXTENT_STATUS_HOLE, 0);
 
        /* Update hole_len to reflect hole size after lblk */
        if (hole_start != lblk)
index 4d24b56cfaf01e79d8dd34a37b9855b8bdfbb4c1..0580bc4bc76239a7054bb648ce9f7f95f59062bd 100644 (file)
@@ -848,7 +848,7 @@ out:
  */
 void ext4_es_insert_extent(struct inode *inode, ext4_lblk_t lblk,
                           ext4_lblk_t len, ext4_fsblk_t pblk,
-                          unsigned int status)
+                          unsigned int status, int flags)
 {
        struct extent_status newes;
        ext4_lblk_t end = lblk + len - 1;
@@ -862,8 +862,8 @@ void ext4_es_insert_extent(struct inode *inode, ext4_lblk_t lblk,
        if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
                return;
 
-       es_debug("add [%u/%u) %llu %x to extent status tree of inode %lu\n",
-                lblk, len, pblk, status, inode->i_ino);
+       es_debug("add [%u/%u) %llu %x %x to extent status tree of inode %lu\n",
+                lblk, len, pblk, status, flags, inode->i_ino);
 
        if (!len)
                return;
index 3c8e2edee5d5d1e77af891530e9e5703ec56d0cc..b74d693c1adb665ae2e2531c1bb045daa7a87f10 100644 (file)
@@ -129,7 +129,7 @@ extern void ext4_es_init_tree(struct ext4_es_tree *tree);
 
 extern void ext4_es_insert_extent(struct inode *inode, ext4_lblk_t lblk,
                                  ext4_lblk_t len, ext4_fsblk_t pblk,
-                                 unsigned int status);
+                                 unsigned int status, int flags);
 extern void ext4_es_cache_extent(struct inode *inode, ext4_lblk_t lblk,
                                 ext4_lblk_t len, ext4_fsblk_t pblk,
                                 unsigned int status);
index 9e0c02d5d6882312326009dd623901952e8cded9..72f2b6ce97c0d6eb1f288c6d33c8d666246b72d7 100644 (file)
@@ -478,7 +478,7 @@ static int ext4_map_query_blocks(handle_t *handle, struct inode *inode,
        status = map->m_flags & EXT4_MAP_UNWRITTEN ?
                        EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN;
        ext4_es_insert_extent(inode, map->m_lblk, map->m_len,
-                             map->m_pblk, status);
+                             map->m_pblk, status, 0);
        return retval;
 }
 
@@ -559,7 +559,7 @@ static int ext4_map_create_blocks(handle_t *handle, struct inode *inode,
        status = map->m_flags & EXT4_MAP_UNWRITTEN ?
                        EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN;
        ext4_es_insert_extent(inode, map->m_lblk, map->m_len,
-                             map->m_pblk, status);
+                             map->m_pblk, status, flags);
 
        return retval;
 }
@@ -677,7 +677,7 @@ int ext4_map_blocks(handle_t *handle, struct inode *inode,
                status = map->m_flags & EXT4_MAP_UNWRITTEN ?
                                EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN;
                ext4_es_insert_extent(inode, map->m_lblk, map->m_len,
-                                     map->m_pblk, status);
+                                     map->m_pblk, status, 0);
        }
        up_read((&EXT4_I(inode)->i_data_sem));
 
@@ -4065,7 +4065,7 @@ int ext4_punch_hole(struct file *file, loff_t offset, loff_t length)
                                                    stop_block);
 
                ext4_es_insert_extent(inode, first_block, hole_len, ~0,
-                                     EXTENT_STATUS_HOLE);
+                                     EXTENT_STATUS_HOLE, 0);
                up_write(&EXT4_I(inode)->i_data_sem);
        }
        ext4_fc_track_range(handle, inode, first_block, stop_block);