Patch "vhost/vsock: Use kvmalloc/kvfree for larger packets." has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    vhost/vsock: Use kvmalloc/kvfree for larger packets.

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     vhost-vsock-use-kvmalloc-kvfree-for-larger-packets.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit eb6ea04e2995d054b19046947be2d3a0b581f365
Author: Junichi Uekawa <uekawa@xxxxxxxxxxxx>
Date:   Wed Sep 28 15:45:38 2022 +0900

    vhost/vsock: Use kvmalloc/kvfree for larger packets.
    
    [ Upstream commit 0e3f72931fc47bb81686020cc643cde5d9cd0bb8 ]
    
    When copying a large file over sftp over vsock, data size is usually 32kB,
    and kmalloc seems to fail to try to allocate 32 32kB regions.
    
     vhost-5837: page allocation failure: order:4, mode:0x24040c0
     Call Trace:
      [<ffffffffb6a0df64>] dump_stack+0x97/0xdb
      [<ffffffffb68d6aed>] warn_alloc_failed+0x10f/0x138
      [<ffffffffb68d868a>] ? __alloc_pages_direct_compact+0x38/0xc8
      [<ffffffffb664619f>] __alloc_pages_nodemask+0x84c/0x90d
      [<ffffffffb6646e56>] alloc_kmem_pages+0x17/0x19
      [<ffffffffb6653a26>] kmalloc_order_trace+0x2b/0xdb
      [<ffffffffb66682f3>] __kmalloc+0x177/0x1f7
      [<ffffffffb66e0d94>] ? copy_from_iter+0x8d/0x31d
      [<ffffffffc0689ab7>] vhost_vsock_handle_tx_kick+0x1fa/0x301 [vhost_vsock]
      [<ffffffffc06828d9>] vhost_worker+0xf7/0x157 [vhost]
      [<ffffffffb683ddce>] kthread+0xfd/0x105
      [<ffffffffc06827e2>] ? vhost_dev_set_owner+0x22e/0x22e [vhost]
      [<ffffffffb683dcd1>] ? flush_kthread_worker+0xf3/0xf3
      [<ffffffffb6eb332e>] ret_from_fork+0x4e/0x80
      [<ffffffffb683dcd1>] ? flush_kthread_worker+0xf3/0xf3
    
    Work around by doing kvmalloc instead.
    
    Fixes: 433fc58e6bf2 ("VSOCK: Introduce vhost_vsock.ko")
    Signed-off-by: Junichi Uekawa <uekawa@xxxxxxxxxxxx>
    Reviewed-by: Stefano Garzarella <sgarzare@xxxxxxxxxx>
    Acked-by: Michael S. Tsirkin <mst@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20220928064538.667678-1-uekawa@xxxxxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c
index dcb1585819a1..97bfe499222b 100644
--- a/drivers/vhost/vsock.c
+++ b/drivers/vhost/vsock.c
@@ -393,7 +393,7 @@ vhost_vsock_alloc_pkt(struct vhost_virtqueue *vq,
 		return NULL;
 	}
 
-	pkt->buf = kmalloc(pkt->len, GFP_KERNEL);
+	pkt->buf = kvmalloc(pkt->len, GFP_KERNEL);
 	if (!pkt->buf) {
 		kfree(pkt);
 		return NULL;
diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index ec2c2afbf0d0..3a12aee33e92 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -1342,7 +1342,7 @@ EXPORT_SYMBOL_GPL(virtio_transport_recv_pkt);
 
 void virtio_transport_free_pkt(struct virtio_vsock_pkt *pkt)
 {
-	kfree(pkt->buf);
+	kvfree(pkt->buf);
 	kfree(pkt);
 }
 EXPORT_SYMBOL_GPL(virtio_transport_free_pkt);



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux