* [f2fs-dev] [PATCH -next] f2fs: fix race condition on setting FI_NO_EXTENT flag
@ 2022-09-05 4:59 Zhang Qilong via Linux-f2fs-devel
2022-09-06 3:27 ` Chao Yu
0 siblings, 1 reply; 2+ messages in thread
From: Zhang Qilong via Linux-f2fs-devel @ 2022-09-05 4:59 UTC (permalink / raw)
To: jaegeuk, chao; +Cc: linux-f2fs-devel
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>
---
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.25.1
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [f2fs-dev] [PATCH -next] f2fs: fix race condition on setting FI_NO_EXTENT flag
2022-09-05 4:59 [f2fs-dev] [PATCH -next] f2fs: fix race condition on setting FI_NO_EXTENT flag Zhang Qilong via Linux-f2fs-devel
@ 2022-09-06 3:27 ` Chao Yu
0 siblings, 0 replies; 2+ messages in thread
From: Chao Yu @ 2022-09-06 3:27 UTC (permalink / raw)
To: Zhang Qilong, jaegeuk; +Cc: linux-f2fs-devel
On 2022/9/5 12:59, Zhang Qilong wrote:
> 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>
Thanks,
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-09-06 3:28 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-09-05 4:59 [f2fs-dev] [PATCH -next] f2fs: fix race condition on setting FI_NO_EXTENT flag Zhang Qilong via Linux-f2fs-devel
2022-09-06 3:27 ` Chao Yu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).