* [PATCH RE-RESEND] Mass storage gadget: Handle eject request
@ 2010-04-26 10:34 fabien.chouteau
2010-04-27 12:19 ` Chouteau Fabien
0 siblings, 1 reply; 3+ messages in thread
From: fabien.chouteau @ 2010-04-26 10:34 UTC (permalink / raw)
To: linux-usb
Cc: Fabien Chouteau, David Brownell, Greg Kroah-Hartman,
Michal Nazarewicz, Peter Korsgaard, linux-kernel
From: Fabien Chouteau <fabien.chouteau@barco.com>
This patch adds handling of the "Start/Stop Unit" SCSI request
to simulate media ejection.
Signed-off-by: Fabien Chouteau <fabien.chouteau@barco.com>
---
drivers/usb/gadget/f_mass_storage.c | 48 ++++++++++++++++++++++++++++++++--
1 files changed, 45 insertions(+), 3 deletions(-)
diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c
index f4911c0..c3e5dbb 100644
--- a/drivers/usb/gadget/f_mass_storage.c
+++ b/drivers/usb/gadget/f_mass_storage.c
@@ -163,6 +163,10 @@
* ro setting are not allowed when the medium is loaded or if CD-ROM
* emulation is being used.
*
+ * When a LUN receive an "eject" SCSI request (Start/Stop Unit),
+ * if the LUN is removable, the backing file is released to simulate
+ * ejection.
+ *
*
* This function is heavily based on "File-backed Storage Gadget" by
* Alan Stern which in turn is heavily based on "Gadget Zero" by David
@@ -1385,12 +1389,50 @@ static int do_mode_sense(struct fsg_common *common, struct fsg_buffhd *bh)
static int do_start_stop(struct fsg_common *common)
{
- if (!common->curlun) {
+ struct fsg_lun *curlun = common->curlun;
+ int loej, start;
+
+ if (!curlun) {
return -EINVAL;
- } else if (!common->curlun->removable) {
- common->curlun->sense_data = SS_INVALID_COMMAND;
+ } else if (!curlun->removable) {
+ curlun->sense_data = SS_INVALID_COMMAND;
+ return -EINVAL;
+ }
+
+ loej = common->cmnd[4] & 0x02;
+ start = common->cmnd[4] & 0x01;
+
+ /* eject code from file_storage.c:do_start_stop() */
+
+ if ((common->cmnd[1] & ~0x01) != 0 || /* Mask away Immed */
+ (common->cmnd[4] & ~0x03) != 0) { /* Mask LoEj, Start */
+ curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
return -EINVAL;
}
+
+ if (!start) {
+ /* Are we allowed to unload the media? */
+ if (curlun->prevent_medium_removal) {
+ LDBG(curlun, "unload attempt prevented\n");
+ curlun->sense_data = SS_MEDIUM_REMOVAL_PREVENTED;
+ return -EINVAL;
+ }
+ if (loej) { /* Simulate an unload/eject */
+ up_read(&common->filesem);
+ down_write(&common->filesem);
+ fsg_lun_close(curlun);
+ up_write(&common->filesem);
+ down_read(&common->filesem);
+ }
+ } else {
+
+ /* Our emulation doesn't support mounting; the medium is
+ * available for use as soon as it is loaded. */
+ if (!fsg_lun_is_open(curlun)) {
+ curlun->sense_data = SS_MEDIUM_NOT_PRESENT;
+ return -EINVAL;
+ }
+ }
return 0;
}
--
1.7.0.5
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH RE-RESEND] Mass storage gadget: Handle eject request
2010-04-26 10:34 [PATCH RE-RESEND] Mass storage gadget: Handle eject request fabien.chouteau
@ 2010-04-27 12:19 ` Chouteau Fabien
2010-04-28 7:55 ` Michał Nazarewicz
0 siblings, 1 reply; 3+ messages in thread
From: Chouteau Fabien @ 2010-04-27 12:19 UTC (permalink / raw)
To: linux-usb
Cc: Fabien Chouteau, David Brownell, Greg Kroah-Hartman,
Michal Nazarewicz, Peter Korsgaard, linux-kernel
On Mon, Apr 26, 2010 at 12:34 PM, <fabien.chouteau@gmail.com> wrote:
>
> From: Fabien Chouteau <fabien.chouteau@barco.com>
>
> This patch adds handling of the "Start/Stop Unit" SCSI request
> to simulate media ejection.
Any comments on the last version?
--
Fabien Chouteau
EPITA GISTR 2010
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH RE-RESEND] Mass storage gadget: Handle eject request
2010-04-27 12:19 ` Chouteau Fabien
@ 2010-04-28 7:55 ` Michał Nazarewicz
0 siblings, 0 replies; 3+ messages in thread
From: Michał Nazarewicz @ 2010-04-28 7:55 UTC (permalink / raw)
To: Chouteau Fabien, linux-usb
Cc: Fabien Chouteau, David Brownell, Greg Kroah-Hartman,
Peter Korsgaard, linux-kernel
> On Mon, Apr 26, 2010 at 12:34 PM, <fabien.chouteau@gmail.com> wrote:
>> This patch adds handling of the "Start/Stop Unit" SCSI request
>> to simulate media ejection.
On Tue, 27 Apr 2010 14:19:42 +0200, Chouteau Fabien <fabien.chouteau@gmail.com> wrote:
> Any comments on the last version?
As far as I'm concerned, it looks fine.
--
Best regards, _ _
| Humble Liege of Serenely Enlightened Majesty of o' \,=./ `o
| Computer Science, Michał "mina86" Nazarewicz (o o)
+----[mina86*mina86.com]---[mina86*jabber.org]----ooO--(_)--Ooo--
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-04-28 7:54 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-04-26 10:34 [PATCH RE-RESEND] Mass storage gadget: Handle eject request fabien.chouteau
2010-04-27 12:19 ` Chouteau Fabien
2010-04-28 7:55 ` Michał Nazarewicz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®