[PATCH 3/3] Return errors in bc_send<br>

Andy Andy
Fri May 25 12:38:41 EDT 2007


<br>
Release the request and task upon allocation errors.<br>
<br>
Don&#39;t just return zero, return the send_request return value.<br>
---<br>
&nbsp;net/sunrpc/bc_svc.c |&nbsp;&nbsp; 14 +++++++++-----<br>
&nbsp;1 files changed, 9 insertions(+), 5 deletions(-)<br>
<br>
diff --git a/net/sunrpc/bc_svc.c b/net/sunrpc/bc_svc.c<br>
index c713f05..a9be1b4 100644<br>
--- a/net/sunrpc/bc_svc.c<br>
+++ b/net/sunrpc/bc_svc.c<br>
@@ -131,7 +131,7 @@ void bc_release_xprt(struct rpc_task *task)<br>
&nbsp;int bc_send(struct rpc_rqst *req)<br>
&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct rpc_task *bc_task;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int err;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int err = -ENOMEM;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct xdr_buf *xbufp = &amp;req-&gt;rq_snd_buf;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct rpc_xprt *xprt = req-&gt;rq_xprt;<br>
<br>
@@ -139,13 +139,15 @@ int bc_send(struct rpc_rqst *req)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * Create an rpc_task to send the data<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bc_task = bc_alloc_task(req);<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!bc_task)<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto out_free_req;<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * Reserve the xprt and then try to send the request across<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = bc_reserve_xprt(bc_task);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (err)<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto out;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto out_free_task;<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * Set up the xdr_buf length<br>
@@ -156,12 +158,14 @@ int bc_send(struct rpc_rqst *req)<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bc_release_xprt(bc_task);<br>
<br>
+out_free_req:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xprt_free_bc_request(req);<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>
-out:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return err;<br>
+<br>
+out_free_task:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bc_task-&gt;tk_rqstp = NULL;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bc_release_task(bc_task);<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return err;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto out_free_req;<br>
&nbsp;}<br>
<br>
&nbsp;/*<br>
-- <br>
<br>
<br>
<br><br><div><span class="gmail_quote">On 5/24/07, <b class="gmail_sendername">Iyer, Rahul</b> &lt;<a href="mailto:Rahul.Iyer at netapp.com">Rahul.Iyer at netapp.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>My bad. I see it now.<br>Regards<br>Rahul<br><br>&gt; -----Original Message-----<br>&gt; From: Benny Halevy [mailto:<a href="mailto:bhalevy at panasas.com">bhalevy at panasas.com</a>]<br>&gt; Sent: Thursday, May 24, 2007 9:07 AM
<br>&gt; To: undisclosed-recipients<br>&gt; Subject: [pnfs] [PATCH 2/2] bc_send: handle error from bc_alloc_task<br>&gt;<br>&gt; &gt;From 3ad9cc52abc6146a4e0714b797feb3473d829e56 Mon Sep 17<br>&gt; 00:00:00 2001<br>&gt; From: Benny Halevy &lt;
<a href="mailto:bhalevy at panasas.com">bhalevy at panasas.com</a>&gt;<br>&gt; Date: Thu, 24 May 2007 19:07:13 +0300<br>&gt; Subject: [PATCH 2/2] bc_send: handle error from bc_alloc_task<br>&gt;<br>&gt; Signed-off-by: Benny Halevy &lt;
<a href="mailto:bhalevy at panasas.com">bhalevy at panasas.com</a>&gt;<br>&gt; ---<br>&gt;&nbsp;&nbsp;net/sunrpc/bc_svc.c |&nbsp;&nbsp;&nbsp;&nbsp;5 +++++<br>&gt;&nbsp;&nbsp;1 files changed, 5 insertions(+), 0 deletions(-)<br>&gt;<br>&gt; diff --git a/net/sunrpc/bc_svc.c b/net/sunrpc/bc_svc.c
<br>&gt; index fbea284..a8519d5 100644<br>&gt; --- a/net/sunrpc/bc_svc.c<br>&gt; +++ b/net/sunrpc/bc_svc.c<br>&gt; @@ -139,6 +139,10 @@ int bc_send(struct rpc_rqst *req)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* Create an rpc_task to send the data
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bc_task = bc_alloc_task(req);<br>&gt; +&nbsp;&nbsp;&nbsp;&nbsp; if (!bc_task) {<br>&gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = -ENOMEM;<br>&gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto out_no_free;<br>&gt; +&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* Reserve the xprt and then try to send the request across
<br>&gt; @@ -158,6 +162,7 @@ int bc_send(struct rpc_rqst *req)<br>&gt;&nbsp;&nbsp;out:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bc_task-&gt;tk_rqstp = NULL;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bc_release_task(bc_task);<br>&gt; +out_no_free:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xprt_free_bc_request(req);
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return err;<br>&gt;&nbsp;&nbsp;}<br>&gt; --<br>&gt; 1.5.1<br>&gt;<br>&gt; _______________________________________________<br>&gt; pNFS mailing list<br>&gt; <a href="mailto:pNFS at linux-nfs.org">pNFS at linux-nfs.org</a><br>
&gt; <a href="http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs">http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs</a><br>&gt;<br>_______________________________________________<br>pNFS mailing list<br><a href="mailto:pNFS at linux-nfs.org">
pNFS at linux-nfs.org</a><br><a href="http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs">http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs</a><br><br></blockquote></div><br>

------=_Part_128865_29770799.1180111924724--


More information about the pNFS mailing list