Messages in this thread | | | Date | Mon, 30 Aug 2004 13:19:59 -0400 | From | Jeff Garzik <> | Subject | Re: [patch] libata: add ioctls to support SMART |
| |
John W. Linville wrote: > Support for HDIO_DRIVE_CMD and HDIO_DRIVE_TASK in libata. Useful for > supporting SMART w/ unmodified smartctl and smartd userland binaries.
First let me say that it's a damn fine first attempt, and people should be able to use this for SMART until support is merged officially.
> Not happy w/ loop after failed ata_qc_new_init(), but needed because smartctl > and smartd did not retry after failure. Likely need an option to wait for > available qc? Also not sure all the error return codes are correct...
I'd like to implement it a bit differently, and I think this different method will solve some of the open questions you have.
Take a look at http://www.t10.org/ftp/t10/document.04/04-260r2.pdf
I would like to implement HDIO_DRIVE_CMD and HDIO_DRIVE_TASK completely inside libata-scsi.c. These ioctls should translate the ioctl arguments into an ATA-passthru SCSI command, and use the standard "issue a scsi command" kernel API to submit the command and wait for a result.
That implies, then, that you would add code to libata-scsi.c that translates the ATA-passthru SCSI command into an ATA command using the ata_scsi_translate() infrastructure.
Note that you'll need to make up a SCSI opcode, inside the SCSI vendor-specific opcode space, since the ATA-passthru hasn't yet been assigned an official SCSI opcode. SPC-3 (http://www.t10.org/ftp/t10/drafts/spc3/spc3r20a.pdf) lists the available opcodes in section C.3, denoted with a 'V' across all columns.
Once libata-scsi.c can handle the ATA-passthru SCSI command, implementing HDIO_DRIVE_{TASK,CMD} should be quite trivial.
And SMART support will be complete :)
Jeff
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |