tests/generic/405 of fstest suit expects that mkfs will return error when it hits EIO, so let's propagate error from f2fs_{finalize,fsync}_device, then mkfs can be aware of fsync error.
Signed-off-by: Chao Yu <yuch...@huawei.com> --- fsck/main.c | 4 +++- fsck/mount.c | 3 ++- include/f2fs_fs.h | 4 ++-- lib/libf2fs_io.c | 24 ++++++++++++++++++------ mkfs/f2fs_format_main.c | 3 ++- 5 files changed, 27 insertions(+), 11 deletions(-) diff --git a/fsck/main.c b/fsck/main.c index b62fc29e027a..543c10f66406 100644 --- a/fsck/main.c +++ b/fsck/main.c @@ -676,7 +676,9 @@ retry: goto fsck_again; } } - f2fs_finalize_device(); + ret = f2fs_finalize_device(); + if (ret < 0) + return ret; printf("\nDone.\n"); return 0; diff --git a/fsck/mount.c b/fsck/mount.c index 4ad22a136ca9..3efa29813853 100644 --- a/fsck/mount.c +++ b/fsck/mount.c @@ -2098,7 +2098,8 @@ void write_checkpoint(struct f2fs_sb_info *sbi) write_nat_bits(sbi, sb, cp, sbi->cur_cp); /* in case of sudden power off */ - f2fs_fsync_device(); + ret = f2fs_fsync_device(); + ASSERT(ret >= 0); /* write the last cp */ ret = dev_write_block(cp, cp_blk_no++); diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h index 05b893a24b66..5a59a7097af6 100644 --- a/include/f2fs_fs.h +++ b/include/f2fs_fs.h @@ -1056,8 +1056,8 @@ extern int f2fs_devs_are_umounted(void); extern int f2fs_dev_is_umounted(char *); extern int f2fs_get_device_info(void); extern int get_device_info(int); -extern void f2fs_finalize_device(void); -extern void f2fs_fsync_device(void); +extern int f2fs_finalize_device(void); +extern int f2fs_fsync_device(void); extern int dev_read(void *, __u64, size_t); extern int dev_write(void *, __u64, size_t); diff --git a/lib/libf2fs_io.c b/lib/libf2fs_io.c index 268dcfae490e..72898b381fcf 100644 --- a/lib/libf2fs_io.c +++ b/lib/libf2fs_io.c @@ -213,19 +213,23 @@ int dev_reada_block(__u64 blk_addr) return dev_readahead(blk_addr << F2FS_BLKSIZE_BITS, F2FS_BLKSIZE); } -void f2fs_fsync_device(void) +int f2fs_fsync_device(void) { int i; for (i = 0; i < c.ndevs; i++) { - if (fsync(c.devices[i].fd) < 0) + if (fsync(c.devices[i].fd) < 0) { MSG(0, "\tError: Could not conduct fsync!!!\n"); + return -1; + } } + + return 0; } -void f2fs_finalize_device(void) +int f2fs_finalize_device(void) { - int i; + int i, ret; #ifdef WITH_ANDROID if (c.sparse_mode) { @@ -246,11 +250,19 @@ void f2fs_finalize_device(void) * in the block device page cache. */ for (i = 0; i < c.ndevs; i++) { - if (fsync(c.devices[i].fd) < 0) + ret = fsync(c.devices[i].fd); + if (ret < 0) { MSG(0, "\tError: Could not conduct fsync!!!\n"); + break; + } - if (close(c.devices[i].fd) < 0) + ret = close(c.devices[i].fd); + if (ret < 0) { MSG(0, "\tError: Failed to close device file!!!\n"); + break; + } } close(c.kd); + + return ret; } diff --git a/mkfs/f2fs_format_main.c b/mkfs/f2fs_format_main.c index e61c066a3f3a..691d3863a6c8 100644 --- a/mkfs/f2fs_format_main.c +++ b/mkfs/f2fs_format_main.c @@ -333,7 +333,8 @@ int main(int argc, char *argv[]) if (f2fs_format_device() < 0) return -1; - f2fs_finalize_device(); + if (f2fs_finalize_device() < 0) + return -1; MSG(0, "Info: format successful\n"); -- 2.15.0.55.gc2ece9dc4de6 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel