On Wed, Dec 07, 2016 at 06:00:19PM +0800, Peng Tao wrote: > To allow canceling all packets of a connection. > > Signed-off-by: Peng Tao <bergwolf@xxxxxxxxx> > --- > drivers/vhost/vsock.c | 29 +++++++++++++++++++++++++++++ > include/linux/virtio_vsock.h | 3 +++ > 2 files changed, 32 insertions(+) > > diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c > index a504e2e0..0c23b55 100644 > --- a/drivers/vhost/vsock.c > +++ b/drivers/vhost/vsock.c > @@ -218,6 +218,34 @@ vhost_transport_send_pkt(struct virtio_vsock_pkt *pkt) > return len; > } > > +static int > +vhost_transport_cancel_pkt(struct vsock_sock *vsk) > +{ > + struct vhost_vsock *vsock; > + struct virtio_vsock_pkt *pkt, *n; > + LIST_HEAD(freeme); > + > + /* Find the vhost_vsock according to guest context id */ > + vsock = vhost_vsock_get(vsk->remote_addr.svm_cid); > + if (!vsock) > + return -ENODEV; > + > + spin_lock_bh(&vsock->send_pkt_list_lock); > + list_for_each_entry_safe(pkt, n, &vsock->send_pkt_list, list) { > + if (pkt->vsk != vsk) > + continue; > + list_move(&pkt->list, &freeme); > + } > + spin_unlock_bh(&vsock->send_pkt_list_lock); > + > + list_for_each_entry_safe(pkt, n, &freeme, list) { > + list_del(&pkt->list); > + virtio_transport_free_pkt(pkt); > + } Please handle queued_replies so we can resume rx if we fall below the threshold again.
Attachment:
signature.asc
Description: PGP signature