aboutsummaryrefslogtreecommitdiffstats
path: root/net/rds/rds.h
diff options
context:
space:
mode:
authorAndy Grover <andy.grover@oracle.com>2010-03-01 17:03:09 -0500
committerAndy Grover <andy.grover@oracle.com>2010-09-08 21:12:08 -0400
commitff3d7d36134ef7138803734fdbf91cc986ea7976 (patch)
tree77ef55e071f84f1b97550dbc6d6755cb3089339b /net/rds/rds.h
parentaa0a4ef4ac3a3c5ffa35e32520bfbc0922ef3630 (diff)
RDS: Perform unmapping ops in stages
Previously, RDS would wait until the final send WR had completed and then handle cleanup. With silent ops, we do not know if an atomic, rdma, or data op will be last. This patch handles any of these cases by keeping a pointer to the last op in the message in m_last_op. When the TX completion event fires, rds dispatches to per-op-type cleanup functions, and then does whole-message cleanup, if the last op equalled m_last_op. This patch also moves towards having op-specific functions take the op struct, instead of the overall rm struct. rds_ib_connection has a pointer to keep track of a a partially- completed data send operation. This patch changes it from an rds_message pointer to the narrower rm_data_op pointer, and modifies places that use this pointer as needed. Signed-off-by: Andy Grover <andy.grover@oracle.com>
Diffstat (limited to 'net/rds/rds.h')
-rw-r--r--net/rds/rds.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/net/rds/rds.h b/net/rds/rds.h
index 23b921000e74..7291f006f364 100644
--- a/net/rds/rds.h
+++ b/net/rds/rds.h
@@ -308,6 +308,8 @@ struct rds_message {
308 unsigned int m_used_sgs; 308 unsigned int m_used_sgs;
309 unsigned int m_total_sgs; 309 unsigned int m_total_sgs;
310 310
311 void *m_final_op;
312
311 struct { 313 struct {
312 struct rm_atomic_op { 314 struct rm_atomic_op {
313 int op_type; 315 int op_type;
@@ -421,7 +423,7 @@ struct rds_transport {
421 int (*xmit_cong_map)(struct rds_connection *conn, 423 int (*xmit_cong_map)(struct rds_connection *conn,
422 struct rds_cong_map *map, unsigned long offset); 424 struct rds_cong_map *map, unsigned long offset);
423 int (*xmit_rdma)(struct rds_connection *conn, struct rm_rdma_op *op); 425 int (*xmit_rdma)(struct rds_connection *conn, struct rm_rdma_op *op);
424 int (*xmit_atomic)(struct rds_connection *conn, struct rds_message *rm); 426 int (*xmit_atomic)(struct rds_connection *conn, struct rm_atomic_op *op);
425 int (*recv)(struct rds_connection *conn); 427 int (*recv)(struct rds_connection *conn);
426 int (*inc_copy_to_user)(struct rds_incoming *inc, struct iovec *iov, 428 int (*inc_copy_to_user)(struct rds_incoming *inc, struct iovec *iov,
427 size_t size); 429 size_t size);