On 02/06/2024 1:34, Jakub Kicinski wrote:
On Thu, 30 May 2024 17:24:10 +0300 Ofir Gal wrote:
skbuff: before sendpage_ok - i: 0. page: 0x654eccd7 (pfn: 120755)
skbuff: before sendpage_ok - i: 1. page: 0x1666a4da (pfn: 120756)
skbuff: before sendpage_ok - i: 2. page: 0x54f9f140 (pfn: 120757)
noob question, how do you get 3 contiguous pages, the third of which
is slab? is_slab doesn't mean what I think it does, or we got extremely
lucky with kmalloc?
The contig range according to the trace is 256K, the third page was just the
first time that it saw this !ok page.
I asked the same thing. nvme-tcp gets a bio and sets up its own iov_iter
on the bio bvec for sending it over the wire. The test that reproduces this
creates an raid1 md device which probably has at least some effect into how
we got this buffer.
With the recent multipage bvecs work from Ming, nvme-tcp bvec entries will
often point to contiguous ranges that are > PAGE_SIZE. I didn't look
into the
implementation of skb_splice_from_iter, but I think its not very
efficient to
extract a contiguous range in PAGE_SIZE granular vector...