summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2018-05-24 01:36:45 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2018-06-01 17:28:35 -0400
commitc6c26694cdf686320a2f2688a93d98d21b4b35b4 (patch)
tree41410b05a6e4e08e1df3d135ae4c1023089d70a9
parent8ed1609cb5a78662480c6678bdb9af8e2de6daec (diff)
bcachefs: fix dio write when faulting in from file we're writing to
-rw-r--r--fs/bcachefs/fs-io.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/bcachefs/fs-io.c b/fs/bcachefs/fs-io.c
index d4385ca5acde..fe1330e6bd87 100644
--- a/fs/bcachefs/fs-io.c
+++ b/fs/bcachefs/fs-io.c
@@ -1827,6 +1827,13 @@ static long bch2_dio_write_loop(struct dio_write *dio)
if (unlikely(ret < 0))
goto err;
+ /* gup might have faulted pages back in: */
+ ret = write_invalidate_inode_pages_range(mapping,
+ req->ki_pos + (dio->iop.op.written << 9),
+ req->ki_pos + iov_iter_count(&dio->iter) - 1);
+ if (unlikely(ret))
+ goto err;
+
dio->iop.op.pos = POS(inode->v.i_ino,
(req->ki_pos >> 9) + dio->iop.op.written);