aboutsummaryrefslogtreecommitdiffstats
path: root/fs/iomap.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/iomap.c')
-rw-r--r--fs/iomap.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/fs/iomap.c b/fs/iomap.c
index 8194d30bdca0..be61cf742b5e 100644
--- a/fs/iomap.c
+++ b/fs/iomap.c
@@ -1009,6 +1009,13 @@ iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter,
1009 WARN_ON_ONCE(ret); 1009 WARN_ON_ONCE(ret);
1010 ret = 0; 1010 ret = 0;
1011 1011
1012 if (iov_iter_rw(iter) == WRITE && !is_sync_kiocb(iocb) &&
1013 !inode->i_sb->s_dio_done_wq) {
1014 ret = sb_init_dio_done_wq(inode->i_sb);
1015 if (ret < 0)
1016 goto out_free_dio;
1017 }
1018
1012 inode_dio_begin(inode); 1019 inode_dio_begin(inode);
1013 1020
1014 blk_start_plug(&plug); 1021 blk_start_plug(&plug);
@@ -1031,13 +1038,6 @@ iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter,
1031 if (ret < 0) 1038 if (ret < 0)
1032 iomap_dio_set_error(dio, ret); 1039 iomap_dio_set_error(dio, ret);
1033 1040
1034 if (ret >= 0 && iov_iter_rw(iter) == WRITE && !is_sync_kiocb(iocb) &&
1035 !inode->i_sb->s_dio_done_wq) {
1036 ret = sb_init_dio_done_wq(inode->i_sb);
1037 if (ret < 0)
1038 iomap_dio_set_error(dio, ret);
1039 }
1040
1041 if (!atomic_dec_and_test(&dio->ref)) { 1041 if (!atomic_dec_and_test(&dio->ref)) {
1042 if (!is_sync_kiocb(iocb)) 1042 if (!is_sync_kiocb(iocb))
1043 return -EIOCBQUEUED; 1043 return -EIOCBQUEUED;