Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp5351274ybi; Wed, 12 Jun 2019 00:45:15 -0700 (PDT) X-Google-Smtp-Source: APXvYqzMit6ybi4+rbYdqaCJVvFuuCN8vzj+txySTCQ8WUks/UU3NiG5/3ORMR0z1NIbiXCEWgNn X-Received: by 2002:a17:902:b58f:: with SMTP id a15mr79728657pls.201.1560325515697; Wed, 12 Jun 2019 00:45:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560325515; cv=none; d=google.com; s=arc-20160816; b=iJyaaaTBC/ZVajX8csfE3pvf+kS8hWDGYxZIgfrBkrzvMeEAN+R/WE6AOXkhHCwMRm 2oSc3oDPAIfl/dd+nXpnKzigMsHCKQdwUU4B5yz7vRIwoL1LUxiJ1BDu+WNWWBL7Ijte 85UKGcssKiOAhSBWqh3cahbjcKL7nBxnj5CybuMno0lgR9JnBKE+jC8Fg12sNRMGBWGe /mbvs/1nXt9oMi2Socab4CN7wD2X9bywYpcdI/IIZ8pzrKlTGCpNDCUcARETTa2UAkVp /9Xjr4VyQPrcl/MMr2YsBhaQG05W1AJPMRHRWRlg3kFe9qLheR/imA7XtkeZCqL9dRLz DYdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=D2x8rn8ZBOzrnlD4/W+azLCoy8mKpyJtmmrA5tVrRA4=; b=mn+OXiTzyCzcuKdjTTfExCaNtSvXlOJ8rFDBsvShgKyldKsLN4ANtZO/dXBo0/vaeM 1xpsE/s49Yik4dGy0DJ8UVYAz+SW3EkfaTZm+W3gCU8vBlNery5LHtQ2OsEd5b5sQ/ls APUSvNLdBrziJBTR/XmmlwjZpdWmInat5Wpd9SwJsruLhXO0gS+G1NSZW98VRtQFWdv2 A+YNPf4SdmpSJWNisr6i/SkN63pS7CW9IR3izkaywauiURM1xHekBI6TPtxenhxlGJ1i NWqKKilbOafZ1xRG2qrQwS+Cc1GExHebWKIPuyW+4ptbw513spsDnbiIDgfkIpa4LuuE NsVA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-nfs-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a64si9813128pge.116.2019.06.12.00.44.52; Wed, 12 Jun 2019 00:45:15 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-nfs-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-nfs-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392205AbfFLDcQ (ORCPT + 99 others); Tue, 11 Jun 2019 23:32:16 -0400 Received: from mx1.redhat.com ([209.132.183.28]:36052 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2392048AbfFLDcQ (ORCPT ); Tue, 11 Jun 2019 23:32:16 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A66673084242; Wed, 12 Jun 2019 03:32:15 +0000 (UTC) Received: from [10.72.12.182] (ovpn-12-182.pek2.redhat.com [10.72.12.182]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 77EA92CB12; Wed, 12 Jun 2019 03:32:14 +0000 (UTC) Subject: Re: [PATCH] svc_run: make sure only one svc_run loop runs in one process To: Steve Dickson , libtirpc-devel@lists.sourceforge.net Cc: linux-nfs@vger.kernel.org References: <20190409113713.30595-1-xiubli@redhat.com> <6a152a89-6de6-f5f2-9c16-5e32fef8cc64@redhat.com> <81ba7de8-1301-1ac9-53fb-6e011a592c96@RedHat.com> From: Xiubo Li Message-ID: Date: Wed, 12 Jun 2019 11:32:10 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 MIME-Version: 1.0 In-Reply-To: <81ba7de8-1301-1ac9-53fb-6e011a592c96@RedHat.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.40]); Wed, 12 Jun 2019 03:32:15 +0000 (UTC) Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org On 2019/6/11 22:54, Steve Dickson wrote: > Sorry for the delay.... > > On 5/15/19 10:55 PM, Xiubo Li wrote: >> Hey ping. >> >> What's the state of this patch and will it make sense here? > I'm not sure it does make sense.... Shouldn't the mutex lock > be in the call of svc_run()? Hi Steve, Yeah, mutex lock should be in the call of svc_run(). This is exactly what I do in this change. If the libtirpc means to allow only one svc_run() loop in each process, so IMO this change is needed. Or if we will allow more than one like the glibc version does, so this should be one bug in libtirpc. Thanks. BRs Xiubo > steved. > >> Thanks >> BRs >> >> On 2019/4/9 19:37, xiubli@redhat.com wrote: >>> From: Xiubo Li >>> >>> In gluster-block project and there are 2 separate threads, both >>> of which will run the svc_run loop, this could work well in glibc >>> version, but in libtirpc we are hitting the random crash and stuck >>> issues. >>> >>> More detail please see: >>> https://github.com/gluster/gluster-block/pull/182 >>> >>> Signed-off-by: Xiubo Li >>> --- >>>   src/svc_run.c | 19 +++++++++++++++++++ >>>   1 file changed, 19 insertions(+) >>> >>> diff --git a/src/svc_run.c b/src/svc_run.c >>> index f40314b..b295755 100644 >>> --- a/src/svc_run.c >>> +++ b/src/svc_run.c >>> @@ -38,12 +38,17 @@ >>>   #include >>>   #include >>>   #include >>> +#include >>> +#include >>>       #include >>>   #include "rpc_com.h" >>>   #include >>>   +static bool svc_loop_running = false; >>> +static pthread_mutex_t svc_run_lock = PTHREAD_MUTEX_INITIALIZER; >>> + >>>   void >>>   svc_run() >>>   { >>> @@ -51,6 +56,16 @@ svc_run() >>>     struct pollfd *my_pollfd = NULL; >>>     int last_max_pollfd = 0; >>>   +  pthread_mutex_lock(&svc_run_lock); >>> +  if (svc_loop_running) { >>> +    pthread_mutex_unlock(&svc_run_lock); >>> +    syslog (LOG_ERR, "svc_run: svc loop is already running in current process %d", getpid()); >>> +    return; >>> +  } >>> + >>> +  svc_loop_running = true; >>> +  pthread_mutex_unlock(&svc_run_lock); >>> + >>>     for (;;) { >>>       int max_pollfd = svc_max_pollfd; >>>       if (max_pollfd == 0 && svc_pollfd == NULL) >>> @@ -111,4 +126,8 @@ svc_exit() >>>       svc_pollfd = NULL; >>>       svc_max_pollfd = 0; >>>       rwlock_unlock(&svc_fd_lock); >>> + >>> +    pthread_mutex_lock(&svc_run_lock); >>> +    svc_loop_running = false; >>> +    pthread_mutex_unlock(&svc_run_lock); >>>   } >> >> >> >> _______________________________________________ >> Libtirpc-devel mailing list >> Libtirpc-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/libtirpc-devel