> -----Original Message----- > From: Christoph Hellwig [mailto:hch@xxxxxx] > Sent: Thursday, 30 October, 2014 4:27 AM > To: linux-scsi@xxxxxxxxxxxxxxx > Cc: Douglas Gilbert; Elliott, Robert (Server Storage) > Subject: [PATCH 4/6] st: call scsi_set_medium_removal directly > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > --- > drivers/scsi/st.c | 13 ++++++------- > 1 file changed, 6 insertions(+), 7 deletions(-) > > diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c > index 7d2e036..e46e02b2 100644 > --- a/drivers/scsi/st.c > +++ b/drivers/scsi/st.c > @@ -861,17 +861,16 @@ static int set_mode_densblk(struct scsi_tape * > STp, struct st_modedef * STm) > /* Lock or unlock the drive door. Don't use when st_request > allocated. */ > static int do_door_lock(struct scsi_tape * STp, int do_lock) > { > - int retval, cmd; > + int retval; > > - cmd = do_lock ? SCSI_IOCTL_DOORLOCK : SCSI_IOCTL_DOORUNLOCK; > DEBC_printk(STp, "%socking drive door.\n", do_lock ? "L" : > "Unl"); > - retval = scsi_ioctl(STp->device, cmd, NULL); > - if (!retval) { > + > + retval = scsi_set_medium_removal(STp->device, > + do_lock ? SCSI_REMOVAL_PREVENT : > SCSI_REMOVAL_ALLOW); > + if (!retval) > STp->door_locked = do_lock ? ST_LOCKED_EXPLICIT : > ST_UNLOCKED; > - } > - else { > + else > STp->door_locked = ST_LOCK_FAILS; > - } > return retval; > } Reviewed-by: Robert Elliott <elliott@xxxxxx> A few comments spawned by this (and patch 5/6): 1. Although PREVENT ALLOW MEDIUM REMOVAL was a generic command defined in SPC-2, In 2006 T10 proposal 06-248r1 changed it to be a command-set specific command for SPC-3. MMC, SSC, SBC, and SMC had slight differences and the groups wouldn't agree on a converged definition. For example: * SSC and SBC only define two of the bit combinations in byte 4 bits 1:0 - allowed and prevented * MMC defines all four combinations of byte 4 bits 1:0 - unlocked, locked, persistent allow, and persistent prevent * SMC follows SSC/SBC but adds a PREEMPT bit in byte 4 bit 7 So, relying on one SCSI-wide scsi_set_medium_removal call could theoretically be a problem (though not yet, since none of those extra features are used). 2. Reviewing the callers for scsi_set_medium_removal, I noticed sd.c sd_release ignores the return value from scsi_set_medium_removal (like many others). Its comment says: * Returns 0. but it is a void function so doesn't really return anything: static void sd_release(struct gendisk *disk, fmode_t mode) 3. Reviewing the callers, st_release has an initialized result variable but does nothing else with it but return it: int result = 0; ... return result; It ignores the do_door_lock -> scsi_set_medium_removal result (like many others). --- Rob Elliott HP Server Storage -- 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