[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <YwkW6pZoZcua9eoN@rowland.harvard.edu>
Date: Fri, 26 Aug 2022 14:54:34 -0400
From: Alan Stern <stern@...land.harvard.edu>
To: Krishna Kurapati <quic_kriskura@...cinc.com>
Cc: Maxim Devaev <mdevaev@...il.com>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Felipe Balbi <balbi@...nel.org>, linux-usb@...r.kernel.org,
linux-kernel@...r.kernel.org, quic_jackp@...cinc.com
Subject: Re: [PATCH] usb: gadget: mass_storage: Fix cdrom data transfers on
MAC-OS
On Fri, Aug 26, 2022 at 11:02:22PM +0530, Krishna Kurapati wrote:
> During cdrom emulation, the response to read_toc command must contain
> the cdrom address as the number of sectors (2048 byte sized blocks)
> represented either as an absolute value (when MSF bit is '0') or in
> terms of PMin/PSec/PFrame (when MSF bit is set to '1'). Incase of
> cdrom, the fsg_lun_open call sets the number of sectors to 2048 byte
Sets the sector size to 2048 bytes, not the number of sectors.
> sized blocks.
>
> When MAC OS sends a read_toc request with MSF set to '1', the
> store_cdrom_address assumes that the address being provided is the
> LUN size represented in 512 byte sized blocks instead of 2048. It
> tries to modify the address further to convert it to 2048 byte sized
> blocks and store it in MSF format. This results in data transfer
> failures as the cdrom address being provided in the read_toc response
> is incorrect.
>
> Fixes: 3f565a363cee ("usb: gadget: storage: adapt logic block size to bound block devices")
> Signed-off-by: Krishna Kurapati <quic_kriskura@...cinc.com>
Should include "Cc: stable@...r.kernel.org".
> ---
> drivers/usb/gadget/function/storage_common.c | 1 -
> 1 file changed, 1 deletion(-)
>
> diff --git a/drivers/usb/gadget/function/storage_common.c b/drivers/usb/gadget/function/storage_common.c
> index 03035db..db40392 100644
> --- a/drivers/usb/gadget/function/storage_common.c
> +++ b/drivers/usb/gadget/function/storage_common.c
> @@ -295,7 +295,6 @@ void store_cdrom_address(u8 *dest, int msf, u32 addr)
> {
> if (msf) {
> /* Convert to Minutes-Seconds-Frames */
> - addr >>= 2; /* Convert to 2048-byte frames */
Please leave a comment here saying that we already know the sector size
is 2048 bytes.
> addr += 2*75; /* Lead-in occupies 2 seconds */
> dest[3] = addr % 75; /* Frames */
> addr /= 75;
Otherwise this is okay. In your next submission you can add:
Acked-by: Alan Stern <stern@...land.harvard.edu>
Alan Stern
Powered by blists - more mailing lists