[openib-general] Re: [PATCH] Re: 0 op factor

Libor Michalek libor at topspin.com
Tue Jun 14 14:24:39 PDT 2005


On Fri, May 13, 2005 at 05:06:55PM +0300, Michael S. Tsirkin wrote:
> Quoting r. Libor Michalek <libor at topspin.com>:
> > Subject: Re: [PATCH] Re: 0 op factor
> > 
> > On Tue, May 10, 2005 at 05:47:00PM -0700, Libor Michalek wrote:
> > > On Sat, May 07, 2005 at 07:47:18PM +0200, Bernhard Fischer wrote:
> > >
> > > > - remove expect from _sdp_cm_path_complete().
> > > 
> > >   When I said that the SDP_EXPECT should eventually be removed, I meant
> > > that the functions which have their return values checked by SDP_EXPECT
> > > should either be turned into void return functions, or something 
> > > intelligent should be done with the return value, such as error recovery
> > > or propogation. The functions which should be turned into void functions
> > > are the ones which will never return anything but success.
> > 
> >   To expand on the last point. There are a lot of functions, for
> > example those in sdp_buff.c, which check for incorrect function
> > usage, such as checking that a buffer is not already in a queue before
> > inserting it into a queue. These checks could be removed entirely or
> > the checks could be made and a call to BUG() in case the condition
> > is met. I prefer the later since the former would corrupt the entire
> > queue. I'm not sure which is preferable to everyone else, either way
> > the result is that the function becomes a void.
> 
> IMO BUG_ON is the way to go.

  Attached is a patch which simplifiess a number of functions to return
void, instead of a status result, and check incorrect parameters with
BUG_ON. This results in the removal in a number of SDP_EXPECT instances
as well as other unused error condition code.

  20 files changed, 221 insertions(+), 548 deletions(-)

-Libor

Index: infiniband/ulp/sdp/sdp_queue.h
===================================================================
--- infiniband/ulp/sdp/sdp_queue.h	(revision 2588)
+++ infiniband/ulp/sdp/sdp_queue.h	(working copy)
@@ -54,7 +54,7 @@
 	struct sdpc_desc   *prev;  /* previous structure in table */
 	u32                 type;  /* element type. (for generic queue) */
 	struct sdpc_desc_q *table; /* table to which this object belongs */
-	int (*release)(struct sdpc_desc *element); /* release the object */
+	void (*release)(struct sdpc_desc *element); /* release the object */
 };
 
 /*
Index: infiniband/ulp/sdp/sdp_write.c
===================================================================
--- infiniband/ulp/sdp/sdp_write.c	(revision 2588)
+++ infiniband/ulp/sdp/sdp_write.c	(working copy)
@@ -87,13 +87,11 @@
 	type = sdp_desc_q_type_head(&conn->w_snk);
 	switch (type) {
 	case SDP_DESC_TYPE_BUFF:
-		buff = (struct sdpc_buff *) sdp_desc_q_get_head(&conn->w_snk);
-		SDP_EXPECT((buff));
+		buff = (struct sdpc_buff *)sdp_desc_q_get_head(&conn->w_snk);
 
 		conn->send_qud -= buff->data_size;
 
-		result = sdp_buff_pool_put(buff);
-		SDP_EXPECT(result >= 0);
+		sdp_buff_pool_put(buff);
 
 		break;
 	case SDP_DESC_TYPE_IOCB:
@@ -104,19 +102,13 @@
 		}
 
 		iocb = (struct sdpc_iocb *)sdp_desc_q_get_head(&conn->w_snk);
-		SDP_EXPECT((iocb));
 
 		iocb->flags &= ~(SDP_IOCB_F_ACTIVE | SDP_IOCB_F_RDMA_W);
 
 		SDP_CONN_STAT_WRITE_INC(conn, iocb->post);
 		SDP_CONN_STAT_WQ_DEC(conn, iocb->size);
 
-		result = sdp_iocb_complete(iocb, 0);
-		if (result < 0) {
-			sdp_dbg_warn(conn, "Error <%d> completing iocb. <%d>",
-				     result, iocb->key);
-			goto error;
-		}
+		sdp_iocb_complete(iocb, 0);
 
 		break;
 	case SDP_DESC_TYPE_NONE:
Index: infiniband/ulp/sdp/sdp_link.c
===================================================================
--- infiniband/ulp/sdp/sdp_link.c	(revision 2588)
+++ infiniband/ulp/sdp/sdp_link.c	(working copy)
@@ -310,12 +310,13 @@
 		sdp_dbg_warn(NULL, "Error <%d> starting path record query",
 			     result);
                 info->query = NULL;
-        } else {
-		info->qid    = result;
-		info->flags |= SDP_LINK_F_PATH;
+		return result;
 	}
 
-	return result;
+	info->qid    = result;
+	info->flags |= SDP_LINK_F_PATH;
+
+	return 0;
 }
 
 /*
Index: infiniband/ulp/sdp/sdp_rcvd.c
===================================================================
--- infiniband/ulp/sdp/sdp_rcvd.c	(revision 2592)
+++ infiniband/ulp/sdp/sdp_rcvd.c	(working copy)
@@ -125,7 +125,6 @@
 static int sdp_rcvd_send_sm(struct sdp_opt *conn, struct sdpc_buff *buff)
 {
 	struct sdpc_iocb *iocb;
-	int result;
 
 	/*
 	 * 1) Conn is not in source cancel mode. Send active IOCB
@@ -152,8 +151,7 @@
 
 			conn->src_sent--;
 
-			result = sdp_iocb_complete(iocb, 0);
-			SDP_EXPECT(result >= 0);
+			sdp_iocb_complete(iocb, 0);
 		}
 		/*
 		 * Cancel complete, clear the state.
@@ -169,7 +167,6 @@
 {
 	struct msg_hdr_rwch *rwch;
 	struct sdpc_iocb *iocb;
-	int result;
 
 	rwch = (struct msg_hdr_rwch *) buff->data;
 	buff->data = buff->data + sizeof(struct msg_hdr_rwch);
@@ -181,8 +178,7 @@
 	iocb = sdp_iocb_q_look(&conn->r_snk);
 	if (!iocb) {
 		sdp_dbg_warn(conn, "Cannot find IOCB for Write Completion.");
-		result = -EPROTO;
-		goto error;
+		return -EPROTO;
 	}
 
 	SDP_EXPECT((iocb->flags & SDP_IOCB_F_RDMA_W));
@@ -196,17 +192,13 @@
 	if (rwch->size > iocb->len) {
 		sdp_dbg_warn(conn, "IOCB and Write size mismatch. <%d:%d>",
 			     rwch->size, iocb->len);
-		result = -EPROTO;
-		goto error;
+		return -EPROTO;
 	}
 	/*
 	 * Iocb is done, deregister memory, and generate completion.
 	 */
 	iocb = sdp_iocb_q_get_head(&conn->r_snk);
-	SDP_EXPECT((iocb));
 
-	conn->snk_sent--;
-
 	iocb->len -= rwch->size;
 	iocb->post += rwch->size;
 
@@ -214,23 +206,17 @@
 	SDP_CONN_STAT_READ_INC(conn, iocb->post);
 	SDP_CONN_STAT_RQ_DEC(conn, iocb->size);
 
-	result = sdp_iocb_complete(iocb, 0);
-	if (result < 0) {
-		sdp_dbg_warn(conn, "Error <%d> completing iocb. <%d>",
-			     result, iocb->key);
-		goto error;
-	}
+	conn->snk_sent--;
 
+	sdp_iocb_complete(iocb, 0);
+
 	return 0;
