lkml.org 
[lkml]   [2022]   [Oct]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6.0 655/862] f2fs: fix race condition on setting FI_NO_EXTENT flag
    Date
    From: Zhang Qilong <zhangqilong3@huawei.com>

    [ Upstream commit 07725adc55c0a414c10acb5c8c86cea34b95ddef ]

    The following scenarios exist.
    process A: process B:
    ->f2fs_drop_extent_tree ->f2fs_update_extent_cache_range
    ->f2fs_update_extent_tree_range
    ->write_lock
    ->set_inode_flag
    ->is_inode_flag_set
    ->__free_extent_tree // Shouldn't
    // have been
    // cleaned up
    // here
    ->write_lock

    In this case, the "FI_NO_EXTENT" flag is set between
    f2fs_update_extent_tree_range and is_inode_flag_set
    by other process. it leads to clearing the whole exten
    tree which should not have happened. And we fix it by
    move the setting it to the range of write_lock.

    Fixes:5f281fab9b9a3 ("f2fs: disable extent_cache for fcollapse/finsert inodes")
    Signed-off-by: Zhang Qilong <zhangqilong3@huawei.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/f2fs/extent_cache.c | 3 +--
    1 file changed, 1 insertion(+), 2 deletions(-)

    diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
    index 866e72b29bd5..761fd42c93f2 100644
    --- a/fs/f2fs/extent_cache.c
    +++ b/fs/f2fs/extent_cache.c
    @@ -804,9 +804,8 @@ void f2fs_drop_extent_tree(struct inode *inode)
    if (!f2fs_may_extent_tree(inode))
    return;

    - set_inode_flag(inode, FI_NO_EXTENT);
    -
    write_lock(&et->lock);
    + set_inode_flag(inode, FI_NO_EXTENT);
    __free_extent_tree(sbi, et);
    if (et->largest.len) {
    et->largest.len = 0;
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-10-19 12:58    [W:2.061 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site