arcmsr: fix abort command function
PATCH 5/16 arcmsr: fix abort command function
From: Ching<[email protected]>
Fix abort command and its relate function.
Signed-off-by Ching<[email protected]>
---
drivers/scsi/arcmsr/arcmsr_hba.c +10 -4
@@ -2523,7 +2523,7 @@ static int arcmsr_polling_hba_ccbdone(st } arcmsr_cdb = (struct ARCMSR_CDB *)(acb->vir2phy_offset + (flag_ccb <<5 )); ccb = container_of(arcmsr_cdb, struct CommandControlBlock, arcmsr_cdb); - poll_ccb_done = (ccb == poll_ccb) ?1 :0 ; + poll_ccb_done |= (ccb == poll_ccb) ?1 :0 ;if ((ccb->acb != acb) || (ccb->startdone !=ARCMSR_CCB_START )) {if ((ccb->startdone ==ARCMSR_CCB_ABORTED ) || (ccb == poll_ccb)) { printk(KERN_NOTICE "arcmsr%d: scsi id = %d lun = %d ccb = '0x%p'"
@@ -2587,7 +2587,7 @@ static int arcmsr_polling_hbb_ccbdone(st/* check if command done with no error*/ arcmsr_cdb = (struct ARCMSR_CDB *)(acb->vir2phy_offset + (flag_ccb <<5 )); ccb = container_of(arcmsr_cdb, struct CommandControlBlock, arcmsr_cdb); - poll_ccb_done = (ccb == poll_ccb) ?1 :0 ; + poll_ccb_done |= (ccb == poll_ccb) ?1 :0 ;if ((ccb->acb != acb) || (ccb->startdone !=ARCMSR_CCB_START )) {if ((ccb->startdone ==ARCMSR_CCB_ABORTED ) || (ccb == poll_ccb)) { printk(KERN_NOTICE "arcmsr%d: scsi id = %d lun = %d ccb = '0x%p'"
@@ -2643,7 +2643,7 @@ polling_hbc_ccb_retry: ccb_cdb_phy = (flag_ccb &0xFFFFFFF0 ); arcmsr_cdb = (struct ARCMSR_CDB *)(acb->vir2phy_offset + ccb_cdb_phy);/*frame must be 32 bytes aligned*/ pCCB = container_of(arcmsr_cdb, struct CommandControlBlock, arcmsr_cdb); - poll_ccb_done = (pCCB == poll_ccb) ?1 :0 ; + poll_ccb_done |= (pCCB == poll_ccb) ?1 :0 ;/* check ifcommand done with no error*/ if ((pCCB->acb != acb) || (pCCB->startdone !=ARCMSR_CCB_START )) {if (pCCB->startdone ==ARCMSR_CCB_ABORTED ) {
@@ -3245,6 +3245,8 @@ static int arcmsr_abort(struct scsi_cmnd (struct AdapterControlBlock *)cmd->device->host->hostdata;int i =0 ;int rtn =FAILED ; +uint32_t intmask_org; +printk (KERN_NOTICE "arcmsr%d: abort device command of scsi id = %d lun = %d \n" , acb->host->host_no, cmd->device->id, cmd->device->lun);
@@ -3256,9 +3258,12 @@ static int arcmsr_abort(struct scsi_cmnd** we need to handle it as soon as possible and exit ************************************************ */ -if (!atomic_read (&acb->ccboutstandingcount)) +if (!atomic_read (&acb->ccboutstandingcount)) { + acb->acb_flags &= ~ACB_F_ABORT ;return rtn; + } + intmask_org =arcmsr_disable_outbound_ints (acb);for (i =0 ; i <ARCMSR_MAX_FREECCB_NUM ; i++) {struct CommandControlBlock *ccb = acb->pccb_pool[i];if (ccb->startdone ==ARCMSR_CCB_START && ccb->pcmd == cmd) {
@@ -3268,6 +3273,7 @@ static int arcmsr_abort(struct scsi_cmnd } } acb->acb_flags &= ~ACB_F_ABORT ; +arcmsr_enable_outbound_ints (acb, intmask_org);return rtn; }
Quoted 3 lines · ching
From: Ching<[email protected]>
Fix abort command and its relate function.
The changelog should really say something about what the user visible effects are for this bug.
regards,
dan carpenter