From: Wengang Wang Date: Tue, 23 Jan 2018 17:17:39 +0000 (-0800) Subject: fs/ocfs2: remove page cache for converted direct write X-Git-Tag: v4.1.12-124.31.3~1247 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=cc99aac46a38e5bd04f3c4ee7973a0f4523351fc;p=users%2Fjedix%2Flinux-maple.git fs/ocfs2: remove page cache for converted direct write Remove the page cache range for the writes converted from direct IO to buffered IO. orabug: 27431376 Signed-off-by: Wengang Wang Reviewed-by: Junxiao Bi Reviewed-by: Ashish Samant --- diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index 53e71d2e0958..52b36b44ac89 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c @@ -2322,7 +2322,7 @@ static ssize_t ocfs2_file_write_iter(struct kiocb *iocb, ssize_t written = 0; ssize_t ret; size_t count = iov_iter_count(from), orig_count; - loff_t old_size; + loff_t old_size, orig_pos; u32 old_clusters; struct file *file = iocb->ki_filp; struct inode *inode = file_inode(file); @@ -2343,6 +2343,7 @@ static ssize_t ocfs2_file_write_iter(struct kiocb *iocb, appending = iocb->ki_flags & IOCB_APPEND ? 1 : 0; direct_io = iocb->ki_flags & IOCB_DIRECT ? 1 : 0; + orig_pos = iocb->ki_pos; mutex_lock(&inode->i_mutex); @@ -2526,6 +2527,13 @@ out_sems: if (have_alloc_sem) ocfs2_iocb_clear_sem_locked(iocb); + if (dropped_dio) { + loff_t end = orig_pos + orig_count - 1; + + invalidate_inode_pages2_range(file->f_mapping, + orig_pos >> PAGE_CACHE_SHIFT, + end >> PAGE_CACHE_SHIFT); + } mutex_unlock(&inode->i_mutex); if (written)