mirror of https://gitee.com/openkylin/linux.git
f2fs: report unwritten status in fsync_node_pages
The fsync_node_pages should return pass or failure so that user could know fsync is completed or not. Acked-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
5268137564
commit
c267ec1526
|
@ -256,7 +256,9 @@ int f2fs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
|
|||
goto out;
|
||||
}
|
||||
sync_nodes:
|
||||
fsync_node_pages(sbi, ino, &wbc);
|
||||
ret = fsync_node_pages(sbi, ino, &wbc);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
/* if cp_error was enabled, we should avoid infinite loop */
|
||||
if (unlikely(f2fs_cp_error(sbi))) {
|
||||
|
|
|
@ -1227,7 +1227,7 @@ int fsync_node_pages(struct f2fs_sb_info *sbi, nid_t ino,
|
|||
{
|
||||
pgoff_t index, end;
|
||||
struct pagevec pvec;
|
||||
int nwritten = 0;
|
||||
int ret = 0;
|
||||
|
||||
pagevec_init(&pvec, 0);
|
||||
index = 0;
|
||||
|
@ -1278,21 +1278,20 @@ int fsync_node_pages(struct f2fs_sb_info *sbi, nid_t ino,
|
|||
if (IS_INODE(page))
|
||||
set_dentry_mark(page,
|
||||
need_dentry_mark(sbi, ino));
|
||||
nwritten++;
|
||||
|
||||
if (NODE_MAPPING(sbi)->a_ops->writepage(page, wbc))
|
||||
ret = NODE_MAPPING(sbi)->a_ops->writepage(page, wbc);
|
||||
if (ret) {
|
||||
unlock_page(page);
|
||||
|
||||
if (--wbc->nr_to_write == 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
pagevec_release(&pvec);
|
||||
cond_resched();
|
||||
|
||||
if (wbc->nr_to_write == 0)
|
||||
if (ret)
|
||||
break;
|
||||
}
|
||||
return nwritten;
|
||||
return ret ? -EIO: 0;
|
||||
}
|
||||
|
||||
int sync_node_pages(struct f2fs_sb_info *sbi, struct writeback_control *wbc)
|
||||
|
|
Loading…
Reference in New Issue