On Sat 02-11-19 16:12:58, Konstantin Khlebnikov wrote: > Function generic_file_direct_write() invalidates cache at entry. Second > time this should be done when request completes. But this function calls > second invalidation at exit unconditionally even for async requests. > > This patch skips second invalidation for async requests (-EIOCBQUEUED). > > Signed-off-by: Konstantin Khlebnikov <khlebnikov@xxxxxxxxxxxxxx> Looks good to me. You can add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > mm/filemap.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/mm/filemap.c b/mm/filemap.c > index 85b7d087eb45..288e38199068 100644 > --- a/mm/filemap.c > +++ b/mm/filemap.c > @@ -3218,9 +3218,11 @@ generic_file_direct_write(struct kiocb *iocb, struct iov_iter *from) > * Most of the time we do not need this since dio_complete() will do > * the invalidation for us. However there are some file systems that > * do not end up with dio_complete() being called, so let's not break > - * them by removing it completely > + * them by removing it completely. > + * > + * Skip invalidation for async writes or if mapping has no pages. > */ > - if (mapping->nrpages) > + if (written > 0 && mapping->nrpages) > invalidate_inode_pages2_range(mapping, > pos >> PAGE_SHIFT, end); > > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR