From: Brian Bunker <brian@purestorage.com>
To: bvanassche@acm.org
Cc: hare@suse.de, linux-scsi@vger.kernel.org, krishna.kant@purestorage.com
Subject: Re: [PATCH v3 2/6] scsi: Protect INQUIRY sysfs attributes with mutex
Date: Mon, 4 May 2026 11:36:51 -0700 [thread overview]
Message-ID: <20260504183651.81037-1-brian@purestorage.com> (raw)
In-Reply-To: <b584f42f-534e-4204-9fa6-92ff93ab62ad@acm.org>
On 5/3/26 8:44 AM, Bart Van Assche wrote:
> scsi: core: Convert inquiry information
>
> Convert these fields to fixed-size character arrays within struct
> scsi_device and remove trailing white space at initialization time.
>
> This patch fixes a bug in the qla2xxx driver.
Thanks for the patch - picking up the qla2xxx fix as a side effect of
the conversion is a nice win, and the call-site cleanup (no more
%.Ns / strncmp) is genuinely more readable.
> +static void strip_trailing_spaces(char *s)
> +{
> + size_t size;
> + char *end;
> +
> + size = strlen(s);
> + if (!size)
> + return;
> +
> + end = s + size - 1;
> + while (end >= s && isspace(*end))
> + end--;
> + *(end + 1) = '\0';
> +}
This changes the sysfs ABI for /sys/.../vendor, /sys/.../model and
/sys/.../rev. Today these files contain the raw 8/16/4 bytes from
the INQUIRY response, space-padded as the SCSI spec requires for
short identifiers, followed by a newline. For example, on a Pure
array today:
$ od -x /sys/.../vendor
0000000 5550 4552 2020 2020 000a
0000011
i.e. "PURE \n" - 9 bytes. After the patch the same file would
contain "PURE\n" - 5 bytes. That's spec-correct (per SPC, trailing
bytes ARE padding, not data) but it's a userspace-visible change
that's been stable for some time. The places I'd worry about are
udev rules using ATTRS{vendor}=="PURE " (literal match, no
whitespace handling) and shell scripts comparing against the padded
form. None of those are in-tree.
> - if ((type == TYPE_ROM) && (strncmp(sdev->vendor, "HP ", 3) == 0))
> + if (type == TYPE_ROM && strcmp(sdev->vendor, "HP") == 0)
A few of the strncmp -> strcmp conversions narrow the match in ways
that are worth a second look even after the strip - this one matches
only literal "HP" post-strip, where the original would have matched
"HP COMPAQ" too.
> - const char * vendor; /* [back_compat] point into 'inquiry' ... */
> - const char * model; /* ... after scan; point to static string */
> - const char * rev; /* ... "nullnullnullnull" before scan */
> + char vendor[9];
> + char model[17];
> + char rev[5];
Going back to Hannes' original suggestion - dropping
sdev->vendor / sdev->model / sdev->rev from struct scsi_device
entirely - is another way to get the qla2xxx bug out of the tree
without touching the sysfs output. The shape I had in mind is small
helpers against the (still raw, still space-padded) inquiry buffer:
bool scsi_device_vendor_match(struct scsi_device *sdev,
const char *prefix);
bool scsi_device_model_match(struct scsi_device *sdev,
const char *prefix);
bool scsi_device_rev_match(struct scsi_device *sdev,
const char *prefix);
size_t scsi_device_vendor(struct scsi_device *sdev,
char *buf, size_t len);
size_t scsi_device_model(struct scsi_device *sdev,
char *buf, size_t len);
size_t scsi_device_rev(struct scsi_device *sdev,
char *buf, size_t len);
Match helpers do a bounded comparison against the inquiry bytes
under inquiry_mutex; copy helpers copy and NUL-terminate into a
caller buffer. Sysfs reads stay byte-exact (no strip); qla2xxx
becomes a small stack buffer + scsi_device_vendor() and the
over-read goes away. Scope is comparable to your conversion -
~18 call sites across ~8 files, each migrating separately - but
no userspace ABI delta and no cached pointers left in
struct scsi_device.
Happy either way - just wanted to surface the ABI concern and
remind you of the other direction before you spend more time on the
conversion patch.
Thanks,
Brian
next prev parent reply other threads:[~2026-05-04 18:36 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-24 21:53 [PATCH 0/6] scsi: Support ALUA unavailable state and INQUIRY changes Brian Bunker
2026-04-24 21:53 ` [PATCH 1/6] scsi: Add INQUIRY data field definitions and accessor helpers Brian Bunker
2026-04-27 8:19 ` Hannes Reinecke
2026-04-30 15:50 ` Bart Van Assche
2026-04-24 21:53 ` [PATCH 2/6] scsi: Protect INQUIRY sysfs attributes with mutex Brian Bunker
2026-04-27 8:22 ` Hannes Reinecke
2026-04-29 1:27 ` [PATCH v2 " Brian Bunker
2026-04-29 21:06 ` Damien Le Moal
2026-04-29 21:15 ` Bart Van Assche
2026-04-29 22:49 ` [PATCH v3 " Brian Bunker
2026-04-30 6:03 ` Hannes Reinecke
2026-04-30 15:48 ` Bart Van Assche
2026-05-01 22:11 ` Brian Bunker
2026-05-02 16:37 ` Bart Van Assche
2026-05-03 15:44 ` Bart Van Assche
2026-05-04 18:36 ` Brian Bunker [this message]
2026-05-05 8:24 ` Bart Van Assche
2026-05-05 17:13 ` Brian Bunker
2026-04-24 21:53 ` [PATCH 3/6] scsi: Add scsi_update_inquiry_data() for updating INQUIRY data Brian Bunker
2026-04-24 21:53 ` [PATCH 4/6] scsi: Refactor scsi_add_lun() to use scsi_update_inquiry_data() Brian Bunker
2026-04-24 21:53 ` [PATCH 5/6] scsi: Add device reprobe support to scsi_rescan_device() Brian Bunker
2026-04-24 21:53 ` [PATCH 6/6] scsi: Handle reprobe for existing devices during SCSI scan Brian Bunker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260504183651.81037-1-brian@purestorage.com \
--to=brian@purestorage.com \
--cc=bvanassche@acm.org \
--cc=hare@suse.de \
--cc=krishna.kant@purestorage.com \
--cc=linux-scsi@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox