mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 13:14:07 +08:00
f2fs: fix wrong alloc_type in f2fs_do_replace_block
If the alloc_type of the original curseg is LFS, when we change_curseg and then do recover curseg, the alloc_type becomes SSR. Signed-off-by: Wang Xiaojun <wangxiaojun11@huawei.com> Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
e8bf1f522a
commit
753a8ed0ae
@ -3572,6 +3572,7 @@ void f2fs_do_replace_block(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
|
|||||||
struct seg_entry *se;
|
struct seg_entry *se;
|
||||||
int type;
|
int type;
|
||||||
unsigned short old_blkoff;
|
unsigned short old_blkoff;
|
||||||
|
unsigned char old_alloc_type;
|
||||||
|
|
||||||
segno = GET_SEGNO(sbi, new_blkaddr);
|
segno = GET_SEGNO(sbi, new_blkaddr);
|
||||||
se = get_seg_entry(sbi, segno);
|
se = get_seg_entry(sbi, segno);
|
||||||
@ -3605,6 +3606,7 @@ void f2fs_do_replace_block(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
|
|||||||
|
|
||||||
old_cursegno = curseg->segno;
|
old_cursegno = curseg->segno;
|
||||||
old_blkoff = curseg->next_blkoff;
|
old_blkoff = curseg->next_blkoff;
|
||||||
|
old_alloc_type = curseg->alloc_type;
|
||||||
|
|
||||||
/* change the current segment */
|
/* change the current segment */
|
||||||
if (segno != curseg->segno) {
|
if (segno != curseg->segno) {
|
||||||
@ -3639,6 +3641,7 @@ void f2fs_do_replace_block(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
|
|||||||
change_curseg(sbi, type, true);
|
change_curseg(sbi, type, true);
|
||||||
}
|
}
|
||||||
curseg->next_blkoff = old_blkoff;
|
curseg->next_blkoff = old_blkoff;
|
||||||
|
curseg->alloc_type = old_alloc_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
up_write(&sit_i->sentry_lock);
|
up_write(&sit_i->sentry_lock);
|
||||||
|
Loading…
Reference in New Issue
Block a user