return ret;
 
        ceph_fscache_invalidate(inode, false);
-       ret = invalidate_inode_pages2_range(inode->i_mapping,
-                                           pos >> PAGE_SHIFT,
-                                           (pos + count - 1) >> PAGE_SHIFT);
-       if (ret < 0)
-               dout("invalidate_inode_pages2_range returned %d\n", ret);
 
        while ((len = iov_iter_count(from)) > 0) {
                size_t left;
                }
 
                ceph_clear_error_write(ci);
+
+               /*
+                * We successfully wrote to a range of the file. Declare
+                * that region of the pagecache invalid.
+                */
+               ret = invalidate_inode_pages2_range(
+                               inode->i_mapping,
+                               pos >> PAGE_SHIFT,
+                               (pos + len - 1) >> PAGE_SHIFT);
+               if (ret < 0) {
+                       dout("invalidate_inode_pages2_range returned %d\n",
+                            ret);
+                       ret = 0;
+               }
                pos += len;
                written += len;
                dout("sync_write written %d\n", written);