-error:
-	return result;
 }
 
 static int sdp_rcvd_rdma_rd(struct sdp_opt *conn, struct sdpc_buff *buff)
 {
 	struct msg_hdr_rrch *rrch;
 	struct sdpc_iocb *iocb;
-	int result;
 
 	rrch = (struct msg_hdr_rrch *) buff->data;
 	buff->data = buff->data + sizeof(struct msg_hdr_rrch);
@@ -242,8 +228,7 @@
 	iocb = sdp_iocb_q_look(&conn->w_src);
 	if (!iocb) {
 		sdp_dbg_warn(conn, "Cannot find IOCB for Read Completion.");
-		result = -EPROTO;
-		goto error;
+		return -EPROTO;
 	}
 
 	SDP_CONN_STAT_SRC_INC(conn);
@@ -257,8 +242,7 @@
 	if (rrch->size > iocb->len) {
 		sdp_dbg_warn(conn, "IOCB and Read size mismatch. <%d:%d>",
 			     rrch->size, iocb->len);
-		result = -EPROTO;
-		goto error;
+		return -EPROTO;
 	}
 	/*
 	 * In combined mode the total RDMA size is going to be the buffer
@@ -279,19 +263,13 @@
 	 */
 	if (iocb->len <= 0) {
 		iocb = sdp_iocb_q_get_head(&conn->w_src);
-		SDP_EXPECT((iocb));
 
 		conn->src_sent--;
 
 		SDP_CONN_STAT_WRITE_INC(conn, iocb->post);
 		SDP_CONN_STAT_WQ_DEC(conn, iocb->size);
 
-		result = sdp_iocb_complete(iocb, 0);
-		if (result < 0) {
-			sdp_dbg_warn(conn, "Error <%d> completing iocb. <%d>",
-				     result, iocb->key);
-			goto error;
-		}
+		sdp_iocb_complete(iocb, 0);
 	}
 	/*
 	 * If Source Cancel was in process, and there are no more outstanding
@@ -304,8 +282,6 @@
 	}
 
 	return 0;
-error:
-	return result;
 }
 
 static int sdp_rcvd_mode_change(struct sdp_opt *conn, struct sdpc_buff *buff)
@@ -457,8 +433,7 @@
 
 		conn->src_recv--;
 
-		result = sdp_advt_destroy(advt);
-		SDP_EXPECT(result >= 0);
+		sdp_advt_destroy(advt);
 	}
 	/*
 	 * If there are active reads, mark the connection as being in
@@ -544,8 +519,7 @@
 		counter++;
 		conn->snk_recv--;
 
-		result = sdp_advt_destroy(advt);
-		SDP_EXPECT(result >= 0);
+		sdp_advt_destroy(advt);
 	}
 	/*
 	 * A cancel ack is sent only if we cancelled an advertisment without
@@ -568,10 +542,10 @@
 /*
  * sdp_rcvd_snk_cancel_ack - sink cancel confirmantion
  */
-static int sdp_rcvd_snk_cancel_ack(struct sdp_opt *conn, struct sdpc_buff *buff)
+static int sdp_rcvd_snk_cancel_ack(struct sdp_opt *conn,
+				   struct sdpc_buff *buff)
 {
 	struct sdpc_iocb *iocb;
-	int result;
 
 	sdp_dbg_ctrl(conn, "Sink Cancel Ack. actv <%d> mode <%d> flag <%08x>",
 		     conn->snk_sent, conn->recv_mode, conn->flags);
@@ -579,28 +553,20 @@
 	if (!(conn->flags & SDP_CONN_F_SNK_CANCEL)) {
 		sdp_dbg_warn(conn, "Connection not in sink cancel mode <%08x>",
 			     conn->flags);
-		result = -EPROTO;
-		goto done;
+		return -EPROTO;
 	}
 	/*
 	 * drain and complete all active IOCBs
 	 */
 	while ((iocb = sdp_iocb_q_get_head(&conn->r_snk))) {
-		conn->snk_sent--;
 
-		result = sdp_iocb_complete(iocb, 0);
-		if (result < 0) {
-			sdp_dbg_warn(conn, "Error <%d> completing iocb. <%d>",
-				     result, iocb->key);
-			goto done;
-		}
+		conn->snk_sent--;
+		sdp_iocb_complete(iocb, 0);
 	}
 	/*
 	 * cancellation is complete. Cancel flag is cleared in RECV post.
 	 */
 	return 0;
-done:
-	return result;
 }
 
 /*
@@ -675,22 +641,19 @@
 	if (conn->send_mode != SDP_MODE_PIPE) {
 		sdp_dbg_warn(conn, "SinkAvail, incorrect source mode <%d>",
 			     conn->send_mode);
-		result = -EPROTO;
-		goto error;
+		return -EPROTO;
 	}
 
 	if (SDP_MSG_MAX_ADVS == (conn->src_recv + conn->snk_recv)) {
 		sdp_dbg_warn(conn, "SinkAvail, too many advertisments. <%d>",
 			     (conn->src_recv + conn->snk_recv));
-		result = -EPROTO;
-		goto error;
+		return -EPROTO;
 	}
 
 	if (snkah->size < conn->send_size) {
 		sdp_dbg_warn(conn, "SinkAvail too small. <%d:%d>",
 			     snkah->size, conn->send_size);
-		result = -EPROTO;
-		goto error;
+		return -EPROTO;
 	}
 	/*
 	 * Save the advertisment, if it's not stale. otherwise update
@@ -716,15 +679,11 @@
 			 * in cancel processing they need to be
 			 * completed.
 			 */
-			if (!(iocb->flags & SDP_IOCB_F_CANCEL)) {
-				result = sdp_desc_q_put_head(&conn->send_queue,
-							     (struct sdpc_desc *)
-							     iocb);
-				SDP_EXPECT(result >= 0);
-			} else {
-				result = sdp_iocb_complete(iocb, 0);
-				SDP_EXPECT(result >= 0);
-			}
+			if (!(iocb->flags & SDP_IOCB_F_CANCEL))
+				sdp_desc_q_put_head(&conn->send_queue,
+						    (struct sdpc_desc *)iocb);
+			else
+				sdp_iocb_complete(iocb, 0);
 		}
 		/*
 		 * If Source Cancel was in process, it should now 
@@ -741,8 +700,7 @@
 	advt = sdp_advt_create();
 	if (!advt) {
 		sdp_dbg_warn(conn, "SrcAvail cannot be copied.");
-		result = -ENOMEM;
-		goto error;
+		return -ENOMEM;
 	}
 
 	advt->post = 0;
@@ -783,7 +741,6 @@
 	 * PostRecv will take care of consuming this advertisment, based
 	 * on result.
 	 */
-error:
 	return result;
 }
 
@@ -948,7 +905,7 @@
 	return result;
 
 advt_error:
-	(void)sdp_advt_destroy(advt);
+	sdp_advt_destroy(advt);
 done:
 	return result;
 }
@@ -1187,8 +1144,7 @@
 	 * process result.
 	 */
 	if (!result) {
-		result = sdp_buff_pool_put(buff);
-		SDP_EXPECT(result >= 0);
+		sdp_buff_pool_put(buff);
 		/*
 		 * If this buffer was consumed, then make sure sufficient
 		 * recv buffers are posted. Also we might be able to move
@@ -1226,7 +1182,7 @@
 
 	return 0;
 drop:
-	(void)sdp_buff_pool_put(buff);
+	sdp_buff_pool_put(buff);
 done:
 	return result;
 }
Index: infiniband/ulp/sdp/sdp_inet.c
===================================================================
--- infiniband/ulp/sdp/sdp_inet.c	(revision 2593)
+++ infiniband/ulp/sdp/sdp_inet.c	(working copy)
@@ -401,8 +401,7 @@
 
 			sdp_iocb_q_cancel_all_write(conn, -ECANCELED);
 
-			result = sdp_inet_disconnect(conn);
-			SDP_EXPECT(result >= 0);
+			(void)sdp_inet_disconnect(conn);
 		}
 #endif
 	}
@@ -1137,10 +1136,8 @@
 	case TCP_NODELAY:
 		conn->nodelay = value ? 1 : 0;
 
-		if (conn->nodelay > 0) {
-			result = sdp_send_flush(conn);
-			SDP_EXPECT(result >= 0);
-		}
+		if (conn->nodelay > 0)
+			(void)sdp_send_flush(conn);
 
 		break;
 	case SDP_ZCOPY_THRSH:
Index: infiniband/ulp/sdp/sdp_proto.h
===================================================================
--- infiniband/ulp/sdp/sdp_proto.h	(revision 2593)
+++ infiniband/ulp/sdp/sdp_proto.h	(working copy)
@@ -49,9 +49,9 @@
  */
 struct sdpc_buff *sdp_buff_pool_get(void);
 
-int sdp_buff_pool_put(struct sdpc_buff *buff);
+void sdp_buff_pool_put(struct sdpc_buff *buff);
 
-int sdp_buff_pool_chain_put(struct sdpc_buff *buff, u32 count);
+void sdp_buff_pool_chain_put(struct sdpc_buff *buff, u32 count);
 
 void sdp_buff_pool_chain_link(struct sdpc_buff *head, struct sdpc_buff *buff);
 
@@ -68,8 +68,6 @@
 	sdp_buff_q_clear_unmap(pool, NULL, 0);
 }
 
-int sdp_buff_q_remove(struct sdpc_buff *buff);
-
 struct sdpc_buff *sdp_buff_q_get(struct sdpc_buff_q *pool);
 
 struct sdpc_buff *sdp_buff_q_get_head(struct sdpc_buff_q *pool);
@@ -78,17 +76,12 @@
 
 struct sdpc_buff *sdp_buff_q_look_head(struct sdpc_buff_q *pool);
 
-int sdp_buff_q_put(struct sdpc_buff_q *pool, struct sdpc_buff *buff);
+void sdp_buff_q_put(struct sdpc_buff_q *pool, struct sdpc_buff *buff);
 
-int sdp_buff_q_put_head(struct sdpc_buff_q *pool, struct sdpc_buff *buff);
+void sdp_buff_q_put_head(struct sdpc_buff_q *pool, struct sdpc_buff *buff);
 
-int sdp_buff_q_put_tail(struct sdpc_buff_q *pool, struct sdpc_buff *buff);
+void sdp_buff_q_put_tail(struct sdpc_buff_q *pool, struct sdpc_buff *buff);
 
