From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Google-Smtp-Source: ACJfBosYiiG69BGazKVh0bOW2Sk3ENBjTORjjEqtGLTbAp7CnpfZLmLAUA8Fj2y2pdoxkQIljzvR ARC-Seal: i=1; a=rsa-sha256; t=1516203265; cv=none; d=google.com; s=arc-20160816; b=AosGQzTrcvyFrDqF74Mpfu2DRmobYDYvxuJkQt02yciIRcR/ILihkpoAOFRukCSqvd fw9V/AQ1y/dTeLpIy02E6aEoGp/J9WfzG5WgziFXEHNeRbJE9l03nCQpppUssg8W4uFc TdC7BZ5Z4LgGf7KaTjx4pE9YOR19/ORR++Jlyu/zOWEbBZdfm6PPQm9rKwz6JjDIfnXm HCiDIYl7TVekGx+oT0xhxKaUCDHSGMb/FMequcC9XxnuFsLrMpKR7FbZ3opjGpDpj+i+ 5r06aNrLUMAKEMU0veb2SXAqA+tiZU+h26+GfjjGAB0v5S/tn/A1EIsBj1bRiNo9qiw1 vO5g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:user-agent:references:message-id:in-reply-to:subject :cc:to:from:date:dkim-signature:arc-authentication-results; bh=h2gmXRzyRh2aj0StbtFSipwAQfbpFubgcCz9cPIUx3E=; b=vZc+B2za6qFsOirZOBwy64AA2fdan5pAlqUCXz5KN0Pw0ek0UbnaQCJzO0x+7rZncz pQ7DuLOpsqNqueeHLnnov6sQWx6qdx/r/lMSaE31mZnDxYzHW6g37lZ/ee9aSBXbxOVp Jr+JDle1YhSgduswSP1hNGA3Crrecu8WwUlEEiV/pRXDDzu6rGFs9wGJjhuSGQ0kT8It n6MEaEUsIrPPliF+aHhwCKp16cATryOYB1p+tieFlHzQ+/4raE+j0s+R6bZPAvIe3+Z4 u3CKTTArM/N9dtO6bQkqToduRxJ3a9r8zMJcnKl00TQVTZXHFnDMgxe64dAxk/ttjFif RSxg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b=Ta7bmWXR; spf=pass (google.com: best guess record for domain of jsimmons@infradead.org designates 2001:8b0:10b:1236::1 as permitted sender) smtp.mailfrom=jsimmons@infradead.org Authentication-Results: mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b=Ta7bmWXR; spf=pass (google.com: best guess record for domain of jsimmons@infradead.org designates 2001:8b0:10b:1236::1 as permitted sender) smtp.mailfrom=jsimmons@infradead.org Date: Wed, 17 Jan 2018 15:34:20 +0000 (GMT) From: James Simmons To: NeilBrown cc: Oleg Drokin , Andreas Dilger , Greg Kroah-Hartman , lkml , lustre Subject: Re: [PATCH 13/19] staging: lustre: use wait_event_idle_timeout in ptlrpcd() In-Reply-To: <151538209379.23920.12930052742997185181.stgit@noble> Message-ID: References: <151538168618.23920.8261096424342988792.stgit@noble> <151538209379.23920.12930052742997185181.stgit@noble> User-Agent: Alpine 2.21 (LFD 202 2017-01-01) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180117_153421_204764_03A25919 X-CRM114-Status: GOOD ( 16.08 ) X-Spam-Score: -1.9 (-) X-Spam-Report: SpamAssassin version 3.4.1 on casper.infradead.org summary: Content analysis details: (-1.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 NO_RELAYS Informational: message was not relayed via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: =?utf-8?q?1588993451918778788?= X-GMAIL-MSGID: =?utf-8?q?1589854354863965961?= X-Mailing-List: linux-kernel@vger.kernel.org List-ID: > We can replace l_wait_event() with > wait_event_idle_timeout() here providing we call the > timeout function when wait_event_idle_timeout() returns zero. > > As ptlrpc_expired_set() returns 1, the l_wait_event() aborts of the > first timeout. Reviewed-by: James Simmons > Signed-off-by: NeilBrown > --- > drivers/staging/lustre/lustre/ptlrpc/client.c | 12 ++++++++---- > .../staging/lustre/lustre/ptlrpc/ptlrpc_internal.h | 2 +- > drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c | 9 +++++---- > 3 files changed, 14 insertions(+), 9 deletions(-) > > diff --git a/drivers/staging/lustre/lustre/ptlrpc/client.c b/drivers/staging/lustre/lustre/ptlrpc/client.c > index 81b7a7046d82..f70176c6db08 100644 > --- a/drivers/staging/lustre/lustre/ptlrpc/client.c > +++ b/drivers/staging/lustre/lustre/ptlrpc/client.c > @@ -2125,9 +2125,8 @@ int ptlrpc_expire_one_request(struct ptlrpc_request *req, int async_unlink) > * Callback used when waiting on sets with l_wait_event. > * Always returns 1. > */ > -int ptlrpc_expired_set(void *data) > +void ptlrpc_expired_set(struct ptlrpc_request_set *set) > { > - struct ptlrpc_request_set *set = data; > struct list_head *tmp; > time64_t now = ktime_get_real_seconds(); > > @@ -2156,7 +2155,12 @@ int ptlrpc_expired_set(void *data) > */ > ptlrpc_expire_one_request(req, 1); > } > +} > +static int ptlrpc_expired_set_void(void *data) > +{ > + struct ptlrpc_request_set *set = data; > > + ptlrpc_expired_set(set); > /* > * When waiting for a whole set, we always break out of the > * sleep so we can recalculate the timeout, or enable interrupts > @@ -2286,7 +2290,7 @@ int ptlrpc_set_wait(struct ptlrpc_request_set *set) > * so we allow interrupts during the timeout. > */ > lwi = LWI_TIMEOUT_INTR_ALL(HZ, > - ptlrpc_expired_set, > + ptlrpc_expired_set_void, > ptlrpc_interrupted_set, set); > else > /* > @@ -2295,7 +2299,7 @@ int ptlrpc_set_wait(struct ptlrpc_request_set *set) > * complete, or an in-flight req times out. > */ > lwi = LWI_TIMEOUT((timeout ? timeout : 1) * HZ, > - ptlrpc_expired_set, set); > + ptlrpc_expired_set_void, set); > > rc = l_wait_event(set->set_waitq, ptlrpc_check_set(NULL, set), &lwi); > > diff --git a/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_internal.h b/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_internal.h > index f9decbd1459d..b7a8d7537a66 100644 > --- a/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_internal.h > +++ b/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_internal.h > @@ -68,7 +68,7 @@ void ptlrpc_request_cache_free(struct ptlrpc_request *req); > void ptlrpc_init_xid(void); > void ptlrpc_set_add_new_req(struct ptlrpcd_ctl *pc, > struct ptlrpc_request *req); > -int ptlrpc_expired_set(void *data); > +void ptlrpc_expired_set(struct ptlrpc_request_set *set); > int ptlrpc_set_next_timeout(struct ptlrpc_request_set *set); > void ptlrpc_resend_req(struct ptlrpc_request *request); > void ptlrpc_set_bulk_mbits(struct ptlrpc_request *req); > diff --git a/drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c b/drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c > index 437b4b2a9072..6ed77521d025 100644 > --- a/drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c > +++ b/drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c > @@ -435,16 +435,17 @@ static int ptlrpcd(void *arg) > * new_req_list and ptlrpcd_check() moves them into the set. > */ > do { > - struct l_wait_info lwi; > int timeout; > > timeout = ptlrpc_set_next_timeout(set); > - lwi = LWI_TIMEOUT((timeout ? timeout : 1) * HZ, > - ptlrpc_expired_set, set); > > lu_context_enter(&env.le_ctx); > lu_context_enter(env.le_ses); > - l_wait_event(set->set_waitq, ptlrpcd_check(&env, pc), &lwi); > + if (wait_event_idle_timeout(set->set_waitq, > + ptlrpcd_check(&env, pc), > + (timeout ? timeout : 1) * HZ) == 0) > + ptlrpc_expired_set(set); > + > lu_context_exit(&env.le_ctx); > lu_context_exit(env.le_ses); > > > >