Message ID | 20230410021140.1825781-1-chao@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Commit | db141b729bcc96ada971294087690207dcea4b99 |
Headers | show |
Series | [f2fs-dev] f2fs: fix to keep consistent i_gc_rwsem lock order | expand |
Hello: This patch was applied to jaegeuk/f2fs.git (dev) by Jaegeuk Kim <jaegeuk@kernel.org>: On Mon, 10 Apr 2023 10:11:40 +0800 you wrote: > i_gc_rwsem[WRITE] and i_gc_rwsem[READ] lock order is reversed > in gc_data_segment() and f2fs_dio_write_iter(), fix to keep > consistent lock order as below: > 1. lock i_gc_rwsem[WRITE] > 2. lock i_gc_rwsem[READ] > > Signed-off-by: Chao Yu <chao@kernel.org> > > [...] Here is the summary with links: - [f2fs-dev] f2fs: fix to keep consistent i_gc_rwsem lock order https://git.kernel.org/jaegeuk/f2fs/c/db141b729bcc You are awesome, thank you!
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c index 6dc2bc710ba8..91841b0057ba 100644 --- a/fs/f2fs/gc.c +++ b/fs/f2fs/gc.c @@ -1616,14 +1616,14 @@ static int gc_data_segment(struct f2fs_sb_info *sbi, struct f2fs_summary *sum, int err; if (S_ISREG(inode->i_mode)) { - if (!f2fs_down_write_trylock(&fi->i_gc_rwsem[READ])) { + if (!f2fs_down_write_trylock(&fi->i_gc_rwsem[WRITE])) { sbi->skipped_gc_rwsem++; continue; } if (!f2fs_down_write_trylock( - &fi->i_gc_rwsem[WRITE])) { + &fi->i_gc_rwsem[READ])) { sbi->skipped_gc_rwsem++; - f2fs_up_write(&fi->i_gc_rwsem[READ]); + f2fs_up_write(&fi->i_gc_rwsem[WRITE]); continue; } locked = true; @@ -1646,8 +1646,8 @@ static int gc_data_segment(struct f2fs_sb_info *sbi, struct f2fs_summary *sum, submitted++; if (locked) { - f2fs_up_write(&fi->i_gc_rwsem[WRITE]); f2fs_up_write(&fi->i_gc_rwsem[READ]); + f2fs_up_write(&fi->i_gc_rwsem[WRITE]); } stat_inc_data_blk_count(sbi, 1, gc_type);
i_gc_rwsem[WRITE] and i_gc_rwsem[READ] lock order is reversed in gc_data_segment() and f2fs_dio_write_iter(), fix to keep consistent lock order as below: 1. lock i_gc_rwsem[WRITE] 2. lock i_gc_rwsem[READ] Signed-off-by: Chao Yu <chao@kernel.org> --- fs/f2fs/gc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)