From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Google-Smtp-Source: ACJfBosTZwMtP2mu4/N6Ynkhy1UUQpDuthy3dOBK1vdsHZQfCVZDMi79k46FaBYktxsDhmI7oiCr ARC-Seal: i=1; a=rsa-sha256; t=1516203290; cv=none; d=google.com; s=arc-20160816; b=jPUnKLFnb8su/xDLU735lP/ZNvMPu+UwEJ3j31IEELoFiPqnI/TkbkUcQRo9F8YvaB SivcxCrSqVpMlTpTppLdYbpf1cslZ9zbLDCe5JiTLEgeTeHaJ7P6MdPcCfGIonbLbDQZ /ksRqqXrDIhdV/8gnyjjwh5HEcVcpr2SwhlAR9k9K382Aoi/3AzgmOsFdR38h/3a8JsR Xkz4GrecIaqdSzTMix0Ni+bc6dDGc1/2U5Dh75I0PqzxERLOTj8/xWXdZWhZeZAbUOIO 0A4v7rhsE+N88k9gTWZY6emKQP2rYPL8aygoeWyp/ISsTAVIkIHHEl1w4R5bj5It+jUn xL2A== 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=6yjqWnW0XfFg20GTyUjVT0Uw79LJDQdMCNSZ9hbUlHU=; b=JvWTcccmbEgmBb17YmV2kmMuKt17NVXONPMWnn2bMwAP/LC0chcJcprdrQCFyuIdyu adYcsgT209r6pj+PKKoKb/MW0SGkgPzmNeqtiVd39kTYlzUQRQM7T7HSv4Mp2v25jbDh 64q+6EPq8qzTEWmilVI8P4f4HM85Wpn0Y+cWEa1mPwGH+qFFVQoq7Hkx4mx4kmBnp/g3 2pO5hq4+AnX7Aq0nX0B2HYNGBZFTjMYrF6DNTYQ5o3lEimcaZCaHtvhAjBhNJJ+OE/WX LfcHxciLrISmO8dx+73ievwExV/K662RqwSWZMRbtSgmYKGDIpZ3isrTe6LVcfsGtczv HIbA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b=wX7yB1ch; 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=wX7yB1ch; 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:46 +0000 (GMT) From: James Simmons To: NeilBrown cc: Oleg Drokin , Andreas Dilger , Greg Kroah-Hartman , lkml , lustre Subject: Re: [PATCH 14/19] staging: lustre: improve waiting in sptlrpc_req_refresh_ctx In-Reply-To: <151538209383.23920.18027403730394945280.stgit@noble> Message-ID: References: <151538168618.23920.8261096424342988792.stgit@noble> <151538209383.23920.18027403730394945280.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_153446_293151_A3A9CD01 X-CRM114-Status: GOOD ( 15.18 ) 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?1588993461243781232?= X-GMAIL-MSGID: =?utf-8?q?1589854381517643829?= X-Mailing-List: linux-kernel@vger.kernel.org List-ID: > Replace l_wait_event with wait_event_idle_timeout() and call the > handler function explicitly. This makes it more clear > what is happening. Reviewed-by: James Simmons > Signed-off-by: NeilBrown > --- > drivers/staging/lustre/lustre/ptlrpc/sec.c | 34 ++++++++++++++++++++-------- > 1 file changed, 24 insertions(+), 10 deletions(-) > > diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec.c b/drivers/staging/lustre/lustre/ptlrpc/sec.c > index 617e004d00f8..90e3b3022106 100644 > --- a/drivers/staging/lustre/lustre/ptlrpc/sec.c > +++ b/drivers/staging/lustre/lustre/ptlrpc/sec.c > @@ -554,9 +554,8 @@ int ctx_check_refresh(struct ptlrpc_cli_ctx *ctx) > } > > static > -int ctx_refresh_timeout(void *data) > +int ctx_refresh_timeout(struct ptlrpc_request *req) > { > - struct ptlrpc_request *req = data; > int rc; > > /* conn_cnt is needed in expire_one_request */ > @@ -575,10 +574,8 @@ int ctx_refresh_timeout(void *data) > } > > static > -void ctx_refresh_interrupt(void *data) > +void ctx_refresh_interrupt(struct ptlrpc_request *req) > { > - struct ptlrpc_request *req = data; > - > spin_lock(&req->rq_lock); > req->rq_intr = 1; > spin_unlock(&req->rq_lock); > @@ -611,7 +608,6 @@ int sptlrpc_req_refresh_ctx(struct ptlrpc_request *req, long timeout) > { > struct ptlrpc_cli_ctx *ctx = req->rq_cli_ctx; > struct ptlrpc_sec *sec; > - struct l_wait_info lwi; > int rc; > > LASSERT(ctx); > @@ -743,10 +739,28 @@ int sptlrpc_req_refresh_ctx(struct ptlrpc_request *req, long timeout) > req->rq_restart = 0; > spin_unlock(&req->rq_lock); > > - lwi = LWI_TIMEOUT_INTR(msecs_to_jiffies(timeout * MSEC_PER_SEC), > - ctx_refresh_timeout, ctx_refresh_interrupt, > - req); > - rc = l_wait_event(req->rq_reply_waitq, ctx_check_refresh(ctx), &lwi); > + rc = wait_event_idle_timeout(req->rq_reply_waitq, > + ctx_check_refresh(ctx), > + timeout * HZ); > + if (rc == 0 && ctx_refresh_timeout(req) == 0) { > + /* Keep waiting, but enable some signals */ > + rc = l_wait_event_abortable(req->rq_reply_waitq, > + ctx_check_refresh(ctx)); > + if (rc == 0) > + rc = 1; > + } > + > + if (rc > 0) > + /* condition is true */ > + rc = 0; > + else if (rc == 0) > + /* Timed out */ > + rc = -ETIMEDOUT; > + else { > + /* Aborted by signal */ > + rc = -EINTR; > + ctx_refresh_interrupt(req); > + } > > /* > * following cases could lead us here: > > >