-struct sdpc_buff *sdp_buff_q_fetch_head(struct sdpc_buff_q *pool,
-					int (*test)(struct sdpc_buff *buff,
-						    void *arg),
-					void *usr_arg);
-
 int sdp_buff_q_trav_head(struct sdpc_buff_q *pool,
 			 int (*trav_func)(struct sdpc_buff *buff,
 					  void *arg),
@@ -133,7 +126,7 @@
 
 struct sdpc_advt *sdp_advt_create(void);
 
-int sdp_advt_destroy(struct sdpc_advt *advt);
+void sdp_advt_destroy(struct sdpc_advt *advt);
 
 struct sdpc_advt *sdp_advt_q_get(struct sdpc_advt_q *table);
 
@@ -154,7 +147,7 @@
 
 struct sdpc_iocb *sdp_iocb_create(void);
 
-int sdp_iocb_destroy(struct sdpc_iocb *iocb);
+void sdp_iocb_destroy(struct sdpc_iocb *iocb);
 
 struct sdpc_iocb *sdp_iocb_q_look(struct sdpc_iocb_q *table);
 
@@ -162,9 +155,9 @@
 
 struct sdpc_iocb *sdp_iocb_q_get_tail(struct sdpc_iocb_q *table);
 
-int sdp_iocb_q_put_head(struct sdpc_iocb_q *table, struct sdpc_iocb *iocb);
+void sdp_iocb_q_put_head(struct sdpc_iocb_q *table, struct sdpc_iocb *iocb);
 
-int sdp_iocb_q_put_tail(struct sdpc_iocb_q *table, struct sdpc_iocb *iocb);
+void sdp_iocb_q_put_tail(struct sdpc_iocb_q *table, struct sdpc_iocb *iocb);
 
 struct sdpc_iocb *sdp_iocb_q_lookup(struct sdpc_iocb_q *table, u32 key);
 
@@ -176,7 +169,7 @@
 
 void sdp_iocb_release(struct sdpc_iocb *iocb);
 
-int sdp_iocb_complete(struct sdpc_iocb *iocb, ssize_t status);
+void sdp_iocb_complete(struct sdpc_iocb *iocb, ssize_t status);
 
 int sdp_iocb_lock(struct sdpc_iocb *iocb);
 
@@ -191,11 +184,11 @@
 
 struct sdpc_desc *sdp_desc_q_get_tail(struct sdpc_desc_q *table);
 
-int sdp_desc_q_put_head(struct sdpc_desc_q *table,
-				struct sdpc_desc *element);
+void sdp_desc_q_put_head(struct sdpc_desc_q *table,
+			 struct sdpc_desc *element);
 
-int sdp_desc_q_put_tail(struct sdpc_desc_q *table,
-				struct sdpc_desc *element);
+void sdp_desc_q_put_tail(struct sdpc_desc_q *table,
+			 struct sdpc_desc *element);
 
 struct sdpc_desc *sdp_desc_q_look_head(struct sdpc_desc_q *table);
 
@@ -573,7 +566,7 @@
 /*
  * sdp_conn_stat_dump - dump stats to the log
  */
-static inline int sdp_conn_stat_dump(struct sdp_opt *conn)
+static inline void sdp_conn_stat_dump(struct sdp_opt *conn)
 {
 #ifdef _SDP_CONN_STATS_REC
 	int counter;
@@ -590,7 +583,6 @@
 				     conn->recv_mid[counter]);
 		}
 #endif
-	return 0;
 }
 
 /*
Index: infiniband/ulp/sdp/sdp_read.c
===================================================================
--- infiniband/ulp/sdp/sdp_read.c	(revision 2588)
+++ infiniband/ulp/sdp/sdp_read.c	(working copy)
@@ -62,15 +62,13 @@
 	}
 
 	advt = sdp_advt_q_get(&conn->src_actv);
-	SDP_EXPECT((advt));
 
 	conn->src_recv--;
 
 	result = sdp_send_ctrl_rdma_rd(conn, advt->post);
 	SDP_EXPECT(result >= 0);
 
-	result = sdp_advt_destroy(advt);
-	SDP_EXPECT(result >= 0);
+	sdp_advt_destroy(advt);
 	/*
 	 * If a SrcAvailCancel was received, and all RDMA reads
 	 * have been flushed, perform tail processing
@@ -161,15 +159,14 @@
 	type = sdp_desc_q_type_head(&conn->r_src);
 	switch (type) {
 	case SDP_DESC_TYPE_BUFF:
-		buff = (struct sdpc_buff *) sdp_desc_q_get_head(&conn->r_src);
-		SDP_EXPECT((buff));
+		buff = (struct sdpc_buff *)sdp_desc_q_get_head(&conn->r_src);
 
 		if (comp->wr_id != buff->wrid) {
 			sdp_dbg_warn(conn, "work request mismatch <%llu:%llu>",
 				     (unsigned long long)comp->wr_id,
 				     (unsigned long long)buff->wrid);
 
-			(void)sdp_buff_pool_put(buff);
+			sdp_buff_pool_put(buff);
 			result = -EPROTO;
 			goto done;
 		}
@@ -191,8 +188,7 @@
 				sdp_dbg_warn(conn, "Error <%d> receiving buff",
 					     result);
 
-			result = sdp_buff_pool_put(buff);
-			SDP_EXPECT(result >= 0);
+			sdp_buff_pool_put(buff);
 		}
 
 		break;
@@ -202,19 +198,13 @@
 			break;
 
 		iocb = (struct sdpc_iocb *)sdp_desc_q_get_head(&conn->r_src);
-		SDP_EXPECT((iocb));
 
 		iocb->flags &= ~(SDP_IOCB_F_ACTIVE | SDP_IOCB_F_RDMA_R);
 
 		SDP_CONN_STAT_READ_INC(conn, iocb->post);
 		SDP_CONN_STAT_RQ_DEC(conn, iocb->size);
 
-		result = sdp_iocb_complete(iocb, 0);
-		if (result < 0) {
-			sdp_dbg_warn(conn, "Error <%d> completing iocb. <%d>",
-				      result, iocb->key);
-			goto done;
-		}
+		sdp_iocb_complete(iocb, 0);
 
 		break;
 	case SDP_DESC_TYPE_NONE:
@@ -232,18 +222,10 @@
 		if (conn->sk->sk_rcvlowat > iocb->post)
 			break;
 
-		iocb = sdp_iocb_q_get_head(&conn->r_pend);
-		SDP_EXPECT((iocb));
-
 		SDP_CONN_STAT_READ_INC(conn, iocb->post);
 		SDP_CONN_STAT_RQ_DEC(conn, iocb->size);
 
-		result = sdp_iocb_complete(iocb, 0);
-		if (result < 0) {
-			sdp_dbg_warn(conn, "Error <%d> completing iocb. <%d>",
-				     result, iocb->key);
-			goto done;
-		}
+		sdp_iocb_complete(sdp_iocb_q_get_head(&conn->r_pend), 0);
 
 		break;
 	default:
Index: infiniband/ulp/sdp/sdp_send.c
===================================================================
--- infiniband/ulp/sdp/sdp_send.c	(revision 2588)
+++ infiniband/ulp/sdp/sdp_send.c	(working copy)
@@ -81,7 +81,8 @@
 	 * the flag. This allows for at least one pending urgent message
 	 * to send early notification.
 	 */
-	if ((conn->flags & SDP_CONN_F_OOB_SEND) && conn->oob_offset <= 0xFFFF) {
+	if ((conn->flags & SDP_CONN_F_OOB_SEND) && 
+	    conn->oob_offset <= 0xFFFF) {
 		SDP_BSDH_SET_OOB_PEND(buff->bsdh_hdr);
 		SDP_BUFF_F_SET_SE(buff);
 
@@ -123,16 +124,12 @@
 	/*
 	 * check queue membership. (first send attempt vs. flush)
 	 */
-	if (sdp_desc_q_member((struct sdpc_desc *) buff) > 0)
+	if (sdp_desc_q_member((struct sdpc_desc *) buff))
 		sdp_desc_q_remove((struct sdpc_desc *) buff);
 	/*
 	 * save the buffer for the event handler.
 	 */
-	result = sdp_buff_q_put_tail(&conn->send_post, buff);
-	if (result < 0) {
-		sdp_dbg_warn(conn, "Error <%d> queueing send buffer", result);
-		goto done;
-	}
+	sdp_buff_q_put_tail(&conn->send_post, buff);
 	/*
 	 * post send
 	 */
@@ -182,9 +179,9 @@
 /*
  * sdp_send_data_buff_post - Post data for buffered transmission
  */
-static int sdp_send_data_buff_post(struct sdp_opt *conn, struct sdpc_buff *buff)
+static int sdp_send_data_buff_post(struct sdp_opt *conn,
+				   struct sdpc_buff *buff)
 {
-	struct sdpc_advt *advt;
 	int result;
 
 	/*
@@ -253,7 +250,7 @@
 	 * update non-discard counter.
 	 * Make consideration for a pending sink. (can be forced by OOB)
 	 */
-	if (sdp_advt_q_size(&conn->snk_pend) > 0) {
+	if (sdp_advt_q_size(&conn->snk_pend)) {
 		/*
 		 * As sink advertisment needs to be discarded. We always
 		 * complete an advertisment if there is not enough room
@@ -263,11 +260,7 @@
 		 * (remember the spec makes sure that the sink is bigger
 		 * then the buffer.)
 		 */
-		advt = sdp_advt_q_get(&conn->snk_pend);
-		SDP_EXPECT((advt));
-
-		result = sdp_advt_destroy(advt);
-		SDP_EXPECT(result >= 0);
+		sdp_advt_destroy(sdp_advt_q_get(&conn->snk_pend));
 		/*
 		 * update sink advertisments.
 		 */
@@ -281,12 +274,10 @@
 	if (result < 0) {
 		sdp_dbg_warn(conn, "Error <%d> posting send data buffer",
 			     result);
-		goto error;
+		return result;
 	}
 
 	return 0;
-error:
-	return result;
 }
 
 /*
@@ -298,7 +289,6 @@
 	struct ib_send_wr *bad_wr;
 	struct sdpc_advt *advt;
 	int result;
-	int zcopy;
 
 	/*
 	 * check state to determine OK to send:
@@ -367,12 +357,7 @@
 	if (sdp_desc_q_member((struct sdpc_desc *) buff) > 0)
 		sdp_desc_q_remove((struct sdpc_desc *) buff);
 
-	result = sdp_desc_q_put_tail(&conn->w_snk, (struct sdpc_desc *)buff);
-        if (result < 0) {
-		sdp_dbg_warn(conn, "Error <%d> queueing write buffer. <%d>",
-			     result, sdp_desc_q_size(&conn->w_snk));
-		goto error;
-	}
+	sdp_desc_q_put_tail(&conn->w_snk, (struct sdpc_desc *)buff);
 	/*
 	 * update send queue depth
 	 */
@@ -402,24 +387,18 @@
 	 * advertisment.
 	 */
 	if (conn->send_size > advt->size) {
-		advt = sdp_advt_q_get(&conn->snk_pend);
-		SDP_EXPECT((advt));
 
-		zcopy = advt->post;
-
-		result = sdp_advt_destroy(advt);
-		SDP_EXPECT(result >= 0);
-
-		result = sdp_send_ctrl_rdma_wr(conn, zcopy);
+		result = sdp_send_ctrl_rdma_wr(conn, advt->post);
 		if (result < 0) {
 			sdp_dbg_warn(conn, "Error <%d> completing sink. <%d>",
-				     result, zcopy);
+				     result, advt->post);
 			result = -ENODEV;
 			goto error;
 		}
 		/*
 		 * update sink advertisments.
 		 */
+		sdp_advt_destroy(sdp_advt_q_get(&conn->snk_pend));
 		conn->snk_recv--;
 	}
 
@@ -523,19 +502,7 @@
 		if (conn->send_size <= advt->size)
 			continue;
 
-		advt = sdp_advt_q_get(&conn->snk_pend);
-		if (!advt) {
-			sdp_dbg_warn(conn, "sink advertisment disappeared.");
-			result = -ENODEV;
-			goto error;
-		}
-
-		zcopy = advt->post;
-
-		result = sdp_advt_destroy(advt);
-		SDP_EXPECT(result >= 0);
-
-		result = sdp_send_ctrl_rdma_wr(conn, zcopy);
+		result = sdp_send_ctrl_rdma_wr(conn, advt->post);
 		if (result < 0) {
 			sdp_dbg_warn(conn, "Error <%d> completing sink. <%d>",
 				     result, zcopy);
@@ -545,6 +512,7 @@
 		/*
 		 * update sink advertisments.
 		 */
+		sdp_advt_destroy(sdp_advt_q_get(&conn->snk_pend));
 		conn->snk_recv--;
 	}
 
@@ -715,7 +683,7 @@
 error:
 	iocb->flags &= ~(SDP_IOCB_F_RDMA_R | SDP_IOCB_F_ACTIVE);
 drop:
-	(void)sdp_buff_pool_put(buff);
+	sdp_buff_pool_put(buff);
 	return result;
 }
 
@@ -832,7 +800,7 @@
 
 	return iocb->len;
 drop:
-	(void)sdp_buff_pool_put(buff);
+	sdp_buff_pool_put(buff);
 error:
 	return result;
 }
@@ -865,13 +833,8 @@
 			if (sdp_desc_q_member((struct sdpc_desc *)iocb) > 0)
 				sdp_desc_q_remove((struct sdpc_desc *)iocb);
 
-			result = sdp_desc_q_put_tail(&conn->w_snk,
-						     (struct sdpc_desc *)iocb);
-			if (result < 0) {
-				sdp_dbg_warn(conn, 
-					     "Error <%d> queuing write IOCB.",
-					     result);
-			}
+			sdp_desc_q_put_tail(&conn->w_snk,
+					    (struct sdpc_desc *)iocb);
 		}
 
 		goto done;
