On Tue, Oct 29, 2024 at 4:47 PM Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx> wrote: > > When the frag just got a page, then may lead to regression on VM. > Specially if the sysctl net.core.high_order_alloc_disable value is 1, > then the frag always get a page when do refill. > > Which could see reliable crashes or scp failure (scp a file 100M in size > to VM). > > The issue is that the virtnet_rq_dma takes up 16 bytes at the beginning > of a new frag. When the frag size is larger than PAGE_SIZE, > everything is fine. However, if the frag is only one page and the > total size of the buffer and virtnet_rq_dma is larger than one page, an > overflow may occur. > > The commit f9dac92ba908 ("virtio_ring: enable premapped mode whatever > use_dma_api") introduced this problem. And we reverted some commits to > fix this in last linux version. Now we try to enable it and fix this > bug directly. > > Here, when the frag size is not enough, we reduce the buffer len to fix > this problem. > > Reported-by: "Si-Wei Liu" <si-wei.liu@xxxxxxxxxx> > Tested-by: Darren Kenny <darren.kenny@xxxxxxxxxx> > Signed-off-by: Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx> Acked-by: Jason Wang <jasowang@xxxxxxxxxx> Thanks