From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-f68.google.com (mail-ed1-f68.google.com [209.85.208.68]) by dpdk.org (Postfix) with ESMTP id C84FA2B83 for ; Fri, 11 Jan 2019 04:13:03 +0100 (CET) Received: by mail-ed1-f68.google.com with SMTP id a20so11919300edc.8 for ; Thu, 10 Jan 2019 19:13:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=Hl6D9IDttYeeN5YsmiUKCKxH/HnPwk0owIUEXMrSmrY=; b=eJByB4J6cFOFF5v9SWCX7SLNP1kseEhWf0QKuzJgGBInQvlAVRRopT3LTvv5MUPsXh pdvdffis8PRuin/d5vYl9y5lg05ZQpGy1Q12SN82w/406Qbsr1yOHI+jtQsfwXEQ5YbX aOnmez9RC2u29n4YFegtjGfb8W8VSW/OHynnqVKg+46jANajWvRnwYoKIgPPnEAl9B5E 8JToTgsLIrMRunJpgfalZEgCz3jthfab5cRFUKnbMkG9sjC+0QaLENmAhZPKLeSdQ0yi x/HhEEnaqVE/ZMdiC1302OYEZ1ITt9sUYqLwUqHflRPaPJzGV432mcRW9EVN2B3bJfIO FDPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Hl6D9IDttYeeN5YsmiUKCKxH/HnPwk0owIUEXMrSmrY=; b=krI82+Wk2Ht3Jw/dMdXuSqH1W3h6RhhwQzakm3q4raCxeME/G4flsMa+49/ezgtUQP we7qm9h3Q4XYkRiosIT5myWQHAsiUzEBq1RlCQcOVo8kiU7+LPSYAL+6zVBBEV5mwnrY U21AUbVgKVOwpIVArYfmJkmS+3rbUsY28TkQBHCkciNb8cZBKZ4CLHNPGJnK2gjXs93u 8SQOOq6OJj2u/eqvRCcsQNNWOdWtaeR1wIHiRxiyeJ4WF9C58yuahG9OErueRYj7sWL0 nQ2rK8sx/ld7kT6zcOPBFlHN/u772htuxWFntBEP1PfawX1GWUpSiY8JQNDSc2SCH1DF xfTw== X-Gm-Message-State: AJcUukcDlVD+Gl6ksZYbJsajGR4dVRCiujQfP5HFKBnSv++8vqdy6WIl CpMO5/MmIRSNBaFO0AfIsFOUwZoanlfdrbqs+Vw= X-Google-Smtp-Source: ALg8bN7Ji6NeDjzanpHa8+/qsTr/TfjFkDrNyLGGCb9b3wlvhax3PVYfSj5Wf6hIdCzZt0/9pV53c7CEBdqnb0Nkq0s= X-Received: by 2002:a50:9f64:: with SMTP id b91mr9611325edf.235.1547176383452; Thu, 10 Jan 2019 19:13:03 -0800 (PST) MIME-Version: 1.0 References: <20190108114509.31489-1-findtheonlyway@gmail.com> In-Reply-To: From: =?UTF-8?B?5a2Z5paH5p2w?= Date: Fri, 11 Jan 2019 11:12:52 +0800 Message-ID: To: Maxime Coquelin Cc: dev@dpdk.org X-Mailman-Approved-At: Sat, 12 Jan 2019 23:18:31 +0100 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [PATCH] vhostuser: fix deadlock when vhost unregister X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Jan 2019 03:13:03 -0000 Will do, thanks! Maxime Coquelin =E4=BA=8E2019=E5=B9=B41=E6=9C= =8810=E6=97=A5=E5=91=A8=E5=9B=9B =E4=B8=8B=E5=8D=8810:48=E5=86=99=E9=81=93= =EF=BC=9A > Hi Sunwenjie, > > Thanks for your patch. > > Please resend with following contribution guidelines, that can be > found in doc/guides/contributing/. > > First, the commit message prefix should be vhost. > For other comments, please see inline: > > > On 1/8/19 12:45 PM, sunwenjie wrote: > > When rte_vhost_driver_unregister delete the connection fd, > fdset_try_del will > > always try and donot release the vhostuser.mutex if the fd is busy, > but the > > fdset_event_dispatch will set the fd to busy and call > vhost_user_msg_handler > > to get vhostuser.mutex, which will cause deadlock. > > > > The commit message should not be indented, and wrapped at 72 chars. > > > To fix it: > > Unlock the vhost_user.mutex if fdset_try_del fail and relock it wh= en > > retry. > > You need to add your Sined-off-by with your full name. > > > --- > > lib/librte_vhost/socket.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/lib/librte_vhost/socket.c b/lib/librte_vhost/socket.c > > index 9cf34ad17..a9effa115 100644 > > --- a/lib/librte_vhost/socket.c > > +++ b/lib/librte_vhost/socket.c > > @@ -961,13 +961,12 @@ rte_vhost_driver_unregister(const char *path) > > int count; > > struct vhost_user_connection *conn, *next; > > > > +again: > > pthread_mutex_lock(&vhost_user.mutex); > > > > for (i =3D 0; i < vhost_user.vsocket_cnt; i++) { > > struct vhost_user_socket *vsocket =3D vhost_user.vsockets= [i]; > > - > > Keep this new line, it is out of the scope of the change. > > > if (!strcmp(vsocket->path, path)) { > > -again: > > pthread_mutex_lock(&vsocket->conn_mutex); > > for (conn =3D TAILQ_FIRST(&vsocket->conn_list); > > conn !=3D NULL; > > @@ -981,6 +980,7 @@ rte_vhost_driver_unregister(const char *path) > > */ > > if (fdset_try_del(&vhost_user.fdset, > > conn->connfd) =3D=3D -1= ) { > > + > pthread_mutex_unlock(&vhost_user.mutex); > > pthread_mutex_unlock( > > > &vsocket->conn_mutex); > > goto again; > > > > Thanks, > Maxime >