From: Pavel Tikhomirov <ptikhomi...@virtuozzo.com> Add err3 variable and improve error handling in blkdev_issue_flush path. This ensures that -EIO errors are properly propagated while preserving other error conditions.
Part of rework for ext4_sync_files function. Fixes: 26337aacaafa9 ("ext4: add mfsync support") https://virtuozzo.atlassian.net/browse/VSTOR-107255 Signed-off-by: Pavel Tikhomirov <ptikhomi...@virtuozzo.com> Feature: ext4: optimized sync of a set of files - mfsync() --- fs/ext4/fsync.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c index b77cab6f12c61..aea460d805289 100644 --- a/fs/ext4/fsync.c +++ b/fs/ext4/fsync.c @@ -180,7 +180,8 @@ int ext4_sync_files(struct file **files, unsigned int *flags, unsigned int nr_fi { struct super_block *sb; journal_t *journal; - int err = 0, err2 = 0, i = 0, j = 0; + int err = 0, err2 = 0, err3 = 0; + int i = 0, j = 0; int force_commit = 0; tid_t commit_tid = 0; int need_barrier = 0; @@ -275,8 +276,11 @@ int ext4_sync_files(struct file **files, unsigned int *flags, unsigned int nr_fi * it is already done, but not yet in state where we should * not wait. */ - if (need_barrier) - err2 = blkdev_issue_flush(sb->s_bdev); + if (need_barrier) { + err3 = blkdev_issue_flush(sb->s_bdev); + if (!err2 || err3 == -EIO) + err2 = err3; + } } out: trace_ext4_sync_files_exit(files[0]->f_path.dentry, commit_tid, need_barrier); -- 2.43.0 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel