On Tue, Feb 14, 2012 at 10:33 AM, Michael S. Tsirkin <mst@xxxxxxxxxx> wrote: > On Tue, Feb 14, 2012 at 10:30:59AM +1100, ronnie sahlberg wrote: >> On Tue, Feb 14, 2012 at 9:59 AM, Michael S. Tsirkin <mst@xxxxxxxxxx> wrote: >> > On Tue, Feb 14, 2012 at 07:53:26AM +1100, ronnie sahlberg wrote: >> >> On Tue, Feb 14, 2012 at 7:42 AM, ronnie sahlberg >> >> <ronniesahlberg@xxxxxxxxx> wrote: >> >> > On Tue, Feb 14, 2012 at 2:12 AM, Hannes Reinecke <hare@xxxxxxx> wrote: >> >> >> On 02/13/2012 02:18 PM, Michael S. Tsirkin wrote: >> >> >>> On Tue, Feb 14, 2012 at 12:13:36AM +1100, ronnie sahlberg wrote: >> >> >>>> On Tue, Feb 14, 2012 at 12:00 AM, Michael S. Tsirkin <mst@xxxxxxxxxx> wrote: >> >> >>>>> On Mon, Feb 13, 2012 at 02:54:03PM +0200, Dor Laor wrote: >> >> >>>>>> Only if you use the pci multi-function option but that kills >> >> >>>>>> standard hot unplug >> >> >>>>> >> >> >>>>> It doesn't kill it as such, rather you can't unplug luns individually. >> >> >>>> >> >> >>>> Isnt that just a consequence of the current implementation rather than >> >> >>>> a SCSI limitation? >> >> >>> >> >> >>> Yes. >> >> >>> >> >> >>>> A different way to do hoplug could be to flag all devices as removable >> >> >>>> in the standard inq page then >> >> >>>> leave the LUN there persistently and what you remove/add is not the >> >> >>>> LUN device itself but just the media in the device. >> >> >>>> >> >> >>>> Instead of hot-plug remove the LUN, hot-plug becomes "media eject" or >> >> >>>> "media insert". >> >> >>>> The device remains present all time, you never remove it, but instead >> >> >>>> hot-plug controls if the media is present or not. >> >> >>>> >> >> >>>> >> >> >>>> This would require implementing at least START_STOP_UNIT and >> >> >>>> PREVENT_ALLOW_MEDIUM_REMOVAL opcode emulation from SBC. >> >> >>>> >> >> >>>> >> >> >>>> regards >> >> >>>> ronnie sahlberg >> >> >>> >> >> >>> That would work. >> >> >>> >> >> >> Or we simply use the Peripheral Qualifier that the device is gone; >> >> >> eg we could simply set PQ = 1, return sense code 0x25/00 and be done >> >> >> with ... >> >> >> >> >> > >> >> > That is still similar to "rip a device out from the guest without notice" >> >> > and can cause the guest to be "surprised". >> >> > >> >> > >> >> > Removable media is standard feature in SCSI SBC (and other commandsets). >> >> > The nice part of removable media is that it activates a contract >> >> > between the device and the guest >> >> > to prevent removal of the media when the guest depends on the media >> >> > not being removed. >> >> > >> >> > I.e. If you have a SBC device with the removable-media bit set, >> >> > this is used to tell the initiator "this media can be removed, be >> >> > prepared that this might happen". >> >> > So when you mount such a SBC device in the guest, the guest will issue >> >> > a "PREVENT_ALLOW_MEDIUM_REMOVAL" >> >> > to tell the device "this medium is in use and may not be removed". >> >> > >> >> >> >> What I mean is that if /dev/sdb is removable, >> >> if you mount this as "mount /dev/sdb1 /mnt" >> >> this will automatically cause the guest kernel to send a >> >> PREVENT_ALLOW_MEDIUM_REMOVAL to /dev/sdb to prevent removal. >> >> >> >> When you "umount /dev/sdb1" the kernel/guest will automagically send >> >> PREVENT_ALLOW_MEDIUM_REMOVEAL to /dev/sdb and allow removal of the >> >> media again. >> >> >> >> >> >> If you capture this command and track the "prevent/allow removal >> >> status" you automatically get a channel where qemu will >> >> know when it is safe to unplug the device and when it is not safe to >> >> unplug the device. >> >> This is a nice feature. >> > >> > Presumably there's a way for device to notify the OS >> > that user requested removal, as well? >> >> >> I think that is done by responding with sense to one of the commands, >> like the every few second TEST_UNIT_READY that the >> initiator/guest-kernel will send. > > Does it do this even for mounted media? > I didn't realize ... Yes it does. At least for SBC devices that are flagged as removable. "Normal" SBC devices that are not removable might trigger different behaviour in the kernel. (endless string of TEST_UNIT_READY is a way to check if something "unexpected" happens on the device.) I just tested on a 3.0.0 kernel. I have a mediachanger for SBC and the SBC is flagged as removable. /dev/sdd is the iscsi lun with a removable SBC disk. By just exposing this device to the kernel, the kernel keeps sending, or if not the kernel maybe some other process trying to poll the status? every few seconds : PREVENT_ALLOW_MEDIUM_REMOVAL prevent removal PREVENT_ALLOW_MEDIUM_REMOVAL to immediatel change it back to allow removal again TEST_UNIT_READY After I run this mount /dev/sdd1 /mnt The kernel sends a single PREVENT_ALLOW_MEDIUM_REMOVAL to prevent removal then every few seconds a TEST_UNIT_READY This is what it does for removable SBC disks. Maybe it does something differently for "permanent" SBC disks. regards ronnie sahlberg -- 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