• Junichi Uekawa's avatar
    vhost/vsock: Use kvmalloc/kvfree for larger packets. · 0e3f7293
    Junichi Uekawa authored
    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: 433fc58e ("VSOCK: Introduce vhost_vsock.ko")
    Signed-off-by: default avatarJunichi Uekawa <uekawa@chromium.org>
    Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
    Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    Link: https://lore.kernel.org/r/20220928064538.667678-1-uekawa@chromium.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    0e3f7293
virtio_transport_common.c 32.1 KB