This adds small optimization for tx path: instead of allocating single skbuff on every call to transport, allocate multiple skbuff's until credit space allows, thus trying to send as much as possible data without return to af_vsock.c. Also this patchset includes second patch which adds check and return from 'virtio_transport_get_credit()' and 'virtio_transport_put_credit()' when these functions are called with 0 argument. This is needed, because zero argument makes both functions to behave as no-effect, but both of them always tries to acquire spinlock. Moreover, first patch always calls function 'virtio_transport_put_credit()' with zero argument in case of successful packet transmission. Link to v1: https://lore.kernel.org/netdev/2c52aa26-8181-d37a-bccd-a86bd3cbc6e1@xxxxxxxxxxxxxx/ Link to v2: https://lore.kernel.org/netdev/ea5725eb-6cb5-cf15-2938-34e335a442fa@xxxxxxxxxxxxxx/ Link to v3: https://lore.kernel.org/netdev/f33ef593-982e-2b3f-0986-6d537a3aaf08@xxxxxxxxxxxxxx/ Link to v4: https://lore.kernel.org/netdev/0e0c1421-7cdc-2582-b120-cad6f42824bb@xxxxxxxxxxxxxx/ Changelog: v1 -> v2: - If sent something, return number of bytes sent (even in case of error). Return error only if failed to sent first skbuff. v2 -> v3: - Handle case when transport callback returns unexpected value which is not equal to 'skb->len'. Break loop. - Don't check for zero value of 'rest_len' before calling 'virtio_transport_put_credit()'. Decided to add this check directly to 'virtio_transport_put_credit()' in separate patch. v3 -> v4: - Use WARN_ONCE() to handle case when transport callback returns unexpected value. - Remove useless 'ret = -EFAULT;' assignment for case above. v4 -> v5: - Remove extra 'ret' initialization. - Remove empty extra line before 'if (ret < 0)'. - Add R-b tag for the first patch. - Add second patch, thus creating patchset of 2 patches. Arseniy Krasnov (2): virtio/vsock: allocate multiple skbuffs on tx virtio/vsock: check argument to avoid no effect call net/vmw_vsock/virtio_transport_common.c | 63 +++++++++++++++++++------ 1 file changed, 49 insertions(+), 14 deletions(-) -- 2.25.1