On 04/09/2025 13:39, James Bottomley wrote:
On Thu, 2025-09-04 at 07:52 +0100, John Garry wrote:
On 03/09/2025 19:44, Gustavo A. R. Silva wrote:
diff --git a/drivers/scsi/pm8001/pm8001_hwi.h
b/drivers/scsi/pm8001/pm8001_hwi.h
index fc2127dcb58d..7dc7870a8f86 100644
--- a/drivers/scsi/pm8001/pm8001_hwi.h
+++ b/drivers/scsi/pm8001/pm8001_hwi.h
@@ -339,8 +339,10 @@ struct ssp_completion_resp {
        __le32  status;
        __le32  param;
        __le32  ssptag_rescv_rescpad;
-       struct ssp_response_iu  ssp_resp_iu;
        __le32  residual_count;
+
+       /* Must be last --ends in a flexible-array member. */
+       struct ssp_response_iu  ssp_resp_iu;
this is a HW structure, right? I did not think that it is ok to
simply re-order them...
Agreed, this is a standards defined information unit corresponding to
an on the wire data structure.  The patch is clearly wrong.

That being said, the three things the flexible member can contain are
no data, response data or sense data.  None of them has a residual
count at the beginning and, indeed, this field is never referred to in
the driver, so it looks like it can simply be deleted to fix the
warning.

Seems reasonable. I don't see how the sizeof(struct ssp_completion_resp) is relevant, as the size of the memory to hold this structure (and other response types) will be defined elsewhere.


That being said, this pattern of adding fields after flexible members
to represent data that's common to all content types of the union is
not unknown in SCSI so if you want to enable this warning, what are we
supposed to do when we encounter a genuine use case?

Such a problem was solved in commit cd6856d38881, but I can't say that it is a good example as we simply dropped the flex array usage.

Thanks,
John

Reply via email to