From: Hal Rosenstock <hal-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
To: Ira Weiny <weiny2-i2BcT+NCU+M@public.gmane.org>
Cc: "linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: [PATCH 1/4] libibmad: Distinguish timed out from other errors
Date: Sat, 09 Apr 2011 11:21:39 -0400 [thread overview]
Message-ID: <4DA07983.8060308@dev.mellanox.co.il> (raw)
Add error field like errno to ib_rpc_t structure
In mad_rpc code, make sure error is cleared and
in _do_madrpc, set ETIMEDOUT.
error field could also be used to distinguish other errors if needed.
Signed-off-by: Hal Rosenstock <hal-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
---
diff --git a/include/infiniband/mad.h b/include/infiniband/mad.h
index 5d18ec3..0ccdd36 100644
--- a/include/infiniband/mad.h
+++ b/include/infiniband/mad.h
@@ -233,6 +233,7 @@ typedef struct {
unsigned recsz; /* for sa mads (attribute offset) */
int timeout;
uint32_t oui; /* for vendor range 2 mads */
+ int error; /* errno */
} ib_rpc_t;
typedef struct portid {
diff --git a/src/rpc.c b/src/rpc.c
index a702046..557a33b 100644
--- a/src/rpc.c
+++ b/src/rpc.c
@@ -127,7 +127,7 @@ int mad_rpc_class_agent(struct ibmad_port *port, int class)
static int
_do_madrpc(int port_id, void *sndbuf, void *rcvbuf, int agentid, int len,
- int timeout, int max_retries)
+ int timeout, int max_retries, int *p_error)
{
uint32_t trid; /* only low 32 bits */
int retries;
@@ -182,6 +182,8 @@ _do_madrpc(int port_id, void *sndbuf, void *rcvbuf, int agentid, int len,
return length;
}
+ if (p_error)
+ *p_error = ETIMEDOUT;
ERRS("timeout after %d retries, %d ms", retries, timeout * retries);
return -1;
}
@@ -214,6 +216,7 @@ void *mad_rpc(const struct ibmad_port *port, ib_rpc_t * rpc,
uint8_t sndbuf[1024], rcvbuf[1024], *mad;
int redirect = 1;
+ rpc->error = 0;
while (redirect) {
len = 0;
memset(sndbuf, 0, umad_size() + IB_MAD_SIZE);
@@ -224,7 +227,7 @@ void *mad_rpc(const struct ibmad_port *port, ib_rpc_t * rpc,
if ((len = _do_madrpc(port->port_id, sndbuf, rcvbuf,
port->class_agents[rpc->mgtclass],
len, mad_get_timeout(port, rpc->timeout),
- mad_get_retries(port))) < 0) {
+ mad_get_retries(port), &rpc->error)) < 0) {
IBWARN("_do_madrpc failed; dport (%s)",
portid2str(dport));
return NULL;
@@ -273,13 +276,14 @@ void *mad_rpc_rmpp(const struct ibmad_port *port, ib_rpc_t * rpc,
DEBUG("rmpp %p data %p", rmpp, data);
+ rpc->error = 0;
if ((len = mad_build_pkt(sndbuf, rpc, dport, rmpp, data)) < 0)
return NULL;
if ((len = _do_madrpc(port->port_id, sndbuf, rcvbuf,
port->class_agents[rpc->mgtclass],
len, mad_get_timeout(port, rpc->timeout),
- mad_get_retries(port))) < 0) {
+ mad_get_retries(port), &rpc->error)) < 0) {
IBWARN("_do_madrpc failed; dport (%s)", portid2str(dport));
return NULL;
}
--
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:[~2011-04-09 15:21 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-09 15:21 Hal Rosenstock [this message]
[not found] ` <4DA07983.8060308-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2011-04-09 17:12 ` [PATCH 1/4] libibmad: Distinguish timed out from other errors Jason Gunthorpe
[not found] ` <20110409171239.GA4372-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2011-04-10 10:33 ` Hal Rosenstock
[not found] ` <4DA1875F.2050601-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2011-04-10 14:09 ` Jason Gunthorpe
[not found] ` <20110410140956.GB4372-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2011-04-10 16:00 ` Hal Rosenstock
[not found] ` <4DA1D405.4040305-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2011-04-10 16:44 ` Jason Gunthorpe
[not found] ` <20110410164459.GC4372-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2011-04-11 11:25 ` Hal Rosenstock
[not found] ` <4DA2E511.2030204-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2011-04-11 15:58 ` Jason Gunthorpe
[not found] ` <20110411155853.GA30452-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2011-04-11 16:43 ` Ira Weiny
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=4DA07983.8060308@dev.mellanox.co.il \
--to=hal-ldsdmyg8hgv8yrgs2mwiifqbs+8scbdb@public.gmane.org \
--cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=weiny2-i2BcT+NCU+M@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