mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
f2fs: return immediately after submitting the specified folio in __submit_merged_write_cond
f2fs_folio_wait_writeback ensures the folio write is submitted to the block layer via __submit_merged_write_cond, then waits for the folio to complete. Other I/O submissions are irrelevant to f2fs_folio_wait_writeback. Thus, if the folio write bio is already submitted, the function can return immediately. This patch adds a writeback parameter to __submit_merged_write_cond(), which signals an immediate return after submitting the target folio, and waitting writeback can use this parameter. Signed-off-by: Yongpeng Yang <yangyongpeng@xiaomi.com> Reviewed-by: Chao Yu <chao@kernel.org> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
86c1cf0578
commit
db1a8a7813
|
|
@ -664,7 +664,7 @@ static void __f2fs_submit_merged_write(struct f2fs_sb_info *sbi,
|
|||
|
||||
static void __submit_merged_write_cond(struct f2fs_sb_info *sbi,
|
||||
struct inode *inode, struct folio *folio,
|
||||
nid_t ino, enum page_type type)
|
||||
nid_t ino, enum page_type type, bool writeback)
|
||||
{
|
||||
enum temp_type temp;
|
||||
bool ret = true;
|
||||
|
|
@ -679,8 +679,16 @@ static void __submit_merged_write_cond(struct f2fs_sb_info *sbi,
|
|||
ret = __has_merged_page(io->bio, inode, folio, ino);
|
||||
f2fs_up_read(&io->io_rwsem);
|
||||
}
|
||||
if (ret)
|
||||
if (ret) {
|
||||
__f2fs_submit_merged_write(sbi, type, temp);
|
||||
/*
|
||||
* For waitting writebck case, if the bio owned by the
|
||||
* folio is already submitted, we do not need to submit
|
||||
* other types of bios.
|
||||
*/
|
||||
if (writeback)
|
||||
break;
|
||||
}
|
||||
|
||||
/* TODO: use HOT temp only for meta pages now. */
|
||||
if (type >= META)
|
||||
|
|
@ -690,14 +698,20 @@ static void __submit_merged_write_cond(struct f2fs_sb_info *sbi,
|
|||
|
||||
void f2fs_submit_merged_write(struct f2fs_sb_info *sbi, enum page_type type)
|
||||
{
|
||||
__submit_merged_write_cond(sbi, NULL, NULL, 0, type);
|
||||
__submit_merged_write_cond(sbi, NULL, NULL, 0, type, false);
|
||||
}
|
||||
|
||||
void f2fs_submit_merged_write_cond(struct f2fs_sb_info *sbi,
|
||||
struct inode *inode, struct folio *folio,
|
||||
nid_t ino, enum page_type type)
|
||||
{
|
||||
__submit_merged_write_cond(sbi, inode, folio, ino, type);
|
||||
__submit_merged_write_cond(sbi, inode, folio, ino, type, false);
|
||||
}
|
||||
|
||||
void f2fs_submit_merged_write_folio(struct f2fs_sb_info *sbi,
|
||||
struct folio *folio, enum page_type type)
|
||||
{
|
||||
__submit_merged_write_cond(sbi, NULL, folio, 0, type, true);
|
||||
}
|
||||
|
||||
void f2fs_flush_merged_writes(struct f2fs_sb_info *sbi)
|
||||
|
|
|
|||
|
|
@ -4052,6 +4052,8 @@ void f2fs_submit_merged_write(struct f2fs_sb_info *sbi, enum page_type type);
|
|||
void f2fs_submit_merged_write_cond(struct f2fs_sb_info *sbi,
|
||||
struct inode *inode, struct folio *folio,
|
||||
nid_t ino, enum page_type type);
|
||||
void f2fs_submit_merged_write_folio(struct f2fs_sb_info *sbi,
|
||||
struct folio *folio, enum page_type type);
|
||||
void f2fs_submit_merged_ipu_write(struct f2fs_sb_info *sbi,
|
||||
struct bio **bio, struct folio *folio);
|
||||
void f2fs_flush_merged_writes(struct f2fs_sb_info *sbi);
|
||||
|
|
|
|||
|
|
@ -4240,7 +4240,7 @@ void f2fs_folio_wait_writeback(struct folio *folio, enum page_type type,
|
|||
struct f2fs_sb_info *sbi = F2FS_F_SB(folio);
|
||||
|
||||
/* submit cached LFS IO */
|
||||
f2fs_submit_merged_write_cond(sbi, NULL, folio, 0, type);
|
||||
f2fs_submit_merged_write_folio(sbi, folio, type);
|
||||
/* submit cached IPU IO */
|
||||
f2fs_submit_merged_ipu_write(sbi, NULL, folio);
|
||||
if (ordered) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user