On 2020/8/22 05:14, David Miller wrote: > From: Christoph Hellwig <h...@lst.de> > Date: Thu, 20 Aug 2020 06:37:44 +0200 > >> If you look at who uses sendpage outside the networking layer itself >> you see that it is basically block driver and file systems. These >> have no way to control what memory they get passed and have to deal >> with everything someone throws at them. > > I see nvme doing virt_to_page() on several things when it calls into > kernel_sendpage(). > > This is the kind of stuff I want cleaned up, and which your patch > will not trap nor address. > > In nvme it sometimes seems to check for sendpage validity: > > /* can't zcopy slab pages */ > if (unlikely(PageSlab(page))) { > ret = sock_no_sendpage(queue->sock, page, offset, len, > flags); > } else { > ret = kernel_sendpage(queue->sock, page, offset, len, > flags); > } > > Yet elsewhere does not and just blindly calls: > > ret = kernel_sendpage(queue->sock, virt_to_page(pdu), > offset_in_page(pdu) + req->offset, len, flags); > > This pdu seems to come from a page frag allocation. > > That's the target side. On the host side: > > ret = kernel_sendpage(cmd->queue->sock, page, cmd->offset, > left, flags); > > No page slab check or anything like that. > > I'm hesitent to put in the kernel_sendpage() patch, becuase it provides a > disincentive to fix up code like this. >
Hi David and Christoph, It has been quiet for a while, what should we go next for the kernel_sendpage() related issue ? Will Christoph's or my series be considered as proper fix, or maybe I should wait for some other better idea to show up? Any is OK for me, once the problem is fixed. Thanks in advance. Coly Li