@@ -899,11 +862,7 @@
 			SDP_CONN_STAT_WRITE_INC(conn, iocb->post);
 			SDP_CONN_STAT_WQ_DEC(conn, iocb->size);
 
-			result = sdp_iocb_complete(iocb, 0);
-			if (result < 0)
-				sdp_dbg_warn(conn, 
-					     "Error <%d> completing iocb <%d>",
-					     result, iocb->key);
+			sdp_iocb_complete(iocb, 0);
 		}
 
 		goto done;
@@ -917,11 +876,7 @@
 		if (sdp_desc_q_member((struct sdpc_desc *) iocb) > 0)
 			sdp_desc_q_remove((struct sdpc_desc *)iocb);
 
-		result = sdp_iocb_q_put_tail(&conn->w_src, iocb);
-		if (result < 0)
-			sdp_dbg_warn(conn, "Error <%d> queueing write <%d:%d>",
-				     result, iocb->key,
-				     sdp_iocb_q_size(&conn->w_src));
+		sdp_iocb_q_put_tail(&conn->w_src, iocb);
 	}
 
 done:
@@ -972,10 +927,9 @@
 	 * non-zero result is generated.
 	 * (positive: no space; negative: error)
 	 */
-	while (!result && sdp_desc_q_size(&conn->send_queue) > 0) {
-		element = sdp_desc_q_look_head(&conn->send_queue);
-		SDP_EXPECT((element));
-
+	while (!result && 
+	       (element = sdp_desc_q_look_head(&conn->send_queue))) {
+		
 		result = sdp_send_data_queue_test(conn, element);
 		if (!result)
 			continue;
@@ -991,11 +945,9 @@
 			 * since called functions can dequeue the
 			 * element, and not know how to requeue it.
 			 */
-			if (!sdp_desc_q_member(element)) {
-				result = sdp_desc_q_put_head(&conn->send_queue,
-							     element);
-				SDP_EXPECT(result >= 0);
-			}
+			if (!sdp_desc_q_member(element))
+				sdp_desc_q_put_head(&conn->send_queue,
+						    element);
 		}
 	}
 
@@ -1018,12 +970,8 @@
 	 */
 	if (sdp_desc_q_size(&conn->send_queue) > 0 ||
 	    (result = sdp_send_data_queue_test(conn, element)) > 0) {
-		result = sdp_desc_q_put_tail(&conn->send_queue, element);
-		if (result < 0) {
-			sdp_dbg_warn(conn, "Error <%d> queueing data for send",
-				     result);
-			goto done;
-		}
+
+		sdp_desc_q_put_tail(&conn->send_queue, element);
 		/*
 		 * Potentially request a switch to pipelined mode.
 		 */
@@ -1084,7 +1032,6 @@
 					 int urg)
 {
 	int result = 0;
-	int expect;
 
 	/*
 	 * See note on send OOB implementation in SendBuffPost.
@@ -1121,8 +1068,7 @@
 			sdp_dbg_warn(conn, "Error <%d> buffer to SEND queue.",
 				     result);
 
-			expect = sdp_buff_pool_put(buff);
-			SDP_EXPECT(expect >= 0);
+			sdp_buff_pool_put(buff);
 		}
 	}
 
@@ -1171,9 +1117,8 @@
 	 * As long as there are buffers, try to post  until a non-zero
 	 * result is generated. (positive: no space; negative: error)
 	 */
-	while (!result && sdp_desc_q_size(&conn->send_ctrl) > 0) {
-		element = sdp_desc_q_look_head(&conn->send_ctrl);
-		SDP_EXPECT((element));
+	while (!result && 
+	       (element = sdp_desc_q_look_head(&conn->send_ctrl))) {
 
 		result = sdp_send_ctrl_buff_test(conn, 
 						 (struct sdpc_buff *)element);
@@ -1185,11 +1130,8 @@
 				     "Error <%d> failed to flush control msg",
 				     result);
 
-			if (!sdp_desc_q_member(element)) {
-				result = sdp_desc_q_put_head(&conn->send_ctrl,
-							     element);
-				SDP_EXPECT(result >= 0);
-			}
+			if (!sdp_desc_q_member(element))
+				sdp_desc_q_put_head(&conn->send_ctrl, element);
 		}
 	}
 
@@ -1208,18 +1150,12 @@
 	 * Either post a send, or buffer the packet in the tx queue
 	 */
 	if (sdp_desc_q_size(&conn->send_ctrl) > 0 ||
-	    (result = sdp_send_ctrl_buff_test(conn, buff)) > 0) {
+	    (result = sdp_send_ctrl_buff_test(conn, buff)) > 0)
 		/*
 		 * save the buffer for later flushing into the post queue.
 		 */
