Re: [PATCH] usb gadget: remove size limitation for storage cdrom

From: Dave Young
Date: Mon Mar 09 2015 - 01:34:19 EST


On 03/08/15 at 11:29am, Alan Stern wrote:
> On Sun, 8 Mar 2015, Dave Young wrote:
>
> > I used usb cdrom emulation to play video dvd for my daughter, but I got below
> > error:
> >
> > [dave@darkstar tmp]$ cat /mnt/sr1/VIDEO_TS/VTS_01_5.VOB >/dev/null
> > cat: /mnt/sr1/VIDEO_TS/VTS_01_5.VOB: Input/output error
> > [dave@darkstar tmp]$ dmesg|tail -1
> > [ 3349.371857] sr1: rw=0, want=8028824, limit=4607996
> >
> > The assumption of cdrom size is not right, we can create data dvd large then
> > 4G, also mkisofs can create an iso with only one blank directory, the size is
> > less than 300 sectors. The size limit does not make sense, thus remove them.
> >
> > Signed-off-by: Dave Young <dyoung@xxxxxxxxxx>
> > ---
> > drivers/usb/gadget/function/storage_common.c | 9 ---------
> > 1 file changed, 9 deletions(-)
> >
> > --- linux.orig/drivers/usb/gadget/function/storage_common.c
> > +++ linux/drivers/usb/gadget/function/storage_common.c
> > @@ -247,15 +247,6 @@ int fsg_lun_open(struct fsg_lun *curlun,
> >
> > num_sectors = size >> blkbits; /* File size in logic-block-size blocks */
> > min_sectors = 1;
> > - if (curlun->cdrom) {
> > - min_sectors = 300; /* Smallest track is 300 frames */
> > - if (num_sectors >= 256*60*75) {
> > - num_sectors = 256*60*75 - 1;
> > - LINFO(curlun, "file too big: %s\n", filename);
> > - LINFO(curlun, "using only first %d blocks\n",
> > - (int) num_sectors);
> > - }
> > - }
> > if (num_sectors < min_sectors) {
> > LINFO(curlun, "file too small: %s\n", filename);
> > rc = -ETOOSMALL;
>
> NAK. This patch is wrong, for a very simple reason. You wrote:
>
> > I used usb cdrom emulation to play video dvd for my daughter
>
> and this demonstrates the error quite plainly. You can't use _CD_
> emulation to imitate a _DVD_ -- they are different sorts of media.
> Just think of what happens when you try playing a DVD on a CD player.
>
> A more suitable approach would be to add DVD emulation to the driver.
>

They are both iso9660 images, aren't they? So from data image point
of view there's no difference, it is not worth to create another mode
for dvd data.

We should not emulate cd drive to support different cd media type,
it is far more better to support just iso9660 volume no matter how
large the size is as long as it is fit for iso9660 spec.

OTOH, the size limitation is a bug:
* isofs can be less than 300 sectors, the 300 sectors limitation is for
music cd I think. Try mkisofs a blank directory and burn it.

* There's 99 minutes dics even for cdrom, see:
http://en.wikipedia.org/wiki/CD-R
If we code to support different size discs, it will looks like a wrong way.

Thanks
Dave
--
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/