Re: [patch] libata: add ioctls to support SMART

From: Jeff Garzik
Date: Mon Aug 30 2004 - 12:24:38 EST


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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/