-		result = sdp_desc_q_put_tail(&conn->send_ctrl,
-					     (struct sdpc_desc *)buff);
-		if (result < 0) {
-			sdp_dbg_warn(conn, "Error <%d> queueing control buff",
-				     result);
-			goto error;
-		}
-	}
+		sdp_desc_q_put_tail(&conn->send_ctrl,
+				    (struct sdpc_desc *)buff);
 
 	if (result < 0) {
 		sdp_dbg_warn(conn, "Error <%d> during control send posting",
@@ -1278,7 +1214,7 @@
 	if (result < 0) {
 		sdp_dbg_warn(conn, "Error <%d> posting control message",
 			     result);
-		(void)sdp_buff_pool_put(buff);
+		sdp_buff_pool_put(buff);
 	}
 
 	return result;
@@ -1319,7 +1255,7 @@
 	if (result < 0) {
 		sdp_dbg_warn(conn, "Error <%d> posting control message",
 			     result);
-		(void)sdp_buff_pool_put(buff);
+		sdp_buff_pool_put(buff);
 		goto error;
 	}
 
@@ -1462,7 +1398,7 @@
 	if (result < 0) {
 		sdp_dbg_warn(conn, "Error <%d> posting control message",
 			     result);
-		(void)sdp_buff_pool_put(buff);
+		sdp_buff_pool_put(buff);
 	}
 
 error:
@@ -1531,7 +1467,7 @@
 	if (result < 0) {
 		sdp_dbg_warn(conn, "Error <%d> posting control message",
 			     result);
-		(void)sdp_buff_pool_put(buff);
+		sdp_buff_pool_put(buff);
 	}
 
 error:
@@ -1588,7 +1524,7 @@
 	if (result < 0) {
 		sdp_dbg_warn(conn, "Error <%d> posting control message",
 			     result);
-		(void)sdp_buff_pool_put(buff);
+		sdp_buff_pool_put(buff);
 	}
 
 error:
@@ -1736,7 +1672,7 @@
 	if (result < 0) {
 		sdp_dbg_warn(conn, "Error <%d> posting control message",
 			     result);
-		(void)sdp_buff_pool_put(buff);
+		sdp_buff_pool_put(buff);
 	}
 
 error:
@@ -1804,16 +1740,13 @@
 		sdp_desc_q_remove((struct sdpc_desc *)iocb);
 		
 		if (iocb->flags & SDP_IOCB_F_ACTIVE) {
-			if (iocb->flags & SDP_IOCB_F_RDMA_W) {
-				result = sdp_desc_q_put_tail(&conn->w_snk,
-							     (struct sdpc_desc *)iocb);
-				SDP_EXPECT(result >= 0);
-			} else {
+			if (iocb->flags & SDP_IOCB_F_RDMA_W)
+				sdp_desc_q_put_tail(&conn->w_snk,
+						    (struct sdpc_desc *)iocb);
+			else {
 				SDP_EXPECT((iocb->flags & SDP_IOCB_F_RDMA_R));
 
-				result = sdp_iocb_q_put_tail(&conn->w_src,
-							     iocb);
-				SDP_EXPECT(result >= 0);
+				sdp_iocb_q_put_tail(&conn->w_src, iocb);
 			}
 		} else {
 			/*
@@ -1821,13 +1754,10 @@
 			 * needs to be compelted.
 			 */
 			if (iocb->post > 0) {
-				result = sdp_iocb_complete(iocb, 0);
-				SDP_EXPECT(result >= 0);
-
+				sdp_iocb_complete(iocb, 0);
 				result = -EAGAIN;
 			} else {
-				result = sdp_iocb_destroy(iocb);
-				SDP_EXPECT(result >= 0);
+				sdp_iocb_destroy(iocb);
 				/*
 				 * completion reference
 				 */
@@ -1924,14 +1854,11 @@
 		 */
 		advt = sdp_advt_q_look(&conn->snk_pend);
 		if (advt && advt->post > 0) {
-			advt = sdp_advt_q_get(&conn->snk_pend);
-			SDP_EXPECT((advt));
 
 			result = sdp_send_ctrl_rdma_wr(conn, advt->post);
 			SDP_EXPECT(result >= 0);
 
-			result = sdp_advt_destroy(advt);
-			SDP_EXPECT(result >= 0);
+			sdp_advt_destroy(sdp_advt_q_get(&conn->snk_pend));
 			/*
 			 * update sink advertisments.
 			 */
@@ -2080,7 +2007,7 @@
 						  msg->msg_iov,
 						  copy);
 			if (result < 0) {
-				(void)sdp_buff_pool_put(buff);
+				sdp_buff_pool_put(buff);
 				goto done;
 			}
 #endif
@@ -2196,7 +2123,7 @@
 			sdp_dbg_warn(conn, "Error <%d> locking IOCB <%Zu:%d>", 
 				     result, size, copied);
         
-			(void)sdp_iocb_destroy(iocb);
+			sdp_iocb_destroy(iocb);
 			break;
 		}
 
@@ -2209,7 +2136,7 @@
 			sdp_dbg_warn(conn, "Error <%d> queueing write IOCB",
 				     result);
 
-			(void)sdp_iocb_destroy(iocb);
+			sdp_iocb_destroy(iocb);
 			break;
 		}
 
Index: infiniband/ulp/sdp/sdp_actv.c
===================================================================
--- infiniband/ulp/sdp/sdp_actv.c	(revision 2588)
+++ infiniband/ulp/sdp/sdp_actv.c	(working copy)
@@ -309,7 +309,7 @@
 	/*
 	 * Pop the hello message that was sent
 	 */
-	(void)sdp_buff_pool_put(sdp_buff_q_get_head(&conn->send_post));
+	sdp_buff_pool_put(sdp_buff_q_get_head(&conn->send_post));
 
 	result = sdp_cm_actv_establish(conn);
 	if (result) {
@@ -343,7 +343,6 @@
 	struct sdp_opt *conn = (struct sdp_opt *) arg;
 	struct sdpc_buff *buff;
 	int result = 0;
-	int expect;
 	/*
 	 * lock the socket
 	 */
@@ -441,16 +440,7 @@
 	/*
 	 * save message
 	 */
-	result = sdp_buff_q_put(&conn->send_post, buff);
-	if (result < 0) {
-		sdp_dbg_warn(conn, "Error <%d> buffering hello msg.", result);
-
-		expect = sdp_buff_pool_put(buff);
-		SDP_EXPECT(expect >= 0);
-
-		status = -EPROTO;
-		goto failed;
-	}
+	sdp_buff_q_put_tail(&conn->send_post, buff);
 #if 1
 	/*
 	 * Mellanox performance bug workaround.
Index: infiniband/ulp/sdp/sdp_conn.c
===================================================================
--- infiniband/ulp/sdp/sdp_conn.c	(revision 2588)
+++ infiniband/ulp/sdp/sdp_conn.c	(working copy)
@@ -758,8 +758,7 @@
 			     result, dev_root_s.sk_entry,
 			     dev_root_s.sk_size);
 
-	result = sdp_conn_stat_dump(conn);
-	SDP_EXPECT(result >= 0);
+	sdp_conn_stat_dump(conn);
 	/*
 	 * really there shouldn't be anything in these tables, but it's
 	 * really bad if we leave a dangling reference here.
Index: infiniband/ulp/sdp/sdp_advt.c
===================================================================
--- infiniband/ulp/sdp/sdp_advt.c	(revision 2588)
+++ infiniband/ulp/sdp/sdp_advt.c	(working copy)
@@ -53,12 +53,7 @@
 
 	advt = kmem_cache_alloc(sdp_advt_cache, SLAB_ATOMIC);
 	if (advt) {
-		advt->next = NULL;
-		advt->prev = NULL;
-		advt->size = 0;
-		advt->post = 0;
-		advt->addr = 0;
-		advt->rkey = 0;
+		memset(advt, 0, sizeof(*advt));
 
 		advt->type = SDP_DESC_TYPE_ADVT;
 		advt->release = sdp_advt_destroy;
@@ -70,16 +65,13 @@
 /*
  * sdp_advt_destroy - destroy an advertisment object
  */
-int sdp_advt_destroy(struct sdpc_advt *advt)
+void sdp_advt_destroy(struct sdpc_advt *advt)
 {
-	if (advt->next || advt->prev)
-		return -EACCES;
+	BUG_ON(advt->next || advt->prev);
 	/*
 	 * return the object to its cache
 	 */
 	kmem_cache_free(sdp_advt_cache, advt);
-
-	return 0;
 }
 
 /*
@@ -130,6 +122,8 @@
 	struct sdpc_advt *next;
 	struct sdpc_advt *prev;
 
+	BUG_ON(advt->table);
+
 	if (!table->head) {
 		advt->next = advt;
 		advt->prev = advt;
@@ -163,15 +157,11 @@
 void sdp_advt_q_clear(struct sdpc_advt_q *table)
 {
 	struct sdpc_advt *advt;
-	int result;
-
 	/*
 	 * drain the table of any objects
 	 */
-	while ((advt = sdp_advt_q_get(table))) {
-		result = sdp_advt_destroy(advt);
-		SDP_EXPECT(result >= 0);
-	}
+	while ((advt = sdp_advt_q_get(table)))
+		sdp_advt_destroy(advt);
 }
 
 /*
Index: infiniband/ulp/sdp/sdp_recv.c
===================================================================
--- infiniband/ulp/sdp/sdp_recv.c	(revision 2588)
+++ infiniband/ulp/sdp/sdp_recv.c	(working copy)
@@ -74,11 +74,7 @@
 	 * actually posting the thing. Completion event can happen before
 	 * post function returns.
 	 */
-	result = sdp_buff_q_put_tail(&conn->recv_post, buff);
-	if (result < 0) {
-		sdp_dbg_warn(conn, "Error <%d> queuing recv buffer.", result);
-		goto drop;
-	}
+	sdp_buff_q_put_tail(&conn->recv_post, buff);
 
 	sdp_dbg_data(conn, "POST RECV BUFF wrid <%llu> of <%u> bytes.",
 		     (unsigned long long) buff->wrid,
@@ -106,7 +102,7 @@
 
 	return 0;
 drop:
-	(void)sdp_buff_pool_put(buff);
+	sdp_buff_pool_put(buff);
 	conn->l_recv_bf--;
 error:
 	return result;
@@ -180,11 +176,7 @@
 	 * actually posting the thing. Completion event can happen before
 	 * post function returns.
 	 */
-	result = sdp_desc_q_put_tail(&conn->r_src, (struct sdpc_desc *) buff);
-	if (result < 0) {
-		sdp_dbg_warn(conn, "Error <%d> queuing rdma read.", result);
-		goto drop;
-	}
+	sdp_desc_q_put_tail(&conn->r_src, (struct sdpc_desc *) buff);
 
 	sdp_dbg_data(conn, "POST READ BUFF wrid <%llu> of <%u> bytes.",
 		     (unsigned long long) buff->wrid,
@@ -216,7 +208,7 @@
 
 	return 0;
 drop:
-	(void)sdp_buff_pool_put(buff);
+	sdp_buff_pool_put(buff);
 error:
 done:
 	return result;
@@ -306,25 +298,11 @@
 	/*
 	 * if there is no more iocb space queue the it for completion
 	 */
-	if (!iocb->len) {
-		iocb = sdp_iocb_q_get_head(&conn->r_pend);
-		if (!iocb) {
-			sdp_dbg_warn(conn, "read IOCB disappeared. <%d>",
-				     sdp_iocb_q_size(&conn->r_pend));
-			result = -ENODEV;
-			goto error;
-		}
+	if (!iocb->len)
+		sdp_desc_q_put_tail(&conn->r_src, 
+				    (struct sdpc_desc *)
+				    sdp_iocb_q_get_head(&conn->r_pend));
 
-		result = sdp_desc_q_put_tail(&conn->r_src,
-					     (struct sdpc_desc *)iocb);
-		if (result < 0) {
-			sdp_dbg_warn(conn, "Error <%d> queuing read IOCB",
-				     result);
-			(void)sdp_iocb_destroy(iocb);
-			goto error;
-		}
-	}
-
 	sdp_dbg_data(conn, "POST READ IOCB wrid <%llu> bytes <%u:%d:%d>.",
 		     (unsigned long long) iocb->wrid, zcopy,
 		     iocb->len, advt->size);
@@ -410,19 +388,7 @@
 	/*
 	 * queue IOCB
 	 */
-	iocb = sdp_iocb_q_get_head(&conn->r_pend);
-	if (result < 0) {
-		sdp_dbg_warn(conn, "read IOCB missing from pending table <%d>",
-			     sdp_iocb_q_size(&conn->r_pend));
-		goto release;
-	}
-
-	result = sdp_iocb_q_put_tail(&conn->r_snk, iocb);
-	if (result < 0) {
-		sdp_dbg_warn(conn, "Error <%d> queueing active write IOCB",
-			     result);
-		goto re_q;
-	}
+	sdp_iocb_q_put_tail(&conn->r_snk, sdp_iocb_q_get_head(&conn->r_pend));
 	/*
 	 * Either post a send, or buffer the packet in the tx queue
 	 */
@@ -433,21 +399,19 @@
 	if (result < 0) {
 		sdp_dbg_warn(conn, "Error <%d> sending SnkAvail message",
 			     result);
-		goto de_q;
+
+		sdp_iocb_q_put_head(&conn->r_pend, 
+				    sdp_iocb_q_get_tail(&conn->r_snk));
+
+		iocb->flags &= ~SDP_IOCB_F_ACTIVE;
+		iocb->flags &= ~SDP_IOCB_F_RDMA_W;
+
+		goto error;
 	}
 
 	conn->snk_sent++;
 
 	return 0;
-de_q:
-	iocb = sdp_iocb_q_get_tail(&conn->r_snk);
-re_q:
-	(void)sdp_iocb_q_put_head(&conn->r_pend, iocb);
-release:
-	iocb->flags &= ~SDP_IOCB_F_ACTIVE;
-	iocb->flags &= ~SDP_IOCB_F_RDMA_W;
-
-	sdp_iocb_release(iocb);
 error:
 	return result;
 }
@@ -727,7 +691,7 @@
 			     result, iocb->len, 
 			     (unsigned)(buff->tail - buff->data));
 
-		(void)sdp_iocb_q_put_head(&conn->r_snk, iocb);
+		sdp_iocb_q_put_head(&conn->r_snk, iocb);
 		return result;
 	}
 
@@ -739,10 +703,7 @@
 	/*
 	 * callback to complete IOCB
 	 */
-	result = sdp_iocb_complete(iocb, 0);
-	if (result < 0)
-		sdp_dbg_warn(conn, "Error <%d> completing iocb. <%d>",
-			     result, iocb->key);
+	sdp_iocb_complete(iocb, 0);
 
 	return (buff->tail - buff->data);
 }
@@ -790,18 +751,12 @@
 		/*
 		 * complete IOCB
 		 */
-		iocb = sdp_iocb_q_get_head(&conn->r_pend);
-		SDP_EXPECT((iocb));
-
 		SDP_CONN_STAT_READ_INC(conn, iocb->post);
 		SDP_CONN_STAT_RQ_DEC(conn, iocb->size);
 		/*
 		 * callback to complete IOCB
 		 */
-		result = sdp_iocb_complete(iocb, 0);
-		if (result < 0)
-			sdp_dbg_warn(conn, "Error <%d> completing iocb. <%d>",
-				     result, iocb->key);
+		sdp_iocb_complete(sdp_iocb_q_get_head(&conn->r_pend), 0);
 	}
 
 	return (buff->tail - buff->data);
