diff options
author | Chris Mason <chris.mason@oracle.com> | 2010-05-12 03:15:35 +0400 |
---|---|---|
committer | Andy Grover <andy.grover@oracle.com> | 2010-09-09 05:15:13 +0400 |
commit | 1cc2228c599f173d77000a250bf0541294e1a7be (patch) | |
tree | cc84662c1fd550274e8bba759074873b7c8e017d /net/rds/send.c | |
parent | bcf50ef2ce3c5d8f2fe995259da16677898cb300 (diff) | |
download | linux-1cc2228c599f173d77000a250bf0541294e1a7be.tar.xz |
rds: Fix reference counting on the for xmit_atomic and xmit_rdma
This makes sure we have the proper number of references in
rds_ib_xmit_atomic and rds_ib_xmit_rdma. We also consistently
drop references the same way for all message types as the IOs end.
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'net/rds/send.c')
-rw-r--r-- | net/rds/send.c | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/net/rds/send.c b/net/rds/send.c index 5c6d4a0be0d7..437f1e72609c 100644 --- a/net/rds/send.c +++ b/net/rds/send.c @@ -233,13 +233,10 @@ restart: /* The transport either sends the whole rdma or none of it */ if (rm->rdma.op_active && !conn->c_xmit_rdma_sent) { - rds_message_addref(rm); rm->m_final_op = &rm->rdma; ret = conn->c_trans->xmit_rdma(conn, &rm->rdma); - if (ret) { - rds_message_put(rm); + if (ret) break; - } conn->c_xmit_rdma_sent = 1; /* The transport owns the mapped memory for now. @@ -248,13 +245,10 @@ restart: } if (rm->atomic.op_active && !conn->c_xmit_atomic_sent) { - rds_message_addref(rm); rm->m_final_op = &rm->atomic; ret = conn->c_trans->xmit_atomic(conn, &rm->atomic); - if (ret) { - rds_message_put(rm); + if (ret) break; - } conn->c_xmit_atomic_sent = 1; /* The transport owns the mapped memory for now. |