From: NeilBrown <neilb@suse.com> To: Oleg Drokin <oleg.drokin@intel.com>, James Simmons <jsimmons@infradead.org>, Andreas Dilger <andreas.dilger@intel.com>, Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: lkml <linux-kernel@vger.kernel.org>, lustre <lustre-devel@lists.lustre.org> Subject: [PATCH 13/19] staging: lustre: use wait_event_idle_timeout in ptlrpcd() Date: Mon, 08 Jan 2018 14:28:13 +1100 [thread overview] Message-ID: <151538209379.23920.12930052742997185181.stgit@noble> (raw) In-Reply-To: <151538168618.23920.8261096424342988792.stgit@noble> 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. Signed-off-by: NeilBrown <neilb@suse.com> --- 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);
WARNING: multiple messages have this Message-ID (diff)
From: NeilBrown <neilb@suse.com> To: Oleg Drokin <oleg.drokin@intel.com>, James Simmons <jsimmons@infradead.org>, Andreas Dilger <andreas.dilger@intel.com>, Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: lkml <linux-kernel@vger.kernel.org>, lustre <lustre-devel@lists.lustre.org> Subject: [lustre-devel] [PATCH 13/19] staging: lustre: use wait_event_idle_timeout in ptlrpcd() Date: Mon, 08 Jan 2018 14:28:13 +1100 [thread overview] Message-ID: <151538209379.23920.12930052742997185181.stgit@noble> (raw) In-Reply-To: <151538168618.23920.8261096424342988792.stgit@noble> 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. Signed-off-by: NeilBrown <neilb@suse.com> --- 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);
next prev parent reply other threads:[~2018-01-08 3:30 UTC|newest] Thread overview: 109+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-01-08 3:28 [PATCH 5 v2: 00/19] staging: lustre: use standard wait_event macros NeilBrown 2018-01-08 3:28 ` [lustre-devel] " NeilBrown 2018-01-08 3:28 ` [PATCH 06/19] staging: lustre: introduce and use l_wait_event_abortable() NeilBrown 2018-01-08 3:28 ` [lustre-devel] " NeilBrown 2018-01-17 15:30 ` James Simmons 2018-01-17 15:30 ` [lustre-devel] " James Simmons 2018-01-08 3:28 ` [PATCH 17/19] staging: lustre: remove l_wait_event from ptlrpc_set_wait NeilBrown 2018-01-08 3:28 ` [lustre-devel] " NeilBrown 2018-01-17 15:36 ` James Simmons 2018-01-17 15:36 ` [lustre-devel] " James Simmons 2018-01-08 3:28 ` [PATCH 02/19] staging: lustre: discard SVC_SIGNAL and related functions NeilBrown 2018-01-08 3:28 ` [lustre-devel] " NeilBrown 2018-01-17 15:26 ` James Simmons 2018-01-17 15:26 ` [lustre-devel] " James Simmons 2018-01-08 3:28 ` [PATCH 07/19] staging: lustre: simplify l_wait_event when intr handler but no timeout NeilBrown 2018-01-08 3:28 ` [lustre-devel] " NeilBrown 2018-01-17 15:29 ` James Simmons 2018-01-17 15:29 ` [lustre-devel] " James Simmons 2018-01-08 3:28 ` [PATCH 10/19] staging: lustre: simplify waiting in ptlrpc_invalidate_import() NeilBrown 2018-01-08 3:28 ` [lustre-devel] " NeilBrown 2018-01-17 15:32 ` James Simmons 2018-01-17 15:32 ` [lustre-devel] " James Simmons 2018-01-08 3:28 ` [PATCH 03/19] staging: lustre: replace simple cases of l_wait_event() with wait_event() NeilBrown 2018-01-08 3:28 ` [lustre-devel] " NeilBrown 2018-01-17 15:27 ` James Simmons 2018-01-17 15:27 ` [lustre-devel] " James Simmons 2018-01-08 3:28 ` [PATCH 14/19] staging: lustre: improve waiting in sptlrpc_req_refresh_ctx NeilBrown 2018-01-08 3:28 ` [lustre-devel] " NeilBrown 2018-01-17 15:34 ` James Simmons 2018-01-17 15:34 ` [lustre-devel] " James Simmons 2018-01-08 3:28 ` [PATCH 05/19] staging: lustre: use wait_event_idle_timeout() where appropriate NeilBrown 2018-01-08 3:28 ` [lustre-devel] " NeilBrown 2018-01-17 15:27 ` James Simmons 2018-01-17 15:27 ` [lustre-devel] " James Simmons 2018-01-08 3:28 ` [PATCH 01/19] sched/wait: add wait_event_idle() functions NeilBrown 2018-01-08 3:28 ` [lustre-devel] " NeilBrown 2018-01-17 15:26 ` James Simmons 2018-01-17 15:26 ` [lustre-devel] " James Simmons 2018-01-08 3:28 ` [PATCH 09/19] staging: lustre: open code polling loop instead of using l_wait_event() NeilBrown 2018-01-08 3:28 ` [lustre-devel] " NeilBrown 2018-01-17 15:32 ` James Simmons 2018-01-17 15:32 ` [lustre-devel] " James Simmons 2018-01-08 3:28 ` [PATCH 12/19] staging: lustre: make polling loop in ptlrpc_unregister_bulk more obvious NeilBrown 2018-01-08 3:28 ` [lustre-devel] " NeilBrown 2018-01-17 15:33 ` James Simmons 2018-01-17 15:33 ` [lustre-devel] " James Simmons 2018-01-08 3:28 ` [PATCH 11/19] staging: lustre: remove back_to_sleep() NeilBrown 2018-01-08 3:28 ` [lustre-devel] " NeilBrown 2018-01-17 15:33 ` James Simmons 2018-01-17 15:33 ` [lustre-devel] " James Simmons 2018-01-08 3:28 ` NeilBrown [this message] 2018-01-08 3:28 ` [lustre-devel] [PATCH 13/19] staging: lustre: use wait_event_idle_timeout in ptlrpcd() NeilBrown 2018-01-17 15:34 ` James Simmons 2018-01-17 15:34 ` [lustre-devel] " James Simmons 2018-01-08 3:28 ` [PATCH 04/19] staging: lustre: discard cfs_time_seconds() NeilBrown 2018-01-08 3:28 ` [lustre-devel] " NeilBrown 2018-01-08 16:52 ` James Simmons 2018-01-08 16:52 ` [lustre-devel] " James Simmons 2018-01-08 17:00 ` Greg Kroah-Hartman 2018-01-08 17:00 ` [lustre-devel] " Greg Kroah-Hartman 2018-01-08 18:04 ` James Simmons 2018-01-08 18:04 ` [lustre-devel] " James Simmons 2018-01-09 8:24 ` Greg Kroah-Hartman 2018-01-09 8:24 ` [lustre-devel] " Greg Kroah-Hartman 2018-01-17 15:29 ` James Simmons 2018-01-17 15:29 ` [lustre-devel] " James Simmons 2018-01-08 3:28 ` [PATCH 08/19] staging: lustre: simplify waiting in ldlm_completion_ast() NeilBrown 2018-01-08 3:28 ` [lustre-devel] " NeilBrown 2018-01-17 15:31 ` James Simmons 2018-01-17 15:31 ` [lustre-devel] " James Simmons 2018-01-08 3:28 ` [PATCH 15/19] staging: lustre: use explicit poll loop in ptlrpc_service_unlink_rqbd NeilBrown 2018-01-08 3:28 ` [lustre-devel] " NeilBrown 2018-01-17 15:35 ` James Simmons 2018-01-17 15:35 ` [lustre-devel] " James Simmons 2018-01-08 3:28 ` [PATCH 16/19] staging: lustre: use explicit poll loop in ptlrpc_unregister_reply NeilBrown 2018-01-08 3:28 ` [lustre-devel] " NeilBrown 2018-01-17 15:35 ` James Simmons 2018-01-17 15:35 ` [lustre-devel] " James Simmons 2018-01-08 3:28 ` [PATCH 18/19] staging: lustre: replace l_wait_event_exclusive_head() with wait_event_idle_exclusive NeilBrown 2018-01-08 3:28 ` [lustre-devel] " NeilBrown 2018-01-17 15:36 ` James Simmons 2018-01-17 15:36 ` [lustre-devel] " James Simmons 2018-01-08 3:28 ` [PATCH 19/19] staging: lustre: remove l_wait_event() and related code NeilBrown 2018-01-08 3:28 ` [lustre-devel] " NeilBrown 2018-01-17 15:36 ` James Simmons 2018-01-17 15:36 ` [lustre-devel] " James Simmons 2018-01-08 14:59 ` [PATCH 5 v2: 00/19] staging: lustre: use standard wait_event macros Greg Kroah-Hartman 2018-01-08 14:59 ` [lustre-devel] " Greg Kroah-Hartman 2018-01-08 16:21 ` James Simmons 2018-01-08 16:21 ` [lustre-devel] " James Simmons 2018-01-08 16:36 ` Greg Kroah-Hartman 2018-01-08 16:36 ` [lustre-devel] " Greg Kroah-Hartman 2018-01-08 18:06 ` James Simmons 2018-01-08 18:06 ` [lustre-devel] " James Simmons 2018-01-09 8:25 ` Greg Kroah-Hartman 2018-01-09 8:25 ` [lustre-devel] " Greg Kroah-Hartman 2018-01-09 1:44 ` NeilBrown 2018-01-09 1:44 ` [lustre-devel] " NeilBrown 2018-02-07 21:31 ` [lustre-devel] testing lustre NeilBrown 2018-02-08 9:42 ` Благодаренко Артём 2018-02-09 1:03 ` NeilBrown 2018-02-09 8:51 ` Благодаренко Артём 2018-02-09 23:52 ` NeilBrown 2018-02-10 3:51 ` Oleg Drokin 2018-02-12 1:05 ` NeilBrown 2018-02-10 23:07 ` James Simmons 2018-01-17 15:24 ` [PATCH 5 v2: 00/19] staging: lustre: use standard wait_event macros James Simmons 2018-01-17 15:24 ` [lustre-devel] " James Simmons 2018-02-12 21:22 [PATCH 00/19] RESEND " NeilBrown 2018-02-12 23:47 ` [PATCH 13/19] staging: lustre: use wait_event_idle_timeout in ptlrpcd() NeilBrown
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=151538209379.23920.12930052742997185181.stgit@noble \ --to=neilb@suse.com \ --cc=andreas.dilger@intel.com \ --cc=gregkh@linuxfoundation.org \ --cc=jsimmons@infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=lustre-devel@lists.lustre.org \ --cc=oleg.drokin@intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.