@@ -888,10 +843,8 @@
 	 */
 	buffered = buff->tail - buff->data;
 
-	if (buffered > 0) {
-		result = sdp_buff_q_put_tail(&conn->recv_pool, buff);
-		SDP_EXPECT(result >= 0);
-	}
+	if (buffered)
+		sdp_buff_q_put_tail(&conn->recv_pool, buff);
 
 	return buffered;
 done:
@@ -962,14 +915,11 @@
 				/*
 				 * callback to complete IOCB, or drop reference
 				 */
-				result = sdp_iocb_complete(iocb, 0);
-				SDP_EXPECT(result >= 0);
-
+				sdp_iocb_complete(iocb, 0);
 				result = -EAGAIN;
 			}
 			else {
-				result = sdp_iocb_destroy(iocb);
-				SDP_EXPECT(result >= 0);
+				sdp_iocb_destroy(iocb);
 				/*
 				 * completion reference
 				 */
@@ -981,16 +931,13 @@
 			goto unlock;
 		}
 
-		if (iocb->flags & SDP_IOCB_F_RDMA_W) {
-			result = sdp_iocb_q_put_tail(&conn->r_snk, iocb);
-			SDP_EXPECT(result >= 0);
-		}
+		if (iocb->flags & SDP_IOCB_F_RDMA_W)
+			sdp_iocb_q_put_tail(&conn->r_snk, iocb);
 		else {
 			SDP_EXPECT((iocb->flags & SDP_IOCB_F_RDMA_R));
 
-			result = sdp_desc_q_put_tail(&conn->r_src,
-						     (struct sdpc_desc *)iocb);
-			SDP_EXPECT(result >= 0);
+			sdp_desc_q_put_tail(&conn->r_src,
+					    (struct sdpc_desc *)iocb);
 		}
 	}
 	/*
@@ -1135,8 +1082,7 @@
 						sdp_inet_recv_urg_test,
 						(void *)0);
 			if (buff) {
-				result = sdp_buff_pool_put(buff);
-				SDP_EXPECT(result >= 0);
+				sdp_buff_pool_put(buff);
 
 				result = sdp_recv_flush(conn);
 				SDP_EXPECT(result >= 0);
@@ -1279,12 +1225,8 @@
 							buff->data,
 							copy);
 				if (result < 0) {
-					expect =
-					    sdp_buff_q_put_head(&conn->
-								 recv_pool,
-								 buff);
-					SDP_EXPECT(expect >= 0);
-
+					sdp_buff_q_put_head(&conn->recv_pool,
+							    buff);
 					goto done;
 				}
 #endif
@@ -1298,9 +1240,7 @@
 			copied          += copy;
 
 			if ((buff->tail - buff->data) > 0) {
-				expect = sdp_buff_q_put_head(&conn->recv_pool,
-							     buff);
-				SDP_EXPECT(expect >= 0);
+				sdp_buff_q_put_head(&conn->recv_pool, buff);
 				/*
 				 * always break, PEEK and OOB together could
 				 * throw us into a loop without a forced
@@ -1312,11 +1252,9 @@
 				break;
 			}
 
-			if (flags & MSG_PEEK) {
-				expect = sdp_buff_q_put_head(&peek_queue,
-							     buff);
-				SDP_EXPECT(expect >= 0);
-			} else {
+			if (flags & MSG_PEEK)
+				sdp_buff_q_put_head(&peek_queue, buff);
+			else {
 				if (buff->flags & SDP_BUFF_F_OOB_PRES)
 					conn->rcv_urg_cnt -= 1;
 				/*
@@ -1459,21 +1397,13 @@
 					     "Error <%d> IOCB lock <%Zu:%d>", 
 					     result, size, copied);
 				
-				(void)sdp_iocb_destroy(iocb);
+				sdp_iocb_destroy(iocb);
 				break;
 			}
 
 			SDP_CONN_STAT_RQ_INC(conn, iocb->size);
 
-			result = sdp_iocb_q_put_tail(&conn->r_pend, iocb);
-			if (result < 0) {
-				sdp_dbg_warn(conn, 
-					     "Error <%d> IOCB queue <%Zu:%d>",
-					     result, size, copied);
-				
-				(void)sdp_iocb_destroy(iocb);
-				break;
-			}
+			sdp_iocb_q_put_tail(&conn->r_pend, iocb);
  
 			ack    = 1;
 			copied = 0; /* copied amount was saved in IOCB. */
@@ -1494,16 +1424,13 @@
 				     expect);
 	}
 
-	(void)sdp_buff_pool_chain_put(head, free_count);
+	sdp_buff_pool_chain_put(head, free_count);
 	/*
 	 * return any peeked buffers to the recv queue, in the correct order.
 	 */
-	if (flags & MSG_PEEK) {
-		while ((buff = sdp_buff_q_get_tail(&peek_queue))) {
-			expect = sdp_buff_q_put_head(&conn->recv_pool, buff);
-			SDP_EXPECT(expect >= 0);
-		}
-	}
+	if (flags & MSG_PEEK)
+		while ((buff = sdp_buff_q_get_tail(&peek_queue)))
+			sdp_buff_q_put_head(&conn->recv_pool, buff);
 
 	sdp_conn_unlock(conn);
 	return ((copied > 0) ? copied : result);
