Jeff!
I have some questions concerning HOTPLUG and RAID support for ICH9 chip
used in my server.
I spent some time to know what is linux kernel support for enclosure
LEDs in HDD bays. I found no such support however it is described into
ICH9' datasheet. I am using linux debian with kernel 2.6.25. Latest
kernel for debian is 2.6.26 and it also does not have any enclosure
management support. However, I found some support in sources of kernel
2.6.28, however it seems only activity led is supported. That's why I
wrote a little kernel module wich takes control over that ACHI
functionality and tries to do enclosure management just behind
traditional ahci driver. It works fine but I faced to one strange thing.
Namely, I can control LEDs of those drives that are physically inserted
into backplane. If the slot is empty since last reboot its LEDS cannot
be controlled. I studied why this is so. An answer to this seems to be
that ahci driver does not enable entire port of SATA controller if it is
not populated during boot. To check this I tried some hot swap actions.
First, I have extracted one of my spare drives and push it back. I got
the following logs:
--
ata3: exception Emask 0x50 SAct 0x0 SErr 0x4090800 action 0xe frozen
ata3: irq_stat 0x00400040, connection status changed
ata3: SError: { HostInt PHYRdyChg 10B8B DevExch }
ata3: hard resetting link
ata3: SATA link down (SStatus 0 SControl 300)
ata3: failed to recover some devices, retrying in 5 secs
ata3: hard resetting link
ata3: SATA link down (SStatus 0 SControl 300)
ata3: failed to recover some devices, retrying in 5 secs
ata3: hard resetting link
ata3: SATA link down (SStatus 0 SControl 300)
ata3.00: disabled
ata3: EH complete
ata3.00: detaching (SCSI 2:0:0:0)
sd 2:0:0:0: [sdc] Synchronizing SCSI cache
sd 2:0:0:0: [sdc] Result: hostbyte=DID_BAD_TARGET
driverbyte=DRIVER_OK,SUGGEST_OK
sd 2:0:0:0: [sdc] Stopping disk
sd 2:0:0:0: [sdc] START_STOP FAILED
sd 2:0:0:0: [sdc] Result: hostbyte=DID_BAD_TARGET
driverbyte=DRIVER_OK,SUGGEST_OK
ahci em: 40: post command 00080002
ata3: exception Emask 0x10 SAct 0x0 SErr 0x4050002 action 0xa frozen
ata3: irq_stat 0x00400040, connection status changed
ata3: SError: { RecovComm PHYRdyChg CommWake DevExch }
ata3: hard resetting link
ata3: softreset failed (device not ready)
ata3: hard resetting link
ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
ata3.00: ATA-7: ST3500320AS, SD04, max UDMA/133
ata3.00: 976773168 sectors, multi 0: LBA48 NCQ (depth 31/32)
ata3.00: configured for UDMA/133
ata3: EH complete
sd 2:0:0:0: [sdc] Attached SCSI disk
sd 2:0:0:0: Attached scsi generic sg2 type 0
--
This log is strange for me. It seems that system missed the point that
the drives was going out. First it tried to reinitialize the SATA link
for three times. Then, it tried to sync caches and stop the drive when
it has actually lost connection with HBA. Then disk was returned to the
slot and its softreset failed. Why? I suspect the drive did not fully
start when the host tried to establish connection to it.
Another thing happened when I extracted the drive from one slot and
pushed it back into its neigbor that was empty during linux boot up.
Kernel desided this slot is dummy:
---
ahci 0000:00:1f.2: version 3.0
ACPI: PCI Interrupt 0000:00:1f.2[B] -> GSI 17 (level, low) -> IRQ 17
ahci 0000:00:1f.2: AHCI 0001.0200 32 slots 6 ports 3 Gbps 0xb impl SATA mode
ahci 0000:00:1f.2: flags: 64bit ncq sntf led clo pmp pio slum part
PCI: Setting latency timer of device 0000:00:1f.2 to 64
scsi0 : ahci
scsi1 : ahci
scsi2 : ahci
scsi3 : ahci
scsi4 : ahci
scsi5 : ahci
ata1: SATA max UDMA/133 abar m2048@0xd8601000 port 0xd8601100 irq 1275
ata2: SATA max UDMA/133 abar m2048@0xd8601000 port 0xd8601180 irq 1275
ata3: DUMMY
ata4: SATA max UDMA/133 abar m2048@0xd8601000 port 0xd8601280 irq 1275
ata5: DUMMY
ata6: DUMMY
---
So, even if I put the drive as ata3 device kernel does nothing to start it.
Now my questions:
1. Is it possible to force all ports to be potentially populated during
startup. I would prefer that all ICH9 SATA ports will have their own
fixed names, eg. /dev/sata0, ..., /dev/sata5. For now I have 3 drives
and they allways get names /dev/sda /dev/sdb /dev/sdc even if there is
some empty port as shown above. This is not convenient because enclosure
management is linked to physical ports, not to only populated ones.
2. How can I remove SATA drive safely? I mean the behavior similar to
USB drives removing. I'd like to notify the system that i wish to remove
the drive. Then it performs some actions as closing all current
connections, stopping new connections, flushing caches etc. After all
that it updates indicators on backplane showing me that the drive is
ready to be removed. As I see, some portions of this procedure can be
done using hdparm -f -F -Y, but not all.
With best regards, Vladimir Dashevsky
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html