From patchwork Thu Feb 18 20:59:11 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sridhar Samudrala X-Patchwork-Id: 45808 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 7DA9FB7E23 for ; Fri, 19 Feb 2010 07:59:29 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751859Ab0BRU7Y (ORCPT ); Thu, 18 Feb 2010 15:59:24 -0500 Received: from e8.ny.us.ibm.com ([32.97.182.138]:42133 "EHLO e8.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750999Ab0BRU7X (ORCPT ); Thu, 18 Feb 2010 15:59:23 -0500 Received: from d01relay03.pok.ibm.com (d01relay03.pok.ibm.com [9.56.227.235]) by e8.ny.us.ibm.com (8.14.3/8.13.1) with ESMTP id o1IKq0tL008295 for ; Thu, 18 Feb 2010 15:52:00 -0500 Received: from d03av05.boulder.ibm.com (d03av05.boulder.ibm.com [9.17.195.85]) by d01relay03.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o1IKxMUT107724 for ; Thu, 18 Feb 2010 15:59:22 -0500 Received: from d03av05.boulder.ibm.com (loopback [127.0.0.1]) by d03av05.boulder.ibm.com (8.14.3/8.13.1/NCO v10.0 AVout) with ESMTP id o1IKxCcd026964 for ; Thu, 18 Feb 2010 13:59:13 -0700 Received: from [9.47.18.19] (w-sridhar.beaverton.ibm.com [9.47.18.19]) by d03av05.boulder.ibm.com (8.14.3/8.13.1/NCO v10.0 AVin) with ESMTP id o1IKxBkF026925; Thu, 18 Feb 2010 13:59:11 -0700 Subject: [PATCH net-next-2.6] vhost: Restart tx poll when socket send queue is full From: Sridhar Samudrala To: "Michael S. Tsirkin" , David Miller Cc: netdev Date: Thu, 18 Feb 2010 12:59:11 -0800 Message-Id: <1266526751.15681.71.camel@w-sridhar.beaverton.ibm.com> Mime-Version: 1.0 X-Mailer: Evolution 2.26.3 (2.26.3-1.fc11) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When running guest to remote host TCP stream test using vhost-net via tap/macvtap, i am seeing network transmit hangs. This happens when handle_tx() returns because of the socket send queue full condition. This patch fixes this by restarting tx poll when hitting this condition. Signed-off-by: Sridhar Samudrala --- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c index 91a324c..82d4bbe 100644 --- a/drivers/vhost/net.c +++ b/drivers/vhost/net.c @@ -113,12 +113,16 @@ static void handle_tx(struct vhost_net *net) if (!sock) return; - wmem = atomic_read(&sock->sk->sk_wmem_alloc); - if (wmem >= sock->sk->sk_sndbuf) - return; - use_mm(net->dev.mm); mutex_lock(&vq->mutex); + + wmem = atomic_read(&sock->sk->sk_wmem_alloc); + if (wmem >= sock->sk->sk_sndbuf) { + tx_poll_start(net, sock); + set_bit(SOCK_ASYNC_NOSPACE, &sock->flags); + goto unlock; + } + vhost_disable_notify(vq); if (wmem < sock->sk->sk_sndbuf * 2) @@ -178,6 +182,7 @@ static void handle_tx(struct vhost_net *net) } } +unlock: mutex_unlock(&vq->mutex); unuse_mm(net->dev.mm); }