|
@@ -2129,13 +2129,20 @@ generic_file_direct_write(struct kiocb *iocb, const struct iovec *iov,
|
|
|
* After a write we want buffered reads to be sure to go to disk to get
|
|
|
* the new data. We invalidate clean cached page from the region we're
|
|
|
* about to write. We do this *before* the write so that we can return
|
|
|
- * -EIO without clobbering -EIOCBQUEUED from ->direct_IO().
|
|
|
+ * without clobbering -EIOCBQUEUED from ->direct_IO().
|
|
|
*/
|
|
|
if (mapping->nrpages) {
|
|
|
written = invalidate_inode_pages2_range(mapping,
|
|
|
pos >> PAGE_CACHE_SHIFT, end);
|
|
|
- if (written)
|
|
|
+ /*
|
|
|
+ * If a page can not be invalidated, return 0 to fall back
|
|
|
+ * to buffered write.
|
|
|
+ */
|
|
|
+ if (written) {
|
|
|
+ if (written == -EBUSY)
|
|
|
+ return 0;
|
|
|
goto out;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
written = mapping->a_ops->direct_IO(WRITE, iocb, iov, pos, *nr_segs);
|