if (ret)
                goto out_free_dio;
 
-       /*
-        * Try to invalidate cache pages for the range we're direct
-        * writing.  If this invalidation fails, tough, the write will
-        * still work, but racing two incompatible write paths is a
-        * pretty crazy thing to do, so we don't support it 100%.
-        */
-       ret = invalidate_inode_pages2_range(mapping,
-                       pos >> PAGE_SHIFT, end >> PAGE_SHIFT);
-       if (ret)
-               dio_warn_stale_pagecache(iocb->ki_filp);
-       ret = 0;
+       if (iov_iter_rw(iter) == WRITE) {
+               /*
+                * Try to invalidate cache pages for the range we are writing.
+                * If this invalidation fails, tough, the write will still work,
+                * but racing two incompatible write paths is a pretty crazy
+                * thing to do, so we don't support it 100%.
+                */
+               if (invalidate_inode_pages2_range(mapping, pos >> PAGE_SHIFT,
+                               end >> PAGE_SHIFT))
+                       dio_warn_stale_pagecache(iocb->ki_filp);
 
-       if (iov_iter_rw(iter) == WRITE && !wait_for_completion &&
-           !inode->i_sb->s_dio_done_wq) {
-               ret = sb_init_dio_done_wq(inode->i_sb);
-               if (ret < 0)
-                       goto out_free_dio;
+               if (!wait_for_completion && !inode->i_sb->s_dio_done_wq) {
+                       ret = sb_init_dio_done_wq(inode->i_sb);
+                       if (ret < 0)
+                               goto out_free_dio;
+               }
        }
 
        inode_dio_begin(inode);