Index: infiniband/ulp/sdp/sdp_advt.h
===================================================================
--- infiniband/ulp/sdp/sdp_advt.h	(revision 2588)
+++ infiniband/ulp/sdp/sdp_advt.h	(working copy)
@@ -50,7 +50,7 @@
 	struct sdpc_advt   *prev;  /* previous structure in table */
 	u32                 type; /* element type. (for generic queue) */
 	struct sdpc_advt_q *table; /* table to which this object belongs */
-	int (*release)(struct sdpc_advt *advt); /* release the object */
+	void (*release)(struct sdpc_advt *advt); /* release the object */
 	/*
 	 * advertisment specific
 	 */
Index: infiniband/ulp/sdp/sdp_pass.c
===================================================================
--- infiniband/ulp/sdp/sdp_pass.c	(revision 2588)
+++ infiniband/ulp/sdp/sdp_pass.c	(working copy)
@@ -49,7 +49,7 @@
 	/*
 	 * free hello ack message
 	 */
-	(void)sdp_buff_pool_put(sdp_buff_q_get_head(&conn->send_post));
+	sdp_buff_pool_put(sdp_buff_q_get_head(&conn->send_post));
 
         qp_attr = kmalloc(sizeof(*qp_attr), GFP_KERNEL);
         if (!qp_attr) {
@@ -108,7 +108,6 @@
 	struct ib_qp_attr *qp_attr;
 	int qp_mask = 0;
 	int result;
-	int expect;
 	/*
 	 * Accept connection, build listen response headers and send
 	 * a REP message to remote peer.
@@ -159,16 +158,7 @@
 	/*
 	 * save message
 	 */
-	result = sdp_buff_q_put(&conn->send_post, buff);
-	if (result < 0) {
-		sdp_dbg_warn(conn, "Error <%d> buffering hello ack packet.",
-			     result);
-
-		expect = sdp_buff_pool_put(buff);
-		SDP_EXPECT(expect >= 0);
-
-		goto error;
-	}
+	sdp_buff_q_put_tail(&conn->send_post, buff);
 	/*
 	 * modify QP. INIT->RTR 
 	 */
Index: infiniband/ulp/sdp/sdp_sent.c
===================================================================
--- infiniband/ulp/sdp/sdp_sent.c	(revision 2588)
+++ infiniband/ulp/sdp/sdp_sent.c	(working copy)
@@ -420,8 +420,7 @@
 			break;
 	}
 
-	result = sdp_buff_pool_chain_put(head, free_count);
-	SDP_EXPECT(result >= 0);
+	sdp_buff_pool_chain_put(head, free_count);
 
 	if (free_count <= 0 || conn->send_usig < 0) {
 		sdp_dbg_warn(conn, 
@@ -443,8 +442,8 @@
 
 	return 0;
 drop:
-	(void)sdp_buff_pool_put(buff);
-	(void)sdp_buff_pool_chain_put(head, free_count);
+	sdp_buff_pool_put(buff);
+	sdp_buff_pool_chain_put(head, free_count);
 done:
 	return result;
 }
Index: infiniband/ulp/sdp/sdp_iocb.c
===================================================================
--- infiniband/ulp/sdp/sdp_iocb.c	(revision 2588)
+++ infiniband/ulp/sdp/sdp_iocb.c	(working copy)
@@ -485,7 +485,6 @@
 static void do_iocb_complete(void *arg)
 {
 	struct sdpc_iocb *iocb = (struct sdpc_iocb *)arg;
-	int result;
 	long value;
 	/*
 	 * release memory
@@ -511,16 +510,13 @@
 	/*
 	 * delete IOCB
 	 */
-	result = sdp_iocb_destroy(iocb);
-	if (result < 0)
-		sdp_dbg_err("Error <%d> deleting IOCB <%d> of status <%Zu>",
-			    result, iocb->key, iocb->status);
+	sdp_iocb_destroy(iocb);
 }
 
 /*
  * sdp_iocb_complete - complete an IOCB
  */
-int sdp_iocb_complete(struct sdpc_iocb *iocb, ssize_t status)
+void sdp_iocb_complete(struct sdpc_iocb *iocb, ssize_t status)
 {
 	iocb->status = status;
 	
@@ -529,8 +525,6 @@
 		schedule_work(&iocb->completion);
 	} else
 		do_iocb_complete(iocb);
-	
-	return 0;
 }
 
 /*
@@ -607,13 +601,12 @@
 /*
  * sdp_iocb_destroy - destroy an IOCB object
  */
-int sdp_iocb_destroy(struct sdpc_iocb *iocb)
+void sdp_iocb_destroy(struct sdpc_iocb *iocb)
 {
 	if (!iocb)
-		return -EINVAL;
+		return;
 
-	if (iocb->next || iocb->prev)
-		return -EACCES;
+	BUG_ON(iocb->next || iocb->prev);
 	/*
 	 * release iocb registered memory
 	 */
@@ -640,8 +633,6 @@
 	 * return the object to its cache
 	 */
 	kmem_cache_free(sdp_iocb_cache, iocb);
-
-	return 0;
 }
 
 /*
@@ -692,12 +683,15 @@
 /*
  * sdp_iocb_q_put - put the IOCB object at the tables tail
  */
-static int sdp_iocb_q_put(struct sdpc_iocb_q *table, struct sdpc_iocb *iocb,
-			  int head)
+static void sdp_iocb_q_put(struct sdpc_iocb_q *table, 
+			   struct sdpc_iocb *iocb,
+			   int head)
 {
 	struct sdpc_iocb *next;
 	struct sdpc_iocb *prev;
 
+	BUG_ON(iocb->table);
+
 	if (!table->head) {
 		iocb->next = iocb;
 		iocb->prev = iocb;
@@ -718,8 +712,6 @@
 	table->size++;
 
 	iocb->table = table;
-
-	return 0;
 }
 
 /*
@@ -741,17 +733,17 @@
 /*
  * sdp_iocb_q_put_tail - put the IOCB object at the tables tail
  */
-int sdp_iocb_q_put_tail(struct sdpc_iocb_q *table, struct sdpc_iocb *iocb)
+void sdp_iocb_q_put_tail(struct sdpc_iocb_q *table, struct sdpc_iocb *iocb)
 {
-	return sdp_iocb_q_put(table, iocb, 0);
+	sdp_iocb_q_put(table, iocb, 0);
 }
 
 /*
  * sdp_iocb_q_put_head - put the IOCB object at the tables head
  */
-int sdp_iocb_q_put_head(struct sdpc_iocb_q *table, struct sdpc_iocb *iocb)
+void sdp_iocb_q_put_head(struct sdpc_iocb_q *table, struct sdpc_iocb *iocb)
 {
-	return sdp_iocb_q_put(table, iocb, 1);
+	sdp_iocb_q_put(table, iocb, 1);
 }
 
 /*
@@ -762,7 +754,6 @@
 	struct sdpc_iocb *iocb;
 	struct sdpc_iocb *next;
 	int counter;
-	int result;
 	int total;
 
 	/*
@@ -780,9 +771,7 @@
 				    iocb->post, iocb->len);
 
 			sdp_iocb_q_remove(iocb);
-
-			result = sdp_iocb_complete(iocb, comp);
-			SDP_EXPECT(result >= 0);
+			sdp_iocb_complete(iocb, comp);
 		}
 
 		iocb = next;
@@ -804,15 +793,11 @@
 void sdp_iocb_q_clear(struct sdpc_iocb_q *table)
 {
 	struct sdpc_iocb *iocb;
-	int result;
-
 	/*
 	 * drain the table of any objects
 	 */
-	while ((iocb = sdp_iocb_q_get_head(table))) {
-		result = sdp_iocb_destroy(iocb);
-		SDP_EXPECT(result >= 0);
-	}
+	while ((iocb = sdp_iocb_q_get_head(table)))
+		sdp_iocb_destroy(iocb);
 }
 
 /*
Index: infiniband/ulp/sdp/sdp_iocb.h
===================================================================
--- infiniband/ulp/sdp/sdp_iocb.h	(revision 2588)
+++ infiniband/ulp/sdp/sdp_iocb.h	(working copy)
@@ -76,7 +76,7 @@
 	struct sdpc_iocb   *prev;  /* previous structure in table */
 	u32                 type;  /* element type. (for generic queue) */
 	struct sdpc_iocb_q *table; /* table to which this iocb belongs */
-	int (*release)(struct sdpc_iocb *iocb); /* release the object */
+	void (*release)(struct sdpc_iocb *iocb); /* release the object */
 	/*
 	 * iocb sepcific
 	 */
Index: infiniband/ulp/sdp/sdp_buff.c
===================================================================
--- infiniband/ulp/sdp/sdp_buff.c	(revision 2588)
+++ infiniband/ulp/sdp/sdp_buff.c	(working copy)
@@ -84,12 +84,11 @@
 /*
  * do_buff_q_put - Place a buffer into a specific pool
  */
