diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-09-28 16:27:23 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-09-28 16:27:23 -0400 |
commit | 02a2b05395dde2f49e7777b67b51a5fbc6606943 (patch) | |
tree | 5d1aceee6e5a987772db092b27c49be67360fdb0 /fs/iomap.c | |
parent | e49aa15ef6c179f69e5578a271801f31a09e9a3f (diff) | |
parent | 5e5c943c1f257c2b3424fc3f8a7b18570152dab3 (diff) |
Merge tag 'xfs-4.14-fixes-2' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux
Pull xfs fixes from Darrick Wong:
- fix various problems with the copy-on-write extent maps getting freed
at the wrong time
- fix printk format specifier problems
- report zeroing operation outcomes instead of dropping them on the
floor
- fix some crashes when dio operations partially fail
- fix a race condition between unwritten extent conversion & dio read
- fix some incorrect tests in the inode log item processing
- correct the delayed allocation space reservations on rmap filesystems
- fix some problems checking for dax support
* tag 'xfs-4.14-fixes-2' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux:
xfs: revert "xfs: factor rmap btree size into the indlen calculations"
xfs: Capture state of the right inode in xfs_iflush_done
xfs: perag initialization should only touch m_ag_max_usable for AG 0
xfs: update i_size after unwritten conversion in dio completion
iomap_dio_rw: Allocate AIO completion queue before submitting dio
xfs: validate bdev support for DAX inode flag
xfs: remove redundant re-initialization of total_nr_pages
xfs: Output warning message when discard option was enabled even though the device does not support discard
xfs: report zeroed or not correctly in xfs_zero_range()
xfs: kill meaningless variable 'zero'
fs/xfs: Use %pS printk format for direct addresses
xfs: evict CoW fork extents when performing finsert/fcollapse
xfs: don't unconditionally clear the reflink flag on zero-block files
Diffstat (limited to 'fs/iomap.c')
-rw-r--r-- | fs/iomap.c | 14 |
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; |