-Wflex-array-member-not-at-end was introduced in GCC-14, and we are
getting ready to enable it, globally.

Move the conflicting declaration to the end of the corresponding
structures. Notice that `struct knfsd_fh` is a flexible structure --a
structure that contains a flexible-array member.

Fix the following warnings:

fs/nfsd/nfsfh.h:79:33: warning: structure containing a flexible array member is 
not at the end of another structure [-Wflex-array-member-not-at-end]
fs/nfsd/state.h:763:33: warning: structure containing a flexible array member 
is not at the end of another structure [-Wflex-array-member-not-at-end]
fs/nfsd/state.h:669:33: warning: structure containing a flexible array member 
is not at the end of another structure [-Wflex-array-member-not-at-end]
fs/nfsd/state.h:549:33: warning: structure containing a flexible array member 
is not at the end of another structure [-Wflex-array-member-not-at-end]
fs/nfsd/xdr4.h:705:33: warning: structure containing a flexible array member is 
not at the end of another structure [-Wflex-array-member-not-at-end]
fs/nfsd/xdr4.h:678:33: 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 <[email protected]>
---
 fs/nfsd/nfsfh.h |  4 +++-
 fs/nfsd/state.h | 12 +++++++++---
 fs/nfsd/xdr4.h  |  8 ++++++--
 3 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/fs/nfsd/nfsfh.h b/fs/nfsd/nfsfh.h
index 5103c2f4d225..bbee43674a2a 100644
--- a/fs/nfsd/nfsfh.h
+++ b/fs/nfsd/nfsfh.h
@@ -76,7 +76,6 @@ static inline ino_t u32_to_ino_t(__u32 uino)
  * pre_mtime/post_version will be used to support wcc_attr's in NFSv3.
  */
 typedef struct svc_fh {
-       struct knfsd_fh         fh_handle;      /* FH data */
        int                     fh_maxsize;     /* max size for fh_handle */
        struct dentry *         fh_dentry;      /* validated dentry */
        struct svc_export *     fh_export;      /* export pointer */
@@ -107,6 +106,9 @@ typedef struct svc_fh {
        /* Post-op attributes saved in fh_fill_post_attrs() */
        struct kstat            fh_post_attr;   /* full attrs after operation */
        u64                     fh_post_change; /* nfsv4 change; see above */
+
+       /* Must be last -ends in a flexible-array member. */
+       struct knfsd_fh         fh_handle;      /* FH data */
 } svc_fh;
 #define NFSD4_FH_FOREIGN (1<<0)
 #define SET_FH_FLAG(c, f) ((c)->fh_flags |= (f))
diff --git a/fs/nfsd/state.h b/fs/nfsd/state.h
index 1995bca158b8..ffd3fd8c34a0 100644
--- a/fs/nfsd/state.h
+++ b/fs/nfsd/state.h
@@ -546,9 +546,11 @@ struct nfs4_replay {
        __be32                  rp_status;
        unsigned int            rp_buflen;
        char                    *rp_buf;
-       struct knfsd_fh         rp_openfh;
        int                     rp_locked;
        char                    rp_ibuf[NFSD4_REPLAY_ISIZE];
+
+       /* Must be last -ends in a flexible-array member. */
+       struct knfsd_fh         rp_openfh;
 };
 
 struct nfs4_stateowner;
@@ -666,12 +668,14 @@ struct nfs4_file {
        u32                     fi_share_deny;
        struct nfsd_file        *fi_deleg_file;
        int                     fi_delegees;
-       struct knfsd_fh         fi_fhandle;
        bool                    fi_had_conflict;
 #ifdef CONFIG_NFSD_PNFS
        struct list_head        fi_lo_states;
        atomic_t                fi_lo_recalls;
 #endif
+
+       /* Must be last -ends in a flexible-array member. */
+       struct knfsd_fh         fi_fhandle;
 };
 
 /*
@@ -760,9 +764,11 @@ struct nfsd4_blocked_lock {
        struct list_head        nbl_lru;
        time64_t                nbl_time;
        struct file_lock        nbl_lock;
-       struct knfsd_fh         nbl_fh;
        struct nfsd4_callback   nbl_cb;
        struct kref             nbl_kref;
+
+       /* Must be last -ends in a flexible-array member. */
+       struct knfsd_fh         nbl_fh;
 };
 
 struct nfsd4_compound_state;
diff --git a/fs/nfsd/xdr4.h b/fs/nfsd/xdr4.h
index aa2a356da784..e453ea5ebab6 100644
--- a/fs/nfsd/xdr4.h
+++ b/fs/nfsd/xdr4.h
@@ -675,11 +675,13 @@ struct nfsd4_cb_offload {
        struct nfsd42_write_res co_res;
        __be32                  co_nfserr;
        unsigned int            co_retries;
-       struct knfsd_fh         co_fh;
 
        struct nfs4_sessionid   co_referring_sessionid;
        u32                     co_referring_slotid;
        u32                     co_referring_seqno;
+
+       /* Must be last -ends in a flexible-array member. */
+       struct knfsd_fh         co_fh;
 };
 
 struct nfsd4_copy {
@@ -702,7 +704,6 @@ struct nfsd4_copy {
        /* response */
        __be32                  nfserr;
        struct nfsd42_write_res cp_res;
-       struct knfsd_fh         fh;
 
        /* offload callback */
        struct nfsd4_cb_offload cp_cb_offload;
@@ -723,6 +724,9 @@ struct nfsd4_copy {
        struct nfs_fh           c_fh;
        nfs4_stateid            stateid;
        struct nfsd_net         *cp_nn;
+
+       /* Must be last -ends in a flexible-array member. */
+       struct knfsd_fh         fh;
 };
 
 static inline void nfsd4_copy_set_sync(struct nfsd4_copy *copy, bool sync)
-- 
2.43.0


Reply via email to