git: 966c6be6c8be - main - umass: fail synchronize_cache
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 07 May 2025 21:37:05 UTC
The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=966c6be6c8be74d67303f99b5f2d0329de5b64e7 commit 966c6be6c8be74d67303f99b5f2d0329de5b64e7 Author: Warner Losh <imp@FreeBSD.org> AuthorDate: 2025-05-07 16:07:05 +0000 Commit: Warner Losh <imp@FreeBSD.org> CommitDate: 2025-05-07 21:36:54 +0000 umass: fail synchronize_cache When we know the umass device doesn't support synchronize cache (either probed or hard quirk), fail the command w/o sending it to the device. The da driver is the only driver that sends this command, and since this filter was written has grown the ability to catch the failure and never send the command again. In an ideal world, we'd let the da driver work this out. However, there's a lot of devices that hang when this command is sent in a way that's impossible to detect other than a black list. There's also a number that require a hard USB endpoint reset to recover, which the autoquirk code takes care of. So umass has to act as a filter. By failing this command, we're able to avoid upper level BIO_FLUSH commands by tagging the underlying disk as not supporting that. Differential Revision: https://reviews.freebsd.org/D49466 Sponsored by: Netflix --- sys/dev/usb/storage/umass.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sys/dev/usb/storage/umass.c b/sys/dev/usb/storage/umass.c index 145c2ba81b3c..0a62e97a07fe 100644 --- a/sys/dev/usb/storage/umass.c +++ b/sys/dev/usb/storage/umass.c @@ -2290,9 +2290,7 @@ umass_cam_action(struct cam_sim *sim, union ccb *ccb) } } else if (sc->sc_transfer.cmd_data[0] == SYNCHRONIZE_CACHE) { if (sc->sc_quirks & NO_SYNCHRONIZE_CACHE) { - ccb->csio.scsi_status = SCSI_STATUS_OK; - ccb->ccb_h.status = CAM_REQ_CMP; - xpt_done(ccb); + umass_cam_illegal_request(ccb); goto done; } } else if (sc->sc_transfer.cmd_data[0] == START_STOP_UNIT) {