OrangePi_CM5/fs/f2fs
Chao Liu 50e7896c8e 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@gmail.com/
Fixes: 4c8ff7095b ("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>
2022-08-21 15:16:11 +02:00
..
Kconfig f2fs: compress: support lzo-rle compress algorithm 2020-05-11 20:36:46 -07:00
Makefile f2fs: support data compression 2020-01-17 16:48:07 -08:00
acl.c f2fs: clean up kvfree 2020-09-14 11:15:37 -07:00
acl.h f2fs: Use the correct style for SPDX License Identifier 2020-05-08 06:55:55 -07:00
checkpoint.c f2fs: remove WARN_ON in f2fs_is_valid_blkaddr 2022-06-14 18:32:38 +02:00
compress.c f2fs: compress: fix to print raw data size in error path of lz4 decompression 2022-04-08 14:40:33 +02:00
data.c f2fs: fix compressed file start atomic write may cause data corruption 2022-04-08 14:40:04 +02:00
debug.c f2fs: avoid race condition for shrinker count 2021-01-06 14:56:54 +01:00
dir.c f2fs: reduce the scope of setting fsck tag when de->name_len is zero 2021-09-18 13:40:13 +02:00
extent_cache.c f2fs: support 64-bits key in f2fs rb-tree node entry 2020-09-10 14:03:30 -07:00
f2fs.h f2fs: fix to do sanity check for inline inode 2022-06-09 10:21:21 +02:00
file.c f2fs: fix to remove F2FS_COMPR_FL and tag F2FS_NOCOMP_FL at the same time 2022-08-21 15:16:11 +02:00
gc.c f2fs: write checkpoint during FG_GC 2022-08-21 15:16:11 +02:00
gc.h f2fs: support age threshold based garbage collection 2020-09-11 11:11:15 -07:00
hash.c f2fs-for-5.8-rc1 2020-06-09 11:28:59 -07:00
inline.c f2fs: fix to do sanity check for inline inode 2022-06-09 10:21:21 +02:00
inode.c f2fs: fix to do sanity check for inline inode 2022-06-09 10:21:21 +02:00
namei.c f2fs: attach inline_data after setting compression 2022-06-29 08:59:51 +02:00
node.c f2fs: fix to avoid potential deadlock 2022-04-08 14:40:04 +02:00
node.h f2fs: avoid race condition for shrinker count 2021-01-06 14:56:54 +01:00
recovery.c f2fs: fix to avoid racing on fsync_entry_slab by multi filesystem instances 2021-07-19 09:45:03 +02:00
segment.c f2fs: fix to do sanity check on total_data_blocks 2022-06-09 10:21:21 +02:00
segment.h f2fs: fix to do sanity check on total_data_blocks 2022-06-09 10:21:21 +02:00
shrinker.c f2fs: avoid race condition for shrinker count 2021-01-06 14:56:54 +01:00
super.c f2fs: don't need inode lock for system hidden quota 2022-06-09 10:21:21 +02:00
sysfs.c f2fs: fix to enable ATGC correctly via gc_idle sysfs interface 2022-04-08 14:40:03 +02:00
trace.c
trace.h f2fs: Use the correct style for SPDX License Identifier 2020-05-08 06:55:55 -07:00
verity.c f2fs: fix error handling in f2fs_end_enable_verity() 2021-05-11 14:47:34 +02:00
xattr.c f2fs: fix to do sanity check on last xattr entry in __f2fs_setxattr() 2021-12-29 12:26:05 +01:00
xattr.h f2fs: code cleanup by removing ifdef macro surrounding 2020-05-26 18:56:10 -07:00