mirror of
https://github.com/torvalds/linux.git
synced 2024-12-04 01:51:34 +00:00
IB/iser: Handle aborting a command after it is sent
The SCSI midlayer may abort a command that was already sent. If the initiator is still trying to send the command (or data-out PDUs for that command), the QP may time out after the midlayer times out. Therefore, when aborting the command, iSER may still have references for the command's buffers. When sending these PDUs, the sends will complete with an error and their resources will be released then. Signed-off-by: Erez Zilber <erezz@voltaire.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
0264d88531
commit
3104a2175d
@ -658,6 +658,7 @@ void iser_ctask_rdma_finalize(struct iscsi_iser_cmd_task *iser_ctask)
|
||||
{
|
||||
int deferred;
|
||||
int is_rdma_aligned = 1;
|
||||
struct iser_regd_buf *regd;
|
||||
|
||||
/* if we were reading, copy back to unaligned sglist,
|
||||
* anyway dma_unmap and free the copy
|
||||
@ -672,20 +673,20 @@ void iser_ctask_rdma_finalize(struct iscsi_iser_cmd_task *iser_ctask)
|
||||
}
|
||||
|
||||
if (iser_ctask->dir[ISER_DIR_IN]) {
|
||||
deferred = iser_regd_buff_release
|
||||
(&iser_ctask->rdma_regd[ISER_DIR_IN]);
|
||||
regd = &iser_ctask->rdma_regd[ISER_DIR_IN];
|
||||
deferred = iser_regd_buff_release(regd);
|
||||
if (deferred) {
|
||||
iser_err("References remain for BUF-IN rdma reg\n");
|
||||
BUG();
|
||||
iser_err("%d references remain for BUF-IN rdma reg\n",
|
||||
atomic_read(®d->ref_count));
|
||||
}
|
||||
}
|
||||
|
||||
if (iser_ctask->dir[ISER_DIR_OUT]) {
|
||||
deferred = iser_regd_buff_release
|
||||
(&iser_ctask->rdma_regd[ISER_DIR_OUT]);
|
||||
regd = &iser_ctask->rdma_regd[ISER_DIR_OUT];
|
||||
deferred = iser_regd_buff_release(regd);
|
||||
if (deferred) {
|
||||
iser_err("References remain for BUF-OUT rdma reg\n");
|
||||
BUG();
|
||||
iser_err("%d references remain for BUF-OUT rdma reg\n",
|
||||
atomic_read(®d->ref_count));
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user