lkml.org 
[lkml]   [2022]   [Aug]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.19 1008/1157] f2fs: fix to remove F2FS_COMPR_FL and tag F2FS_NOCOMP_FL at the same time
    Date
    From: Chao Liu <liuchao@coolpad.com>

    [ Upstream commit 8ee236dcaa690d09ca612622e8bc8d09c302021d ]

    If the inode has the compress flag, it will fail to use
    'chattr -c +m' to remove its compress flag and tag no compress flag.
    However, the same command will be successful when executed again,
    as shown below:

    $ touch foo.txt
    $ chattr +c foo.txt
    $ chattr -c +m foo.txt
    chattr: Invalid argument while setting flags on foo.txt
    $ chattr -c +m foo.txt
    $ f2fs_io getflags foo.txt
    get a flag on foo.txt ret=0, flags=nocompression,inline_data

    Fix this by removing some checks in f2fs_setflags_common()
    that do not affect the original logic. I go through all the
    possible scenarios, and the results are as follows. Bold is
    the only thing that has changed.

    +---------------+-----------+-----------+----------+
    | | file flags |
    + command +-----------+-----------+----------+
    | | no flag | compr | nocompr |
    +---------------+-----------+-----------+----------+
    | chattr +c | compr | compr | -EINVAL |
    | chattr -c | no flag | no flag | nocompr |
    | chattr +m | nocompr | -EINVAL | nocompr |
    | chattr -m | no flag | compr | no flag |
    | chattr +c +m | -EINVAL | -EINVAL | -EINVAL |
    | chattr +c -m | compr | compr | compr |
    | chattr -c +m | nocompr | *nocompr* | nocompr |
    | chattr -c -m | no flag | no flag | no flag |
    +---------------+-----------+-----------+----------+

    Link: https://lore.kernel.org/linux-f2fs-devel/20220621064833.1079383-1-chaoliu719@gmail.com/
    Fixes: 4c8ff7095bef ("f2fs: support data compression")
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Chao Liu <liuchao@coolpad.com>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/f2fs/file.c | 9 +--------
    1 file changed, 1 insertion(+), 8 deletions(-)

    diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
    index bd14cef1b08f..110c459c78b6 100644
    --- a/fs/f2fs/file.c
    +++ b/fs/f2fs/file.c
    @@ -1873,10 +1873,7 @@ static int f2fs_setflags_common(struct inode *inode, u32 iflags, u32 mask)
    if (masked_flags & F2FS_COMPR_FL) {
    if (!f2fs_disable_compressed_file(inode))
    return -EINVAL;
    - }
    - if (iflags & F2FS_NOCOMP_FL)
    - return -EINVAL;
    - if (iflags & F2FS_COMPR_FL) {
    + } else {
    if (!f2fs_may_compress(inode))
    return -EINVAL;
    if (S_ISREG(inode->i_mode) && inode->i_size)
    @@ -1885,10 +1882,6 @@ static int f2fs_setflags_common(struct inode *inode, u32 iflags, u32 mask)
    set_compress_context(inode);
    }
    }
    - if ((iflags ^ masked_flags) & F2FS_NOCOMP_FL) {
    - if (masked_flags & F2FS_COMPR_FL)
    - return -EINVAL;
    - }

    fi->i_flags = iflags | (fi->i_flags & ~mask);
    f2fs_bug_on(F2FS_I_SB(inode), (fi->i_flags & F2FS_COMPR_FL) &&
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-16 06:49    [W:4.083 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site