Skip to content

Commit 6fd257c

Browse files
chaseyuJaegeuk Kim
authored andcommitted
f2fs: fix to keep consistent i_gc_rwsem lock order
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> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
1 parent c9b3649 commit 6fd257c

1 file changed

Lines changed: 4 additions & 4 deletions

File tree

fs/f2fs/gc.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1616,14 +1616,14 @@ static int gc_data_segment(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
16161616
int err;
16171617

16181618
if (S_ISREG(inode->i_mode)) {
1619-
if (!f2fs_down_write_trylock(&fi->i_gc_rwsem[READ])) {
1619+
if (!f2fs_down_write_trylock(&fi->i_gc_rwsem[WRITE])) {
16201620
sbi->skipped_gc_rwsem++;
16211621
continue;
16221622
}
16231623
if (!f2fs_down_write_trylock(
1624-
&fi->i_gc_rwsem[WRITE])) {
1624+
&fi->i_gc_rwsem[READ])) {
16251625
sbi->skipped_gc_rwsem++;
1626-
f2fs_up_write(&fi->i_gc_rwsem[READ]);
1626+
f2fs_up_write(&fi->i_gc_rwsem[WRITE]);
16271627
continue;
16281628
}
16291629
locked = true;
@@ -1646,8 +1646,8 @@ static int gc_data_segment(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
16461646
submitted++;
16471647

16481648
if (locked) {
1649-
f2fs_up_write(&fi->i_gc_rwsem[WRITE]);
16501649
f2fs_up_write(&fi->i_gc_rwsem[READ]);
1650+
f2fs_up_write(&fi->i_gc_rwsem[WRITE]);
16511651
}
16521652

16531653
stat_inc_data_blk_count(sbi, 1, gc_type);

0 commit comments

Comments
 (0)