Commit cd6856d3 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Martin K. Petersen
Browse files

scsi: sd: Remove the stream_status member from scsi_stream_status_header



Having a variable length array at the end of scsi_stream_status_header
only causes problems.  Remove it and switch sd_is_perm_stream(), which is
the only place that currently uses it, to use the scsi_stream_status
directly following it in the local buf structure.

Besides being a much better data structure design, this also avoids a
-Wflex-array-member-not-at-end warning.

Reported-by: default avatarGustavo A. R. Silva <gustavoars@kernel.org>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20250505060640.3398500-1-hch@lst.de


Reviewed-by: default avatarJohn Garry <john.g.garry@oracle.com>
Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 73349697
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3215,7 +3215,7 @@ static bool sd_is_perm_stream(struct scsi_disk *sdkp, unsigned int stream_id)
		return false;
	if (get_unaligned_be32(&buf.h.len) < sizeof(struct scsi_stream_status))
		return false;
	return buf.h.stream_status[0].perm;
	return buf.s.perm;
}

static void sd_read_io_hints(struct scsi_disk *sdkp, unsigned char *buffer)
+1 −2
Original line number Diff line number Diff line
@@ -346,10 +346,9 @@ static_assert(sizeof(struct scsi_stream_status) == 8);

/* GET STREAM STATUS parameter data */
struct scsi_stream_status_header {
	__be32 len;	/* length in bytes of stream_status[] array. */
	__be32 len;	/* length in bytes of following payload */
	u16 reserved;
	__be16 number_of_open_streams;
	DECLARE_FLEX_ARRAY(struct scsi_stream_status, stream_status);
};

static_assert(sizeof(struct scsi_stream_status_header) == 8);