Christoph, > +static void sd_read_security(struct scsi_disk *sdkp, unsigned char *buffer) > +{ > + struct scsi_device *sdev = sdkp->device; > + > + if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, > + SECURITY_PROTOCOL_IN) == 1 && > + scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, > + SECURITY_PROTOCOL_OUT) == 1) > + sdkp->security = 1; > +} > + > /** > * sd_revalidate_disk - called the first time a new disk is seen, > * performs disk spin up, read_capacity, etc. > @@ -3067,6 +3102,7 @@ static int sd_revalidate_disk(struct gendisk *disk) > sd_read_cache_type(sdkp, buffer); > sd_read_app_tag_own(sdkp, buffer); > sd_read_write_same(sdkp, buffer); > + sd_read_security(sdkp, buffer); > } For WRITE SAME, scsi_report_opcode() is gated not only by sdev->no_report_opcodes but by sdev->no_write_same. I'm concerned about firing off REPORT OPCODES to random devices without a sufficiently good heuristic. Doesn't look like SAT has anything to offer in this department, though. Maybe it's time to consider a vendor-specific Linux VPD page... -- Martin K. Petersen Oracle Linux Engineering