Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e7e99d60 authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Martin K. Petersen
Browse files

scsi: aacraid: complete all commands during bus reset



When issuing a bus reset we should complete all commands, not
just the command triggering the reset.

Signed-off-by: default avatarHannes Reinecke <hare@suse.com>
Reviewed-by: default avatarRaghava Aditya Renukunta <RaghavaAditya.Renukunta@microsemi.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent c323eab7
Loading
Loading
Loading
Loading
+20 −14
Original line number Diff line number Diff line
@@ -1010,23 +1010,29 @@ static int aac_eh_bus_reset(struct scsi_cmnd* cmd)
	struct Scsi_Host * host = dev->host;
	struct aac_dev * aac = (struct aac_dev *)host->hostdata;
	int count;
	u32 bus, cid;
	u32 cmd_bus;
	int status = 0;


	bus = aac_logical_to_phys(scmd_channel(cmd));
	cid = scmd_id(cmd);
	if (bus >= AAC_MAX_BUSES || cid >= AAC_MAX_TARGETS ||
	    aac->hba_map[bus][cid].devtype != AAC_DEVTYPE_NATIVE_RAW) {
	cmd_bus = aac_logical_to_phys(scmd_channel(cmd));
	/* Mark the assoc. FIB to not complete, eh handler does this */
		for (count = 0;
			count < (host->can_queue + AAC_NUM_MGT_FIB);
			++count) {
	for (count = 0; count < (host->can_queue + AAC_NUM_MGT_FIB); ++count) {
		struct fib *fib = &aac->fibs[count];

		if (fib->hw_fib_va->header.XferState &&
		    (fib->flags & FIB_CONTEXT_FLAG) &&
				(fib->callback_data == cmd)) {
		    (fib->flags & FIB_CONTEXT_FLAG_SCSI_CMD)) {
			struct aac_hba_map_info *info;
			u32 bus, cid;

			cmd = (struct scsi_cmnd *)fib->callback_data;
			bus = aac_logical_to_phys(scmd_channel(cmd));
			if (bus != cmd_bus)
				continue;
			cid = scmd_id(cmd);
			info = &aac->hba_map[bus][cid];
			if (bus >= AAC_MAX_BUSES || cid >= AAC_MAX_TARGETS ||
			    info->devtype != AAC_DEVTYPE_NATIVE_RAW) {
				fib->flags |= FIB_CONTEXT_FLAG_TIMED_OUT;
				cmd->SCp.phase = AAC_OWNER_ERROR_HANDLER;
			}