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: Andy Grover <andy.grover@oracle.com>
This commit is contained in:
parent
ee4c7b47e4
commit
940786eb0a
1 changed files with 10 additions and 2 deletions
|
@ -512,9 +512,10 @@ EXPORT_SYMBOL_GPL(rds_atomic_send_complete);
|
|||
* socket, socket lock) and can just move the notifier.
|
||||
*/
|
||||
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_atomic_op *ao;
|
||||
|
||||
ro = &rm->rdma;
|
||||
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
|
|||
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 */
|
||||
}
|
||||
|
||||
|
@ -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(&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);
|
||||
|
||||
rm->m_rs = NULL;
|
||||
|
|
Loading…
Add table
Reference in a new issue