git: b0375f78e32a - main - usb-msctest: Be more conservative setting GETMAXLUN quirk
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 16 Mar 2025 19:25:26 UTC
The branch main has been updated by imp:
URL: https://cgit.FreeBSD.org/src/commit/?id=b0375f78e32acd7947d28126a5e165f8139a5a23
commit b0375f78e32acd7947d28126a5e165f8139a5a23
Author: Warner Losh <imp@FreeBSD.org>
AuthorDate: 2025-03-16 19:20:09 +0000
Commit: Warner Losh <imp@FreeBSD.org>
CommitDate: 2025-03-16 19:23:25 +0000
usb-msctest: Be more conservative setting GETMAXLUN quirk
Only set the GETMAXLUN quirk when it causes an error, but don't set it
when it returns 0. Since we reset the device when we set any quirk, only
set this quirk when it generates an error so umass will avoid it. When
the command works, there's no reason for umass to avoid it at all.
MFC After: 1 week
Sponsored by: Netflix
---
sys/dev/usb/usb_msctest.c | 13 ++++---------
1 file changed, 4 insertions(+), 9 deletions(-)
diff --git a/sys/dev/usb/usb_msctest.c b/sys/dev/usb/usb_msctest.c
index d31baabcf875..7b31d9dadfab 100644
--- a/sys/dev/usb/usb_msctest.c
+++ b/sys/dev/usb/usb_msctest.c
@@ -741,11 +741,10 @@ usb_iface_is_cdrom(struct usb_device *udev, uint8_t iface_index)
return (is_cdrom);
}
-static uint8_t
+static int
usb_msc_get_max_lun(struct usb_device *udev, uint8_t iface_index)
{
struct usb_device_request req;
- usb_error_t err;
uint8_t buf = 0;
/* The Get Max Lun command is a class-specific request. */
@@ -756,11 +755,7 @@ usb_msc_get_max_lun(struct usb_device *udev, uint8_t iface_index)
req.wIndex[1] = 0;
USETW(req.wLength, 1);
- err = usbd_do_request(udev, NULL, &req, &buf);
- if (err)
- buf = 0;
-
- return (buf);
+ return usbd_do_request(udev, NULL, &req, &buf);
}
#define USB_ADD_QUIRK(udev, any, which) do { \
@@ -803,8 +798,8 @@ usb_msc_auto_quirk(struct usb_device *udev, uint8_t iface_index,
usb_pause_mtx(NULL, hz);
if (usb_test_quirk(uaa, UQ_MSC_NO_GETMAXLUN) == 0 &&
- usb_msc_get_max_lun(udev, iface_index) == 0) {
- DPRINTF("Device has only got one LUN.\n");
+ usb_msc_get_max_lun(udev, iface_index) != 0) {
+ DPRINTF("Device can't handle GETMAXLUN\n");
USB_ADD_QUIRK(udev, any_quirk, UQ_MSC_NO_GETMAXLUN);
}