diff options
| author | Chao Yu <chao@kernel.org> | 2023-04-10 10:11:40 +0800 | 
|---|---|---|
| committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2023-04-12 20:00:34 -0700 | 
| commit | 6fd257cb35e8478ed551324ccf7c13723e654fcc (patch) | |
| tree | dd60dd85ffdd4e003c29156965b0b746e763a2bd | |
| parent | c9b3649a934d131151111354bcbb638076f03a30 (diff) | |
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>
| -rw-r--r-- | fs/f2fs/gc.c | 8 | 
1 files changed, 4 insertions, 4 deletions
| diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c index 56c53dbe05c9..c748cdfb0501 100644 --- a/fs/f2fs/gc.c +++ b/fs/f2fs/gc.c @@ -1616,14 +1616,14 @@ next_step:  			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 @@ next_step:  				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); | 
