[openib-general] [PATCH] fix list_entry usage
Sean Hefty
Wed Oct 13 16:52:44 PDT 2004
Patch fixes casting to incorrect structures when calling list_entry().
- Sean
-- Index: access/ib_mad.c
===================================================================
--- access/ib_mad.c (revision 987)
+++ access/ib_mad.c (working copy)
@@ -887,10 +887,9 @@
*/
spin_lock_irqsave(&port_priv->recv_list_lock, flags);
if (!list_empty(&port_priv->recv_posted_mad_list[qpn])) {
- rbuf = list_entry(&port_priv->recv_posted_mad_list[qpn],
+ rbuf = list_entry(&port_priv->recv_posted_mad_list[qpn].next,
struct ib_mad_recv_buf,
list);
- rbuf = (struct ib_mad_recv_buf *)rbuf->list.next;
mad_priv_hdr = container_of(rbuf, struct ib_mad_private_header,
recv_buf);
recv = container_of(mad_priv_hdr, struct ib_mad_private,
@@ -1031,7 +1030,6 @@
struct ib_wc *wc)
{
struct ib_mad_send_wr_private *mad_send_wr;
- struct list_head *send_wr;
unsigned long flags;
/* Completion corresponds to first entry on posted MAD send list */
@@ -1042,12 +1040,9 @@
goto error;
}
- mad_send_wr = list_entry(&port_priv->send_posted_mad_list,
+ mad_send_wr = list_entry(&port_priv->send_posted_mad_list.next,
struct ib_mad_send_wr_private,
send_list);
- send_wr = mad_send_wr->send_list.next;
- mad_send_wr = container_of(send_wr, struct ib_mad_send_wr_private,
- send_list);
if (wc->wr_id != (unsigned long)mad_send_wr) {
printk(KERN_ERR PFX "Send completion WR ID 0x%Lx doesn't match "
"posted send WR ID 0x%lx\n",
@@ -1383,9 +1378,8 @@
spin_lock_irqsave(&port_priv->recv_list_lock, flags);
while (!list_empty(&port_priv->recv_posted_mad_list[i])) {
- rbuf = list_entry(&port_priv->recv_posted_mad_list[i],
- struct ib_mad_recv_buf, list);
- rbuf = (struct ib_mad_recv_buf *)rbuf->list.next;
+ rbuf = list_entry(&port_priv->recv_posted_mad_list[i].next,
+ struct ib_mad_recv_buf, list);
mad_priv_hdr = container_of(rbuf,
struct ib_mad_private_header,
recv_buf);
More information about the openib-general mailing list