-static inline int do_buff_q_put(struct sdpc_buff_q *pool,
-				struct sdpc_buff *buff, int fifo)
+static inline void do_buff_q_put(struct sdpc_buff_q *pool,
+				 struct sdpc_buff *buff, int fifo)
 {
 	/* fifo: false == tail, true == head */
-	if (buff->pool)
-		return -EINVAL;
+	BUG_ON(buff->pool);
 
 	if (!pool->head) {
 		buff->next = buff;
@@ -108,8 +107,6 @@
 
 	pool->size++;
 	buff->pool = pool;
-
-	return 0;
 }
 
 /*
@@ -127,14 +124,13 @@
 /*
  * do_buff_q_remove - remove a specific buffer from a specific pool
  */
-static inline int do_buff_q_remove(struct sdpc_buff_q *pool, 
-				   struct sdpc_buff *buff)
+static inline void do_buff_q_remove(struct sdpc_buff_q *pool, 
+				    struct sdpc_buff *buff)
 {
 	struct sdpc_buff *prev;
 	struct sdpc_buff *next;
 
-	if (pool != buff->pool)
-		return -EINVAL;
+	BUG_ON(pool != buff->pool);
 
 	if (buff->next == buff && buff->prev == buff)
 		pool->head = NULL;
@@ -153,8 +149,6 @@
 	buff->pool = NULL;
 	buff->next = NULL;
 	buff->prev = NULL;
-
-	return 0;
 }
 
 /*
@@ -167,17 +161,6 @@
 }
 
 /*
- * sdp_buff_q_remove - remove a specific buffer from a specific pool
- */
-int sdp_buff_q_remove(struct sdpc_buff *buff)
-{
-	struct sdpc_buff_q *pool;
-
-	pool = buff->pool;
-	return do_buff_q_remove(pool, buff);
-}
-
-/*
  * sdp_buff_q_get - Get a buffer from a specific pool
  */
 struct sdpc_buff *sdp_buff_q_get(struct sdpc_buff_q *pool)
@@ -210,17 +193,6 @@
 }
 
 /*
- * sdp_buff_q_fetch_head - Get the pools first buffer, if the test passes
- */
-struct sdpc_buff *sdp_buff_q_fetch_head(struct sdpc_buff_q *pool,
-					int (*test)(struct sdpc_buff *buff,
-						    void *arg),
-					void *usr_arg)
-{
-	return do_buff_q_get(pool, 1, test, usr_arg);
-}
-
-/*
  * sdp_buff_q_fetch - Get the first matching buffer from the pool
  */
 struct sdpc_buff *sdp_buff_q_fetch(struct sdpc_buff_q *pool,
@@ -243,9 +215,7 @@
 		     counter < pool->size; counter++, buff = buff->next) {
 			result = test(buff, usr_arg);
 			if (result > 0) {
-				result = do_buff_q_remove(pool, buff);
-				SDP_EXPECT(result >= 0);
-
+				do_buff_q_remove(pool, buff);
 				return buff;
 			}
 
@@ -289,25 +259,25 @@
 /*
  * sdp_buff_q_put - Place a buffer into a specific pool
  */
-int sdp_buff_q_put(struct sdpc_buff_q *pool, struct sdpc_buff *buff)
+void sdp_buff_q_put(struct sdpc_buff_q *pool, struct sdpc_buff *buff)
 {
-	return do_buff_q_put(pool, buff, 1);
+	do_buff_q_put(pool, buff, 1);
 }
 
 /*
  * sdp_buff_q_put_head - Place a buffer into the head of a specific pool
  */
-int sdp_buff_q_put_head(struct sdpc_buff_q *pool, struct sdpc_buff *buff)
+void sdp_buff_q_put_head(struct sdpc_buff_q *pool, struct sdpc_buff *buff)
 {
-	return do_buff_q_put(pool, buff, 1);
+	do_buff_q_put(pool, buff, 1);
 }
 
 /*
  * sdp_buff_q_put_tail - Place a buffer into the tail of a specific pool
  */
-int sdp_buff_q_put_tail(struct sdpc_buff_q *pool, struct sdpc_buff *buff)
+void sdp_buff_q_put_tail(struct sdpc_buff_q *pool, struct sdpc_buff *buff)
 {
-	return do_buff_q_put(pool, buff, 0);
+	do_buff_q_put(pool, buff, 0);
 }
 
 /*
@@ -316,7 +286,6 @@
 void sdp_buff_q_clear_unmap(struct sdpc_buff_q *pool, struct device *dev,
 			    int direction)
 {
-	int result;
 	struct sdpc_buff *buff;
 
 	while ((buff = do_buff_q_get(pool, 0, NULL, NULL))) {
@@ -324,10 +293,7 @@
 			dma_unmap_single(dev, buff->sge.addr,
 					 buff->tail - buff->data, direction);
 
-		result = sdp_buff_pool_put(buff);
-		if (result < 0)
-			sdp_dbg_err("Error <%d> returning buffer to main",
-				    result);
+		sdp_buff_pool_put(buff);
 	}
 }
 
@@ -389,8 +355,6 @@
 {
 	struct sdpc_buff *buff;
 	int total;
-	int result;
-
 	/*
 	 * Calculate the total number of buffers.
 	 */
@@ -428,14 +392,7 @@
 		buff->type        = SDP_DESC_TYPE_BUFF;
 		buff->release     = sdp_buff_pool_put;
 
-		result = sdp_buff_q_put(&m_pool->pool, buff);
-		if (result < 0) {
-			sdp_warn("Failed to queue buffer. <%d>", result);
-			
-			free_page((unsigned long)buff->head);
-			kmem_cache_free(m_pool->buff_cache, buff);
-			break;
-		}
+		sdp_buff_q_put(&m_pool->pool, buff);
 
 		m_pool->buff_cur++;
 	}
@@ -630,15 +587,15 @@
 /*
  * sdp_buff_pool_put - Return a buffer to the main buffer pool
  */
-int sdp_buff_pool_put(struct sdpc_buff *buff)
+void sdp_buff_pool_put(struct sdpc_buff *buff)
 {
 	unsigned long flags;
 
-	if (!buff || buff->pool)
-		return -EINVAL;
+	if (!buff)
+		return;
 
-	if (buff->next || buff->prev)
-		return -ETOOMANYREFS;
+	BUG_ON(buff->pool);
+	BUG_ON(buff->next || buff->prev);
 	/*
 	 * reset pointers
 	 */
@@ -665,8 +622,6 @@
 	sdp_buff_pool_release_check(main_pool);
 
 	spin_unlock_irqrestore(&main_pool->lock, flags);
-
-	return 0;
 }
 
 /*
@@ -693,7 +648,7 @@
 /*
  * sdp_buff_pool_chain_put - Return a buffer to the main buffer pool
  */
-int sdp_buff_pool_chain_put(struct sdpc_buff *buff, u32 count)
+void sdp_buff_pool_chain_put(struct sdpc_buff *buff, u32 count)
 {
 	unsigned long flags;
 	struct sdpc_buff *next;
@@ -705,7 +660,7 @@
 	 * returned. (e.g. send completions, recv to userspace.
 	 */
 	if (!buff || count <= 0)
-		return -EINVAL;
+		return;
 
 	spin_lock_irqsave(&main_pool->lock, flags);
 
@@ -727,8 +682,6 @@
 	sdp_buff_pool_release_check(main_pool);
 
 	spin_unlock_irqrestore(&main_pool->lock, flags);
-
-	return 0;
 }
 
 /*
Index: infiniband/ulp/sdp/sdp_queue.c
===================================================================
--- infiniband/ulp/sdp/sdp_queue.c	(revision 2588)
+++ infiniband/ulp/sdp/sdp_queue.c	(working copy)
@@ -76,14 +76,13 @@
 /*
  * sdp_desc_q_put - Place an element into a specific table
  */
-static inline int sdp_desc_q_put(struct sdpc_desc_q *table,
+static inline void sdp_desc_q_put(struct sdpc_desc_q *table,
 				 struct sdpc_desc *element, int fifo)
 {
 	/*
 	 * fifo: false == tail, true == head
 	 */
-	if (element->table)
-		return -EINVAL;
+	BUG_ON(element->table);
 
 	if (!table->head) {
 		element->next = element;
@@ -104,8 +103,6 @@
 	table->count[element->type] +=
 	    ((SDP_DESC_TYPE_NONE > element->type) ? 1 : 0);
 	element->table = table;
-
-	return 0;
 }
 
 /*
@@ -181,17 +178,17 @@
 /*
  * sdp_desc_q_put_head - Place an element into the head of a table
  */
-int sdp_desc_q_put_head(struct sdpc_desc_q *table, struct sdpc_desc *element)
+void sdp_desc_q_put_head(struct sdpc_desc_q *table, struct sdpc_desc *element)
 {
-	return sdp_desc_q_put(table, element, 1);
+	sdp_desc_q_put(table, element, 1);
 }
 
 /*
  * sdp_desc_q_put_tail - Place an element into the tail of a table
  */
-int sdp_desc_q_put_tail(struct sdpc_desc_q *table, struct sdpc_desc *element)
+void sdp_desc_q_put_tail(struct sdpc_desc_q *table, struct sdpc_desc *element)
 {
-	return sdp_desc_q_put(table, element, 0);
+	sdp_desc_q_put(table, element, 0);
 }
 
 /*
@@ -264,14 +261,10 @@
 void sdp_desc_q_clear(struct sdpc_desc_q *table)
 {
 	struct sdpc_desc *element;
-	int result;
-
 	/*
 	 * drain the table of any objects
 	 */
 	while ((element = sdp_desc_q_get_head(table)))
-		if (element->release) {
-			result = element->release(element);
-			SDP_EXPECT(result >= 0);
-		}
+		if (element->release)
+			element->release(element);
 }
Index: infiniband/ulp/sdp/sdp_buff.h
===================================================================
--- infiniband/ulp/sdp/sdp_buff.h	(revision 2588)
+++ infiniband/ulp/sdp/sdp_buff.h	(working copy)
@@ -49,7 +49,7 @@
 	struct sdpc_buff   *prev;
 	u32                 type; /* element type. (for generic queue) */
 	struct sdpc_buff_q *pool; /* pool currently holding this buffer. */
-	int (*release)(struct sdpc_buff *buff); /* release the object */
+	void (*release)(struct sdpc_buff *buff); /* release the object */
 	/*
 	 * primary generic data pointers
 	 */




More information about the general mailing list