git: db860eb348ad - main - umass: Document the ideal that it's better to fail bad commands
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 07 May 2025 21:37:06 UTC
The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=db860eb348ad20e4c4be09c9b65cdf0a3b1b57c2 commit db860eb348ad20e4c4be09c9b65cdf0a3b1b57c2 Author: Warner Losh <imp@FreeBSD.org> AuthorDate: 2025-05-07 16:07:11 +0000 Commit: Warner Losh <imp@FreeBSD.org> CommitDate: 2025-05-07 21:36:54 +0000 umass: Document the ideal that it's better to fail bad commands Generally, lying to the periph drivers about commands working is a bad idea. They cannot get a global insight into the actual capacities of the device when commands just work. There's good reason to intercept bad commands at times, and to prevent the device from being exposed to commands that, for example, hand the device. However, upper layer periph drivers is the better place to cope with devices that don't support the commands since it can make other inferences about the device when it has wider knowledge. But this represents a change in philosphy, so document that as well. This shift happened for some commands a while ago. Many of the quirks existed only to avoid whining errors on boot that were benign and were a big burden. So da and cd slowly stopped the whining. Except in cases where the command hangs the drive, we should limit new quirks and avoid overly broad quirks (things work, but are less performant or reliable, again mostly to avoid harmless errors that are no longer printed). Other sims will likely need some help with this. Differential Revision: https://reviews.freebsd.org/D49467 Sponsored by: Netflix --- sys/dev/usb/storage/umass.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sys/dev/usb/storage/umass.c b/sys/dev/usb/storage/umass.c index 0a62e97a07fe..8922b3770e6a 100644 --- a/sys/dev/usb/storage/umass.c +++ b/sys/dev/usb/storage/umass.c @@ -2230,6 +2230,13 @@ umass_cam_action(struct cam_sim *sim, union ccb *ccb) * command format needed by the specific command set * and return the converted command in * "sc->sc_transfer.cmd_data" + * + * For commands we know the device doesn't support, we + * either complete them with an illegal request, or fake + * the completion, based on what upper layers tolerate. + * Ideally, we'd let the periph drivers know and not + * fake things up, but some periphs fall short of the + * ideal. */ if (umass_std_transform(sc, ccb, cmd, ccb->csio.cdb_len)) { if (sc->sc_transfer.cmd_data[0] == INQUIRY) {