Module Name: src Committed By: mlelstv Date: Thu May 30 21:44:50 UTC 2019
Modified Files: src/sys/dev/usb: umass_scsipi.c Log Message: ATA passthrough commands, supported by many SPC-2 disks, require more sense data. To generate a diff of this commit: cvs rdiff -u -r1.61 -r1.62 src/sys/dev/usb/umass_scsipi.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/usb/umass_scsipi.c diff -u src/sys/dev/usb/umass_scsipi.c:1.61 src/sys/dev/usb/umass_scsipi.c:1.62 --- src/sys/dev/usb/umass_scsipi.c:1.61 Thu Mar 28 10:44:29 2019 +++ src/sys/dev/usb/umass_scsipi.c Thu May 30 21:44:49 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: umass_scsipi.c,v 1.61 2019/03/28 10:44:29 kardel Exp $ */ +/* $NetBSD: umass_scsipi.c,v 1.62 2019/05/30 21:44:49 mlelstv Exp $ */ /* * Copyright (c) 2001, 2003, 2012 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: umass_scsipi.c,v 1.61 2019/03/28 10:44:29 kardel Exp $"); +__KERNEL_RCSID(0, "$NetBSD: umass_scsipi.c,v 1.62 2019/05/30 21:44:49 mlelstv Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -458,7 +458,7 @@ umass_scsipi_cb(struct umass_softc *sc, cmdlen = UFI_COMMAND_LENGTH; /* XXX */ else cmdlen = sizeof(scbus->sc_sense_cmd); - if (periph->periph_version < 0x05) /* SPC-3 */ + if (periph->periph_version < 0x04) /* SPC-2 */ senselen = 18; else senselen = sizeof(xs->sense); @@ -498,6 +498,7 @@ umass_scsipi_sense_cb(struct umass_softc { UMASSHIST_FUNC(); UMASSHIST_CALLED(); struct scsipi_xfer *xs = priv; + size_t extra; DPRINTFM(UDMASS_CMD, "sc %#jx: xs=%#jx residue=%jd status=%jd", (uintptr_t)sc, (uintptr_t)xs, residue, status); @@ -507,7 +508,9 @@ umass_scsipi_sense_cb(struct umass_softc case STATUS_CMD_OK: case STATUS_CMD_UNKNOWN: /* getting sense data succeeded */ - if (residue == 0 || residue == 14)/* XXX */ + extra = sizeof(xs->sense.scsi_sense) + - sizeof(xs->sense.scsi_sense.extra_bytes); + if (residue <= extra) xs->error = XS_SENSE; else xs->error = XS_SHORTSENSE;