Commit 940786eb authored by Andy Grover's avatar Andy Grover

RDS: queue failure notifications for dropped atomic ops

When dropping ops in the send queue, we notify the client
of failed rdma ops they asked for notifications on, but not
atomic ops. It should be for both.
Signed-off-by: default avatarAndy Grover <andy.grover@oracle.com>
parent ee4c7b47
...@@ -512,9 +512,10 @@ EXPORT_SYMBOL_GPL(rds_atomic_send_complete); ...@@ -512,9 +512,10 @@ EXPORT_SYMBOL_GPL(rds_atomic_send_complete);
* socket, socket lock) and can just move the notifier. * socket, socket lock) and can just move the notifier.
*/ */
static inline void static inline void
__rds_rdma_send_complete(struct rds_sock *rs, struct rds_message *rm, int status) __rds_send_complete(struct rds_sock *rs, struct rds_message *rm, int status)
{ {
struct rm_rdma_op *ro; struct rm_rdma_op *ro;
struct rm_atomic_op *ao;
ro = &rm->rdma; ro = &rm->rdma;
if (ro->op_active && ro->op_notify && ro->op_notifier) { 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,6 +524,13 @@ __rds_rdma_send_complete(struct rds_sock *rs, struct rds_message *rm, int status
ro->op_notifier = NULL; ro->op_notifier = NULL;
} }
ao = &rm->atomic;
if (ao->op_active && ao->op_notify && ao->op_notifier) {
ao->op_notifier->n_status = status;
list_add_tail(&ao->op_notifier->n_list, &rs->rs_notify_queue);
ao->op_notifier = NULL;
}
/* No need to wake the app - caller does this */ /* No need to wake the app - caller does this */
} }
...@@ -733,7 +741,7 @@ void rds_send_drop_to(struct rds_sock *rs, struct sockaddr_in *dest) ...@@ -733,7 +741,7 @@ void rds_send_drop_to(struct rds_sock *rs, struct sockaddr_in *dest)
spin_lock_irqsave(&rm->m_rs_lock, flags); spin_lock_irqsave(&rm->m_rs_lock, flags);
spin_lock(&rs->rs_lock); spin_lock(&rs->rs_lock);
__rds_rdma_send_complete(rs, rm, RDS_RDMA_CANCELED); __rds_send_complete(rs, rm, RDS_RDMA_CANCELED);
spin_unlock(&rs->rs_lock); spin_unlock(&rs->rs_lock);
rm->m_rs = NULL; rm->m_rs = NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment