On Wed, Jun 26, 2019 at 10:47:57AM +0900, Damien Le Moal wrote:
> @@ -1501,9 +1502,14 @@ struct bio *bio_map_kern(struct request_queue *q, void 
> *data, unsigned int len,
>       unsigned long end = (kaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
>       unsigned long start = kaddr >> PAGE_SHIFT;
>       const int nr_pages = end - start;
> +     bool is_vmalloc = is_vmalloc_addr(data);
> +     struct page *page;
>       int offset, i;
>       struct bio *bio;
>  
> +     if (is_vmalloc)
> +             invalidate_kernel_vmap_range(data, len);

That is not correct.

The submission path needs an unconditional flush_kernel_vmap_range call,
and the read completion path will additionally need the
invalidate_kernel_vmap_range call.

Reply via email to