Hello, all. This item was on TODO list for years now. People all agree that it's necessary but it always had relatively low priority probably because it's a bit difficult and isn't really necessary to make disks and optical drives work. Anyways, I think it's about time to take some action as SAS-ATA integration (Brian, sorry about staying so silent about this for long time, I was following the threads but couldn't really think of a quick solution) and other ATA specific things including link power management and bunch of other deferred ones due to lack of proper sysfs interface or high level driver (parallel probing, parallel resume). Currently, my plan is... * Move high level driver handling to request_queue. * Implement queue quiescing and other state management on request_queue. * Implement block_queue_group which... - Handles command scheduling. - Handles grouped queue quiescing and EH handling * Move SCSI high level drivers to new infrastructure * Convert libata to use new command scheduling and EH infrastructure * Apply driver model to libata. * Implement ata_disk ATA high level driver. In the process, I'm planning to remove ata_host requirement and break down libata EH into actions and sequencers so that SAS can use them easily. The biggest problem is how to keep userland happy. hdX -> sdX transition was painful enough and I have a strong feeling that everyone will come after and hunt down us if we try something like sdX -> bdX now. :-) It would be ideal if those ATA specific sysfs stuff just shows up without disturbing the original SCSI things which are now widely used for enumeration and manipulation. I think we can get pretty close by modifying SCSI high level drivers a bit such that they don't register block devices for SCSI devices created to keep backward compatibility. This is an extra burden on SCSI but it's gonna be the last one. *** Currently, sysfs nodes for a libata disk is like the following. /devices/DEV/hostH/targetH:C:I/H:C:I:L/ driver -> /bus/scsi/drivers/sd generic -> /class/scsi_generic/sgN block/sdX/ device -> ../../ partitions... /bus/scsi/devices/H:C:I:L -> /devices/DEV/hostH/targetH:C:I/H:C:I:L /bus/scsi/drivers/sd/H:C:I:L -> /devices/DEV/hostH/targetH:C:I/H:C:I:L /class/scsi_host/hostH/device -> /devices/DEV/hostH /class/scsi_device/H:C:I:L/device -> /devices/DEV/hostH/targetH:C:I/H:C:I:L /class/scsi_disk/H:C:I:L/device -> /devices/DEV/hostH/targetH:C:I/H:C:I:L /class/scsi_generic/sgN/device -> /devices/DEV/hostH/targetH:C:I/H:C:I:L /block/sda -> /devices/DEV/hostH/targetH:C:I/H:C:I:L/block/sdX *** After conversion, it will look something like the following. /devices/DEV/ata_port/P/ata_link/P:L/ata_device/P:D driver -> /bus/ata/drivers/ata_disk block/sdX/ device -> ../../ partitions... C scsi_device -> /devices/DEV/scsi_compat/hostH/targetH:C:I/H:C:I:L /bus/ata/devices/P:D -> /devices/DEV/ata_port/P/ata_link/P:L/ata_device/P:D /bus/ata/drivers/ata_disk/P:D -> /devices/DEV/ata_port/P/ata_link/P:L/ata_device/P:D /block/sda -> /devices/DEV/ata_port/P/ata_link/P:L/ata_device/P:D/block/sdX /devices/DEV/scsi_compat/hostH/targetH:C:I/H:C:I:L/ driver -> /bus/scsi/drivers/sd generic -> /class/scsi_generic/sgN C block -> ata_port/P/ata_link/P:L/ata_device/P:D/block C ata_device -> /devices/DEV/ata_port/P/ata_link/P:L/ata_device/P:D /bus/scsi/devices/H:C:I:L -> /devices/DEV/scsi_compat/hostH/targetH:C:I/H:C:I:L /bus/scsi/drivers/sd/H:C:I:L -> /devices/DEV/scsi_compat/hostH/targetH:C:I/H:C:I:L /class/scsi_host/hostH/device -> /devices/DEV/scsi_compat/hostH /class/scsi_device/H:C:I:L/device -> /devices/DEV/scsi_compat/hostH/targetH:C:I/H:C:I:L /class/scsi_disk/H:C:I:L/device -> /devices/DEV/scsi_compat/hostH/targetH:C:I/H:C:I:L /class/scsi_generic/sgN/device -> /devices/DEV/scsi_compat/hostH/targetH:C:I/H:C:I:L The SCSI side of interface will remain as functional as now as it will go through the same libata SAT layer. The only surprise userspace will see aside from the extra ata nodes is that /sys/block/sdX/device will lead to an ATA device node instead of SCSI device node. Well, that's the whole point of the converion but I think the surprise can be minimized by reusing names used in SCSI device node and possibly making symlinks for nodes which only makes sense for SCSI device. So, what do you guys think? Thanks. PS. Brian, can you please point me to the latest version of libata EH integration patch? -- tejun -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html