From: Sreedhar Kodali <srkodali-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
To: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org,
pradeeps-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org
Subject: [PATCH v2 2/4] rsockets: retry for completion events upon interruption
Date: Fri, 05 Sep 2014 18:44:20 +0530 [thread overview]
Message-ID: <66c7c361d03a72de6a216fd1d6ffa0bc@imap.linux.ibm.com> (raw)
From: Sreedhar Kodali <srkodali-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
While waiting for a completion queue event, rsocket's logic by
default
bails out when interrupted. Because of this, on the passive side
ongoing connection establishments are abruptly terminated without
fully accepting the incoming connection requests.
The solution is to modify the completion event waiting logic to
ensure
that it retries for the event upon interruption instead of returning
with an error. This behavior is gated by a runtime parameter
'restart_onintr' with the associated configuration file so it does
not affect in any way the rest of rsocket applications.
Signed-off-by: Sreedhar Kodali <srkodali-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
Reviewed-by: Pradeep Satyanarayana <pradeeps-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
---
diff --git a/src/rsocket.c b/src/rsocket.c
index 78261dc..b70d56a 100644
--- a/src/rsocket.c
+++ b/src/rsocket.c
@@ -115,6 +115,7 @@ static uint16_t def_rqsize = 384;
static uint32_t def_mem = (1 << 17);
static uint32_t def_wmem = (1 << 17);
static uint32_t polling_time = 10;
+static uint16_t restart_onintr = 0;
/*
* Immediate data format is determined by the upper bits
@@ -542,6 +543,11 @@ void rs_configure(void)
def_iomap_size = (uint8_t) rs_value_to_scale(
(uint16_t) rs_scale_to_value(def_iomap_size, 8), 8);
}
+
+ if ((f = fopen(RS_CONF_DIR "/restart_onintr", "r"))) {
+ (void) fscanf(f, "%hu", &restart_onintr);
+ fclose(f);
+ }
init = 1;
out:
pthread_mutex_unlock(&mut);
@@ -1969,10 +1975,14 @@ static int rs_get_cq_event(struct rsocket *rs)
if (!rs->cq_armed)
return 0;
+resume_get_cq_event:
ret = ibv_get_cq_event(rs->cm_id->recv_cq_channel, &cq, &context);
if (!ret) {
ibv_ack_cq_events(rs->cm_id->recv_cq, 1);
rs->cq_armed = 0;
+ } else if (restart_onintr == 1 && errno == EINTR) {
+ errno = 0;
+ goto resume_get_cq_event;
} else if (errno != EAGAIN) {
rs->state = rs_error;
}
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next reply other threads:[~2014-09-05 13:14 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-05 13:14 Sreedhar Kodali [this message]
[not found] ` <66c7c361d03a72de6a216fd1d6ffa0bc-FJGp5E75HVmZamtmwQBW5tBPR1lH4CV8@public.gmane.org>
2014-09-17 16:27 ` [PATCH v2 2/4] rsockets: retry for completion events upon interruption Hefty, Sean
[not found] ` <1828884A29C6694DAF28B7E6B8A8237399DD4395-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-09-17 22:13 ` Jason Gunthorpe
[not found] ` <20140917221340.GB26853-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2014-09-18 11:03 ` Sreedhar Kodali
2014-09-18 11:00 ` Sreedhar Kodali
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=66c7c361d03a72de6a216fd1d6ffa0bc@imap.linux.ibm.com \
--to=srkodali-23vcf4htsmix0ybbhkvfkdbpr1lh4cv8@public.gmane.org \
--cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=pradeeps-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org \
--cc=sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox