Patch "f2fs: fix to remove F2FS_COMPR_FL and tag F2FS_NOCOMP_FL at the same time" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    f2fs: fix to remove F2FS_COMPR_FL and tag F2FS_NOCOMP_FL at the same time

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     f2fs-fix-to-remove-f2fs_compr_fl-and-tag-f2fs_nocomp.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit dec5b494f857f8522d6edb700e3d73c3b340da45
Author: Chao Liu <liuchao@xxxxxxxxxxx>
Date:   Mon Jul 25 18:16:33 2022 +0800

    f2fs: fix to remove F2FS_COMPR_FL and tag F2FS_NOCOMP_FL at the same time
    
    [ 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@xxxxxxxxx/
    Fixes: 4c8ff7095bef ("f2fs: support data compression")
    Reviewed-by: Chao Yu <chao@xxxxxxxxxx>
    Signed-off-by: Chao Liu <liuchao@xxxxxxxxxxx>
    Signed-off-by: Jaegeuk Kim <jaegeuk@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index defa068b4c7c..d56fcace1821 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -1844,10 +1844,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)
@@ -1856,10 +1853,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) &&



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux