Messages in this thread | | | Subject | Re: [RFC PATCH V2 5/5] vhost: access vq metadata through kernel virtual address | From | Jason Wang <> | Date | Fri, 8 Mar 2019 16:31:29 +0800 |
| |
On 2019/3/7 下午11:34, Michael S. Tsirkin wrote: > On Thu, Mar 07, 2019 at 10:45:57AM +0800, Jason Wang wrote: >> On 2019/3/7 上午12:31, Michael S. Tsirkin wrote: >>>> +static void vhost_set_vmap_dirty(struct vhost_vmap *used) >>>> +{ >>>> + int i; >>>> + >>>> + for (i = 0; i < used->npages; i++) >>>> + set_page_dirty_lock(used->pages[i]); >>> This seems to rely on page lock to mark page dirty. >>> >>> Could it happen that page writeback will check the >>> page, find it clean, and then you mark it dirty and then >>> invalidate callback is called? >>> >>> >> Yes. But does this break anything? >> The page is still there, we just remove a >> kernel mapping to it. >> >> Thanks > Yes it's the same problem as e.g. RDMA: > we've just marked the page as dirty without having buffers. > Eventually writeback will find it and filesystem will complain... > So if the pages are backed by a non-RAM-based filesystem, it’s all just broken.
Yes, we can't depend on the pages that might have been invalidated. As suggested, the only suitable place is the MMU notifier callbacks.
Thanks
> one can hope that RDMA guys will fix it in some way eventually. > For now, maybe add a flag in e.g. VMA that says that there's no > writeback so it's safe to mark page dirty at any point? > > > > >
| |