Skip to contentSkip to conversation

isci: fix reset timeout handling

PATCH Superseded Dan Williams 4 participants 4 messages Dec 9, 2013 – Dec 10, 2013

Subsystems (2)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 isci: fix reset timeout handling

Remove an erroneous BUG_ON() in the case of a hard reset timeout. If a SATA device is unable to restore the link in time we expect the port to go back to the "awaiting link-up" state. Since the timeout path notified libsas that the port is down, we want to notify libsas when it returns and expect that the port may not be in the "resetting" state.

Also, once we have notified that the port is down, in-progress resets should abort immediately. Return -ENODEV from ->lldd_I_T_nexus_reset() to indicate that libata error handling should end.

---
 drivers/scsi/isci/port_config.c |    5 -----
 drivers/scsi/isci/task.c        |    2 +-
 2 files changed, 1 insertions(+), 6 deletions(-)
drivers/scsi/isci/port_config.c +0 -5
index 85c77f6b802b..4b84d204db01 100644
@@ -617,11 +617,6 @@ static void sci_apc_agent_link_up(struct isci_host *ihost,
 		/* the phy is already the part of the port */
 		u32 port_state = iport->sm.current_state_id;
 
-		/* if the PORT'S state is resetting then the link up is from
-		 * port hard reset in this case, we need to tell the port
-		 * that link up is recieved
-		 */
-		BUG_ON(port_state != SCI_PORT_RESETTING);
 		port_agent->phy_ready_mask |= 1 << phy_index;
 		sci_port_link_up(iport, iphy);
 	}
drivers/scsi/isci/task.c +1 -1
index 0d30ca849e8f..5d6fda72d659 100644
@@ -801,7 +801,7 @@ int isci_task_I_T_nexus_reset(struct domain_device *dev)
 		/* XXX: need to cleanup any ireqs targeting this
 		 * domain_device
 		 */
-		ret = TMF_RESP_FUNC_COMPLETE;
+		ret = -ENODEV;
 		goto out;
 	}
 
#1 lore raw

Do anybody know the format of bsg device node name?

For example of bsg device node name:
[4:0:0:0]

Each field is Hex or Dec?

[BackGroup]
I am using lsscsi -g command to get SCSI device list as the following.
If bsg device name's target number field is over ten, Will it display [4:0:10:0] or [4:0:a:0]?

# lsscsi -g
[0:0:0:0]    cd/dvd  HL-DT-ST DVD+-RW GSA-H53N B104  /dev/sr0   /dev/sg0
[3:0:0:0]    disk    ATA      WDC WD1600AAJS-1 05.0  /dev/sda   /dev/sg1
[4:0:0:0]    disk    ATA      Hitachi HDT72102 A31B  /dev/sdb   /dev/sg2
[4:0:1:0]    disk    ATA      Hitachi HDT72502 A73A  /dev/sdc   /dev/sg3
[4:0:2:0]    disk    ATA      Hitachi HDT72502 A73A  /dev/sdd   /dev/sg4
[4:0:3:0]    disk    ATA      Hitachi HDT72502 A73A  /dev/sde   /dev/sg5
[4:0:4:0]    disk    ATA      Hitachi HDT72502 A73A  /dev/sdf   /dev/sg6
[4:0:5:0]    disk    ATA      Hitachi HDT72502 A73A  /dev/sdg   /dev/sg7
[4:0:6:0]    disk    ATA      Hitachi HDT72502 A73A  /dev/sdh   /dev/sg8
[4:0:7:0]    disk    ATA      Hitachi HDT72502 A73A  /dev/sdi   /dev/sg9
[4:0:8:0]    enclosu LSI      SAS616x          0502  -         /dev/sg10

Thanks !

#2 lore raw

Re: Do anybody know the format of bsg device node name?

Quoted 10 lines · Newtech Tan

For example of bsg device node name:
[4:0:0:0]

Each field is Hex or Dec?

[BackGroup]
I am using lsscsi -g command to get SCSI device list as the following.
If bsg device name's target number field is over ten, Will it display [4:0:10:0] or [4:0:a:0]?

Quoted 12 lines
# lsscsi -g
[0:0:0:0]    cd/dvd  HL-DT-ST DVD+-RW GSA-H53N B104  /dev/sr0   /dev/sg0
[3:0:0:0]    disk    ATA      WDC WD1600AAJS-1 05.0  /dev/sda   /dev/sg1
[4:0:0:0]    disk    ATA      Hitachi HDT72102 A31B  /dev/sdb   /dev/sg2
[4:0:1:0]    disk    ATA      Hitachi HDT72502 A73A  /dev/sdc   /dev/sg3
[4:0:2:0]    disk    ATA      Hitachi HDT72502 A73A  /dev/sdd   /dev/sg4
[4:0:3:0]    disk    ATA      Hitachi HDT72502 A73A  /dev/sde   /dev/sg5
[4:0:4:0]    disk    ATA      Hitachi HDT72502 A73A  /dev/sdf   /dev/sg6
[4:0:5:0]    disk    ATA      Hitachi HDT72502 A73A  /dev/sdg   /dev/sg7
[4:0:6:0]    disk    ATA      Hitachi HDT72502 A73A  /dev/sdh   /dev/sg8
[4:0:7:0]    disk    ATA      Hitachi HDT72502 A73A  /dev/sdi   /dev/sg9
[4:0:8:0]    enclosu LSI      SAS616x          0502  -         /dev/sg10

/dev/bsg/0:0:0:0
/dev/bsg/3:0:0:0
/dev/bsg/4:0:0:0
etc

Depending on your shell you may need to escape the ":" characters (or surround the whole string in quotes).

Also CONFIG_BLK_DEV_BSG needs to be defined in your kernel build but as udev needs that, that is probably already the case.

Looks like you have a SAS expander there as well. It will have a bsg node name like:
/dev/bsg/expander-4:0
that my smp_utils package can use. There might also be a SAS host node like this:
/dev/bsg/sas_host4

Doug Gilbert

Acked-by on v1 1/1
#3 lore raw
In reply to Dan Williams
Quoted 6 lines · Dan J

Remove an erroneous BUG_ON() in the case of a hard reset timeout. If a SATA device is unable to restore the link in time we expect the port to go back to the "awaiting link-up" state. Since the timeout path notified libsas that the port is down, we want to notify libsas when it returns and expect that the port may not be in the "resetting" state.

Quoted 8 lines

Also, once we have notified that the port is down, in-progress resets should abort immediately. Return -ENODEV from ->lldd_I_T_nexus_reset() to indicate that libata error handling should end.