aboutsummaryrefslogtreecommitdiffstats
path: root/net/rds/send.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/rds/send.c')
-rw-r--r--net/rds/send.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/net/rds/send.c b/net/rds/send.c
index ad89a63c4304..cdca9747fcbc 100644
--- a/net/rds/send.c
+++ b/net/rds/send.c
@@ -512,9 +512,10 @@ EXPORT_SYMBOL_GPL(rds_atomic_send_complete);
512 * socket, socket lock) and can just move the notifier. 512 * socket, socket lock) and can just move the notifier.
513 */ 513 */
514static inline void 514static inline void
515__rds_rdma_send_complete(struct rds_sock *rs, struct rds_message *rm, int status) 515__rds_send_complete(struct rds_sock *rs, struct rds_message *rm, int status)
516{ 516{
517 struct rm_rdma_op *ro; 517 struct rm_rdma_op *ro;
518 struct rm_atomic_op *ao;
518 519
519 ro = &rm->rdma; 520 ro = &rm->rdma;
520 if (ro->op_active && ro->op_notify && ro->op_notifier) { 521 if (ro->op_active && ro->op_notify && ro->op_notifier) {
@@ -523,6 +524,13 @@ __rds_rdma_send_complete(struct rds_sock *rs, struct rds_message *rm, int status
523 ro->op_notifier = NULL; 524 ro->op_notifier = NULL;
524 } 525 }
525 526
527 ao = &rm->atomic;
528 if (ao->op_active && ao->op_notify && ao->op_notifier) {
529 ao->op_notifier->n_status = status;
530 list_add_tail(&ao->op_notifier->n_list, &rs->rs_notify_queue);
531 ao->op_notifier = NULL;
532 }
533
526 /* No need to wake the app - caller does this */ 534 /* No need to wake the app - caller does this */
527} 535}
528 536
@@ -733,7 +741,7 @@ void rds_send_drop_to(struct rds_sock *rs, struct sockaddr_in *dest)
733 spin_lock_irqsave(&rm->m_rs_lock, flags); 741 spin_lock_irqsave(&rm->m_rs_lock, flags);
734 742
735 spin_lock(&rs->rs_lock); 743 spin_lock(&rs->rs_lock);
736 __rds_rdma_send_complete(rs, rm, RDS_RDMA_CANCELED); 744 __rds_send_complete(rs, rm, RDS_RDMA_CANCELED);
737 spin_unlock(&rs->rs_lock); 745 spin_unlock(&rs->rs_lock);
738 746
739 rm->m_rs = NULL; 747 rm->m_rs = NULL;