]> www.infradead.org Git - nvme.git/commitdiff
firewire: core: avoid -Wflex-array-member-not-at-end warning
authorGustavo A. R. Silva <gustavoars@kernel.org>
Thu, 13 Mar 2025 22:28:23 +0000 (08:58 +1030)
committerTakashi Sakamoto <o-takashi@sakamocchi.jp>
Sun, 16 Mar 2025 00:32:30 +0000 (09:32 +0900)
Use the `DEFINE_RAW_FLEX()` helper for an on-stack definition of
a flexible structure where the size of the flexible-array member
is known at compile-time, and refactor the rest of the code,
accordingly.

So, with these changes, fix the following warning:

drivers/firewire/core-cdev.c:1141:38: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]

Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Link: https://lore.kernel.org/r/Z9NcB81yfPo-8o0h@kspp
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
drivers/firewire/core-cdev.c

index b360dca2c69e858d3f3c24300f9b007f61d82bd7..bd04980009a467bc85d3f001d05f0b5b4a966fc7 100644 (file)
@@ -1137,10 +1137,7 @@ static int ioctl_queue_iso(struct client *client, union ioctl_arg *arg)
        unsigned long payload, buffer_end, transmit_header_bytes = 0;
        u32 control;
        int count;
-       struct {
-               struct fw_iso_packet packet;
-               u8 header[256];
-       } u;
+       DEFINE_RAW_FLEX(struct fw_iso_packet, u, header, 64);
 
        if (ctx == NULL || a->handle != 0)
                return -EINVAL;
@@ -1172,29 +1169,29 @@ static int ioctl_queue_iso(struct client *client, union ioctl_arg *arg)
        while (p < end) {
                if (get_user(control, &p->control))
                        return -EFAULT;
-               u.packet.payload_length = GET_PAYLOAD_LENGTH(control);
-               u.packet.interrupt = GET_INTERRUPT(control);
-               u.packet.skip = GET_SKIP(control);
-               u.packet.tag = GET_TAG(control);
-               u.packet.sy = GET_SY(control);
-               u.packet.header_length = GET_HEADER_LENGTH(control);
+               u->payload_length = GET_PAYLOAD_LENGTH(control);
+               u->interrupt = GET_INTERRUPT(control);
+               u->skip = GET_SKIP(control);
+               u->tag = GET_TAG(control);
+               u->sy = GET_SY(control);
+               u->header_length = GET_HEADER_LENGTH(control);
 
                switch (ctx->type) {
                case FW_ISO_CONTEXT_TRANSMIT:
-                       if (u.packet.header_length & 3)
+                       if (u->header_length & 3)
                                return -EINVAL;
-                       transmit_header_bytes = u.packet.header_length;
+                       transmit_header_bytes = u->header_length;
                        break;
 
                case FW_ISO_CONTEXT_RECEIVE:
-                       if (u.packet.header_length == 0 ||
-                           u.packet.header_length % ctx->header_size != 0)
+                       if (u->header_length == 0 ||
+                           u->header_length % ctx->header_size != 0)
                                return -EINVAL;
                        break;
 
                case FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL:
-                       if (u.packet.payload_length == 0 ||
-                           u.packet.payload_length & 3)
+                       if (u->payload_length == 0 ||
+                           u->payload_length & 3)
                                return -EINVAL;
                        break;
                }
@@ -1204,20 +1201,19 @@ static int ioctl_queue_iso(struct client *client, union ioctl_arg *arg)
                if (next > end)
                        return -EINVAL;
                if (copy_from_user
-                   (u.packet.header, p->header, transmit_header_bytes))
+                   (u->header, p->header, transmit_header_bytes))
                        return -EFAULT;
-               if (u.packet.skip && ctx->type == FW_ISO_CONTEXT_TRANSMIT &&
-                   u.packet.header_length + u.packet.payload_length > 0)
+               if (u->skip && ctx->type == FW_ISO_CONTEXT_TRANSMIT &&
+                   u->header_length + u->payload_length > 0)
                        return -EINVAL;
-               if (payload + u.packet.payload_length > buffer_end)
+               if (payload + u->payload_length > buffer_end)
                        return -EINVAL;
 
-               if (fw_iso_context_queue(ctx, &u.packet,
-                                        &client->buffer, payload))
+               if (fw_iso_context_queue(ctx, u, &client->buffer, payload))
                        break;
 
                p = next;
-               payload += u.packet.payload_length;
+               payload += u->payload_length;
                count++;
        }
        fw_iso_context_queue_flush(ctx);