]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
smb: fix some warnings reported by scripts/checkpatch.pl
authorChenXiaoSong <chenxiaosong@kylinos.cn>
Sun, 2 Nov 2025 07:30:59 +0000 (15:30 +0800)
committerSteve French <stfrench@microsoft.com>
Mon, 1 Dec 2025 03:11:45 +0000 (21:11 -0600)
Fix the following warnings:

  WARNING: __always_unused or __maybe_unused is preferred over \
                                    __attribute__((__unused__))
  WARNING: Prefer __packed over __attribute__((packed))

Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/cifspdu.h
fs/smb/client/connect.c
fs/smb/client/ntlmssp.h
fs/smb/client/rfc1002pdu.h
fs/smb/common/smbacl.h

index df603bdbe6ba788127065233c1be41e34921b286..d84e10b1477fa5a240e16cc8c84daf506f6c1947 100644 (file)
@@ -425,8 +425,8 @@ typedef struct smb_negotiate_rsp {
                struct {
                        unsigned char GUID[SMB1_CLIENT_GUID_SIZE];
                        unsigned char SecurityBlob[];
-               } __attribute__((packed)) extended_response;
-       } __attribute__((packed)) u;
+               } __packed extended_response;
+       } __packed u;
 } __packed SMB_NEGOTIATE_RSP;
 
 /* SecurityMode bits */
@@ -474,7 +474,7 @@ typedef union smb_com_session_setup_andx {
                unsigned char SecurityBlob[];   /* followed by */
                /* STRING NativeOS */
                /* STRING NativeLanMan */
-       } __attribute__((packed)) req;  /* NTLM request format (with
+       } __packed req; /* NTLM request format (with
                                        extended security */
 
        struct {                /* request format */
@@ -497,7 +497,7 @@ typedef union smb_com_session_setup_andx {
                /* STRING PrimaryDomain */
                /* STRING NativeOS */
                /* STRING NativeLanMan */
-       } __attribute__((packed)) req_no_secext; /* NTLM request format (without
+       } __packed req_no_secext; /* NTLM request format (without
                                                        extended security */
 
        struct {                /* default (NTLM) response format */
@@ -512,7 +512,7 @@ typedef union smb_com_session_setup_andx {
 /*      unsigned char  * NativeOS;      */
 /*     unsigned char  * NativeLanMan;  */
 /*      unsigned char  * PrimaryDomain; */
-       } __attribute__((packed)) resp; /* NTLM response
+       } __packed resp;        /* NTLM response
                                           (with or without extended sec) */
 
        struct {                /* request format */
@@ -532,7 +532,7 @@ typedef union smb_com_session_setup_andx {
                /* STRING PrimaryDomain */
                /* STRING NativeOS */
                /* STRING NativeLanMan */
-       } __attribute__((packed)) old_req; /* pre-NTLM (LANMAN2.1) req format */
+       } __packed old_req; /* pre-NTLM (LANMAN2.1) req format */
 
        struct {                /* default (NTLM) response format */
                struct smb_hdr hdr;     /* wct = 3 */
@@ -544,8 +544,8 @@ typedef union smb_com_session_setup_andx {
                unsigned char NativeOS[];       /* followed by */
 /*     unsigned char * NativeLanMan; */
 /*      unsigned char * PrimaryDomain; */
-       } __attribute__((packed)) old_resp; /* pre-NTLM (LANMAN2.1) response */
-} __attribute__((packed)) SESSION_SETUP_ANDX;
+       } __packed old_resp; /* pre-NTLM (LANMAN2.1) response */
+} __packed SESSION_SETUP_ANDX;
 
 /* format of NLTMv2 Response ie "case sensitive password" hash when NTLMv2 */
 
@@ -559,7 +559,7 @@ struct ntlmssp2_name {
        __le16 type;
        __le16 length;
        __u8 data[];
-} __attribute__((packed));
+} __packed;
 
 struct ntlmv2_resp {
        union {
@@ -567,15 +567,15 @@ struct ntlmv2_resp {
            struct {
                __u8 reserved[8];
                __u8 key[CIFS_SERVER_CHALLENGE_SIZE];
-           } __attribute__((packed)) challenge;
-       } __attribute__((packed));
+           } __packed challenge;
+       } __packed;
        __le32 blob_signature;
        __u32  reserved;
        __le64  time;
        __u64  client_chal; /* random */
        __u32  reserved2;
        /* array of name entries could follow ending in minimum 4 byte struct */
-} __attribute__((packed));
+} __packed;
 
 
 #define CIFS_NETWORK_OPSYS "CIFS VFS Client for Linux"
@@ -610,7 +610,7 @@ typedef struct smb_com_tconx_req {
        unsigned char Password[];       /* followed by */
 /* STRING Path    *//* \\server\share name */
        /* STRING Service */
-} __attribute__((packed)) TCONX_REQ;
+} __packed TCONX_REQ;
 
 typedef struct smb_com_tconx_rsp {
        struct smb_hdr hdr;     /* wct = 3 , not extended response */
@@ -621,7 +621,7 @@ typedef struct smb_com_tconx_rsp {
        __u16 ByteCount;
        unsigned char Service[];        /* always ASCII, not Unicode */
        /* STRING NativeFileSystem */
-} __attribute__((packed)) TCONX_RSP;
+} __packed TCONX_RSP;
 
 typedef struct smb_com_tconx_rsp_ext {
        struct smb_hdr hdr;     /* wct = 7, extended response */
@@ -634,7 +634,7 @@ typedef struct smb_com_tconx_rsp_ext {
        __u16 ByteCount;
        unsigned char Service[];        /* always ASCII, not Unicode */
        /* STRING NativeFileSystem */
-} __attribute__((packed)) TCONX_RSP_EXT;
+} __packed TCONX_RSP_EXT;
 
 
 /* tree connect Flags */
@@ -670,14 +670,14 @@ typedef struct smb_com_echo_req {
        __le16  EchoCount;
        __le16  ByteCount;
        char    Data[];
-} __attribute__((packed)) ECHO_REQ;
+} __packed ECHO_REQ;
 
 typedef struct smb_com_echo_rsp {
        struct  smb_hdr hdr;
        __le16  SequenceNumber;
        __le16  ByteCount;
        char    Data[];
-} __attribute__((packed)) ECHO_RSP;
+} __packed ECHO_RSP;
 
 typedef struct smb_com_logoff_andx_req {
        struct smb_hdr hdr;     /* wct = 2 */
@@ -685,7 +685,7 @@ typedef struct smb_com_logoff_andx_req {
        __u8 AndXReserved;
        __u16 AndXOffset;
        __u16 ByteCount;
-} __attribute__((packed)) LOGOFF_ANDX_REQ;
+} __packed LOGOFF_ANDX_REQ;
 
 typedef struct smb_com_logoff_andx_rsp {
        struct smb_hdr hdr;     /* wct = 2 */
@@ -693,7 +693,7 @@ typedef struct smb_com_logoff_andx_rsp {
        __u8 AndXReserved;
        __u16 AndXOffset;
        __u16 ByteCount;
-} __attribute__((packed)) LOGOFF_ANDX_RSP;
+} __packed LOGOFF_ANDX_RSP;
 
 typedef union smb_com_tree_disconnect {        /* as an alternative can use flag on
                                        tree_connect PDU to effect disconnect */
@@ -701,36 +701,36 @@ typedef union smb_com_tree_disconnect {   /* as an alternative can use flag on
        struct {
                struct smb_hdr hdr;     /* wct = 0 */
                __u16 ByteCount;        /* bcc = 0 */
-       } __attribute__((packed)) req;
+       } __packed req;
        struct {
                struct smb_hdr hdr;     /* wct = 0 */
                __u16 ByteCount;        /* bcc = 0 */
-       } __attribute__((packed)) resp;
-} __attribute__((packed)) TREE_DISCONNECT;
+       } __packed resp;
+} __packed TREE_DISCONNECT;
 
 typedef struct smb_com_close_req {
        struct smb_hdr hdr;     /* wct = 3 */
        __u16 FileID;
        __u32 LastWriteTime;    /* should be zero or -1 */
        __u16 ByteCount;        /* 0 */
-} __attribute__((packed)) CLOSE_REQ;
+} __packed CLOSE_REQ;
 
 typedef struct smb_com_close_rsp {
        struct smb_hdr hdr;     /* wct = 0 */
        __u16 ByteCount;        /* bct = 0 */
-} __attribute__((packed)) CLOSE_RSP;
+} __packed CLOSE_RSP;
 
 typedef struct smb_com_flush_req {
        struct smb_hdr hdr;     /* wct = 1 */
        __u16 FileID;
        __u16 ByteCount;        /* 0 */
-} __attribute__((packed)) FLUSH_REQ;
+} __packed FLUSH_REQ;
 
 typedef struct smb_com_findclose_req {
        struct smb_hdr hdr; /* wct = 1 */
        __u16 FileID;
        __u16 ByteCount;    /* 0 */
-} __attribute__((packed)) FINDCLOSE_REQ;
+} __packed FINDCLOSE_REQ;
 
 /* OpenFlags */
 #define REQ_MORE_INFO      0x00000001  /* legacy (OPEN_AND_X) only */
@@ -777,7 +777,7 @@ typedef struct smb_com_open_req {   /* also handles create */
        __u8 SecurityFlags;
        __le16 ByteCount;
        char fileName[];
-} __attribute__((packed)) OPEN_REQ;
+} __packed OPEN_REQ;
 
 /* open response: oplock levels */
 #define OPLOCK_NONE     0
@@ -809,7 +809,7 @@ typedef struct smb_com_open_rsp {
        __le16 DeviceState;
        __u8 DirectoryFlag;
        __u16 ByteCount;        /* bct = 0 */
-} __attribute__((packed)) OPEN_RSP;
+} __packed OPEN_RSP;
 
 typedef struct smb_com_open_rsp_ext {
        struct smb_hdr hdr;     /* wct = 42 but meaningless due to MS bug? */
@@ -834,7 +834,7 @@ typedef struct smb_com_open_rsp_ext {
        __le32 MaximalAccessRights;
        __le32 GuestMaximalAccessRights;
        __u16 ByteCount;        /* bct = 0 */
-} __attribute__((packed)) OPEN_RSP_EXT;
+} __packed OPEN_RSP_EXT;
 
 
 /* format of legacy open request */
@@ -854,7 +854,7 @@ typedef struct smb_com_openx_req {
        __le32 Reserved;
        __le16  ByteCount;  /* file name follows */
        char   fileName[];
-} __attribute__((packed)) OPENX_REQ;
+} __packed OPENX_REQ;
 
 typedef struct smb_com_openx_rsp {
        struct smb_hdr  hdr;    /* wct = 15 */
@@ -872,7 +872,7 @@ typedef struct smb_com_openx_rsp {
        __u32  FileId;
        __u16  Reserved;
        __u16  ByteCount;
-} __attribute__((packed)) OPENX_RSP;
+} __packed OPENX_RSP;
 
 /* For encoding of POSIX Open Request - see trans2 function 0x209 data struct */
 
@@ -894,7 +894,7 @@ typedef struct smb_com_writex_req {
        __u8 Pad;               /* BB check for whether padded to DWORD
                                   boundary and optimum performance here */
        char Data[];
-} __attribute__((packed)) WRITEX_REQ;
+} __packed WRITEX_REQ;
 
 typedef struct smb_com_write_req {
        struct smb_hdr hdr;     /* wct = 14 */
@@ -914,7 +914,7 @@ typedef struct smb_com_write_req {
        __u8 Pad;               /* BB check for whether padded to DWORD
                                   boundary and optimum performance here */
        char Data[];
-} __attribute__((packed)) WRITE_REQ;
+} __packed WRITE_REQ;
 
 typedef struct smb_com_write_rsp {
        struct smb_hdr hdr;     /* wct = 6 */
@@ -926,7 +926,7 @@ typedef struct smb_com_write_rsp {
        __le16 CountHigh;
        __u16  Reserved;
        __u16 ByteCount;
-} __attribute__((packed)) WRITE_RSP;
+} __packed WRITE_RSP;
 
 /* legacy read request for older servers */
 typedef struct smb_com_readx_req {
@@ -941,7 +941,7 @@ typedef struct smb_com_readx_req {
        __le32 Reserved;
        __le16 Remaining;
        __le16 ByteCount;
-} __attribute__((packed)) READX_REQ;
+} __packed READX_REQ;
 
 typedef struct smb_com_read_req {
        struct smb_hdr hdr;     /* wct = 12 */
@@ -956,7 +956,7 @@ typedef struct smb_com_read_req {
        __le16 Remaining;
        __le32 OffsetHigh;
        __le16 ByteCount;
-} __attribute__((packed)) READ_REQ;
+} __packed READ_REQ;
 
 typedef struct smb_com_read_rsp {
        struct smb_hdr hdr;     /* wct = 12 */
@@ -972,7 +972,7 @@ typedef struct smb_com_read_rsp {
        __u64 Reserved2;
        __u16 ByteCount;
        /* read response data immediately follows */
-} __attribute__((packed)) READ_RSP;
+} __packed READ_RSP;
 
 typedef struct locking_andx_range {
        __le16 Pid;
@@ -981,7 +981,7 @@ typedef struct locking_andx_range {
        __le32 OffsetLow;
        __le32 LengthHigh;
        __le32 LengthLow;
-} __attribute__((packed)) LOCKING_ANDX_RANGE;
+} __packed LOCKING_ANDX_RANGE;
 
 #define LOCKING_ANDX_SHARED_LOCK     0x01
 #define LOCKING_ANDX_OPLOCK_RELEASE  0x02
@@ -1002,7 +1002,7 @@ typedef struct smb_com_lock_req {
        __le16 NumberOfLocks;
        __le16 ByteCount;
        LOCKING_ANDX_RANGE Locks[];
-} __attribute__((packed)) LOCK_REQ;
+} __packed LOCK_REQ;
 
 /* lock type */
 #define CIFS_RDLCK     0
@@ -1015,7 +1015,7 @@ typedef struct cifs_posix_lock {
        __le64  start;
        __le64  length;
        /* BB what about additional owner info to identify network client */
-} __attribute__((packed)) CIFS_POSIX_LOCK;
+} __packed CIFS_POSIX_LOCK;
 
 typedef struct smb_com_lock_rsp {
        struct smb_hdr hdr;     /* wct = 2 */
@@ -1023,7 +1023,7 @@ typedef struct smb_com_lock_rsp {
        __u8 AndXReserved;
        __le16 AndXOffset;
        __u16 ByteCount;
-} __attribute__((packed)) LOCK_RSP;
+} __packed LOCK_RSP;
 
 typedef struct smb_com_rename_req {
        struct smb_hdr hdr;     /* wct = 1 */
@@ -1033,7 +1033,7 @@ typedef struct smb_com_rename_req {
        unsigned char OldFileName[];
        /* followed by __u8 BufferFormat2 */
        /* followed by NewFileName */
-} __attribute__((packed)) RENAME_REQ;
+} __packed RENAME_REQ;
 
        /* copy request flags */
 #define COPY_MUST_BE_FILE      0x0001
@@ -1053,7 +1053,7 @@ typedef struct smb_com_copy_req {
        unsigned char OldFileName[];
        /* followed by __u8 BufferFormat2 */
        /* followed by NewFileName string */
-} __attribute__((packed)) COPY_REQ;
+} __packed COPY_REQ;
 
 typedef struct smb_com_copy_rsp {
        struct smb_hdr hdr;     /* wct = 1 */
@@ -1061,7 +1061,7 @@ typedef struct smb_com_copy_rsp {
        __u16 ByteCount;    /* may be zero */
        __u8 BufferFormat;  /* 0x04 - only present if errored file follows */
        unsigned char ErrorFileName[]; /* only present if error in copy */
-} __attribute__((packed)) COPY_RSP;
+} __packed COPY_RSP;
 
 #define CREATE_HARD_LINK               0x103
 #define MOVEFILE_COPY_ALLOWED          0x0002
@@ -1077,12 +1077,12 @@ typedef struct smb_com_nt_rename_req {  /* A5 - also used for create hardlink */
        unsigned char OldFileName[];
        /* followed by __u8 BufferFormat2 */
        /* followed by NewFileName */
-} __attribute__((packed)) NT_RENAME_REQ;
+} __packed NT_RENAME_REQ;
 
 typedef struct smb_com_rename_rsp {
        struct smb_hdr hdr;     /* wct = 0 */
        __u16 ByteCount;        /* bct = 0 */
-} __attribute__((packed)) RENAME_RSP;
+} __packed RENAME_RSP;
 
 typedef struct smb_com_delete_file_req {
        struct smb_hdr hdr;     /* wct = 1 */
@@ -1090,43 +1090,43 @@ typedef struct smb_com_delete_file_req {
        __le16 ByteCount;
        __u8 BufferFormat;      /* 4 = ASCII */
        unsigned char fileName[];
-} __attribute__((packed)) DELETE_FILE_REQ;
+} __packed DELETE_FILE_REQ;
 
 typedef struct smb_com_delete_file_rsp {
        struct smb_hdr hdr;     /* wct = 0 */
        __u16 ByteCount;        /* bct = 0 */
-} __attribute__((packed)) DELETE_FILE_RSP;
+} __packed DELETE_FILE_RSP;
 
 typedef struct smb_com_delete_directory_req {
        struct smb_hdr hdr;     /* wct = 0 */
        __le16 ByteCount;
        __u8 BufferFormat;      /* 4 = ASCII */
        unsigned char DirName[];
-} __attribute__((packed)) DELETE_DIRECTORY_REQ;
+} __packed DELETE_DIRECTORY_REQ;
 
 typedef struct smb_com_delete_directory_rsp {
        struct smb_hdr hdr;     /* wct = 0 */
        __u16 ByteCount;        /* bct = 0 */
-} __attribute__((packed)) DELETE_DIRECTORY_RSP;
+} __packed DELETE_DIRECTORY_RSP;
 
 typedef struct smb_com_create_directory_req {
        struct smb_hdr hdr;     /* wct = 0 */
        __le16 ByteCount;
        __u8 BufferFormat;      /* 4 = ASCII */
        unsigned char DirName[];
-} __attribute__((packed)) CREATE_DIRECTORY_REQ;
+} __packed CREATE_DIRECTORY_REQ;
 
 typedef struct smb_com_create_directory_rsp {
        struct smb_hdr hdr;     /* wct = 0 */
        __u16 ByteCount;        /* bct = 0 */
-} __attribute__((packed)) CREATE_DIRECTORY_RSP;
+} __packed CREATE_DIRECTORY_RSP;
 
 typedef struct smb_com_query_information_req {
        struct smb_hdr hdr;     /* wct = 0 */
        __le16 ByteCount;       /* 1 + namelen + 1 */
        __u8 BufferFormat;      /* 4 = ASCII */
        unsigned char FileName[];
-} __attribute__((packed)) QUERY_INFORMATION_REQ;
+} __packed QUERY_INFORMATION_REQ;
 
 typedef struct smb_com_query_information_rsp {
        struct smb_hdr hdr;     /* wct = 10 */
@@ -1135,7 +1135,7 @@ typedef struct smb_com_query_information_rsp {
        __le32 size;
        __u16  reserved[5];
        __le16 ByteCount;       /* bcc = 0 */
-} __attribute__((packed)) QUERY_INFORMATION_RSP;
+} __packed QUERY_INFORMATION_RSP;
 
 typedef struct smb_com_setattr_req {
        struct smb_hdr hdr; /* wct = 8 */
@@ -1145,12 +1145,12 @@ typedef struct smb_com_setattr_req {
        __le16 ByteCount;
        __u8   BufferFormat; /* 4 = ASCII */
        unsigned char fileName[];
-} __attribute__((packed)) SETATTR_REQ;
+} __packed SETATTR_REQ;
 
 typedef struct smb_com_setattr_rsp {
        struct smb_hdr hdr;     /* wct = 0 */
        __u16 ByteCount;        /* bct = 0 */
-} __attribute__((packed)) SETATTR_RSP;
+} __packed SETATTR_RSP;
 
 /* empty wct response to setattr */
 
@@ -1178,7 +1178,7 @@ typedef struct smb_com_ntransact_req {
        __le16 ByteCount;
        __u8 Pad[3];
        __u8 Parms[];
-} __attribute__((packed)) NTRANSACT_REQ;
+} __packed NTRANSACT_REQ;
 
 typedef struct smb_com_ntransact_rsp {
        struct smb_hdr hdr;     /* wct = 18 */
@@ -1195,7 +1195,7 @@ typedef struct smb_com_ntransact_rsp {
        __u16 ByteCount;
        /* __u8 Pad[3]; */
        /* parms and data follow */
-} __attribute__((packed)) NTRANSACT_RSP;
+} __packed NTRANSACT_RSP;
 
 typedef struct smb_com_transaction_ioctl_req {
        struct smb_hdr hdr;     /* wct = 23 */
@@ -1219,7 +1219,7 @@ typedef struct smb_com_transaction_ioctl_req {
        __le16 ByteCount;
        __u8 Pad[3];
        __u8 Data[];
-} __attribute__((packed)) TRANSACT_IOCTL_REQ;
+} __packed TRANSACT_IOCTL_REQ;
 
 typedef struct smb_com_transaction_compr_ioctl_req {
        struct smb_hdr hdr;     /* wct = 23 */
@@ -1243,7 +1243,7 @@ typedef struct smb_com_transaction_compr_ioctl_req {
        __le16 ByteCount;
        __u8 Pad[3];
        __le16 compression_state;  /* See below for valid flags */
-} __attribute__((packed)) TRANSACT_COMPR_IOCTL_REQ;
+} __packed TRANSACT_COMPR_IOCTL_REQ;
 
 /* compression state flags */
 #define COMPRESSION_FORMAT_NONE                0x0000
@@ -1264,7 +1264,7 @@ typedef struct smb_com_transaction_ioctl_rsp {
        __u8 SetupCount;        /* 1 */
        __le16 ReturnedDataLen;
        __le16 ByteCount;
-} __attribute__((packed)) TRANSACT_IOCTL_RSP;
+} __packed TRANSACT_IOCTL_RSP;
 
 #define CIFS_ACL_OWNER 1
 #define CIFS_ACL_GROUP 2
@@ -1291,7 +1291,7 @@ typedef struct smb_com_transaction_qsec_req {
        __u16 Fid;
        __u16 Reserved2;
        __le32 AclFlags;
-} __attribute__((packed)) QUERY_SEC_DESC_REQ;
+} __packed QUERY_SEC_DESC_REQ;
 
 
 typedef struct smb_com_transaction_ssec_req {
@@ -1314,7 +1314,7 @@ typedef struct smb_com_transaction_ssec_req {
        __u16 Fid;
        __u16 Reserved2;
        __le32 AclFlags;
-} __attribute__((packed)) SET_SEC_DESC_REQ;
+} __packed SET_SEC_DESC_REQ;
 
 typedef struct smb_com_transaction_change_notify_req {
        struct smb_hdr hdr;     /* wct = 23 */
@@ -1338,7 +1338,7 @@ typedef struct smb_com_transaction_change_notify_req {
        __le16 ByteCount;
 /*     __u8 Pad[3];*/
 /*     __u8 Data[];*/
-} __attribute__((packed)) TRANSACT_CHANGE_NOTIFY_REQ;
+} __packed TRANSACT_CHANGE_NOTIFY_REQ;
 
 /* BB eventually change to use generic ntransact rsp struct
       and validation routine */
@@ -1356,7 +1356,7 @@ typedef struct smb_com_transaction_change_notify_rsp {
        __u8 SetupCount;   /* 0 */
        __u16 ByteCount;
        /* __u8 Pad[3]; */
-} __attribute__((packed)) TRANSACT_CHANGE_NOTIFY_RSP;
+} __packed TRANSACT_CHANGE_NOTIFY_RSP;
 /* Completion Filter flags for Notify */
 #define FILE_NOTIFY_CHANGE_FILE_NAME    0x00000001
 #define FILE_NOTIFY_CHANGE_DIR_NAME     0x00000002
@@ -1387,7 +1387,7 @@ struct file_notify_information {
        __le32 Action;
        __le32 FileNameLength;
        __u8  FileName[];
-} __attribute__((packed));
+} __packed;
 
 struct cifs_quota_data {
        __u32   rsrvd1;  /* 0 */
@@ -1397,7 +1397,7 @@ struct cifs_quota_data {
        __u64   soft_limit;
        __u64   hard_limit;
        char    sid[];  /* variable size? */
-} __attribute__((packed));
+} __packed;
 
 /* quota sub commands */
 #define QUOTA_LIST_CONTINUE        0
@@ -1423,12 +1423,12 @@ struct trans2_req {
        __u8 Reserved3;
        __le16 SubCommand; /* 1st setup word - SetupCount words follow */
        __le16 ByteCount;
-} __attribute__((packed));
+} __packed;
 
 struct smb_t2_req {
        struct smb_hdr hdr;
        struct trans2_req t2_req;
-} __attribute__((packed));
+} __packed;
 
 struct trans2_resp {
        /* struct smb_hdr hdr precedes. Note wct = 10 + setup count */
@@ -1447,12 +1447,12 @@ struct trans2_resp {
        __u16 ByteCount;
        __u16 Reserved2;*/
        /* data area follows */
-} __attribute__((packed));
+} __packed;
 
 struct smb_t2_rsp {
        struct smb_hdr hdr;
        struct trans2_resp t2_rsp;
-} __attribute__((packed));
+} __packed;
 
 /* PathInfo/FileInfo infolevels */
 #define SMB_INFO_STANDARD                   1
@@ -1549,14 +1549,14 @@ typedef struct smb_com_transaction2_qpi_req {
        __le16 InformationLevel;
        __u32 Reserved4;
        char FileName[];
-} __attribute__((packed)) TRANSACTION2_QPI_REQ;
+} __packed TRANSACTION2_QPI_REQ;
 
 typedef struct smb_com_transaction2_qpi_rsp {
        struct smb_hdr hdr;     /* wct = 10 + SetupCount */
        struct trans2_resp t2;
        __u16 ByteCount;
        __u16 Reserved2; /* parameter word is present for infolevels > 100 */
-} __attribute__((packed)) TRANSACTION2_QPI_RSP;
+} __packed TRANSACTION2_QPI_RSP;
 
 typedef struct smb_com_transaction2_spi_req {
        struct smb_hdr hdr;     /* wct = 15 */
@@ -1582,21 +1582,21 @@ typedef struct smb_com_transaction2_spi_req {
        __le16 InformationLevel;
        __u32 Reserved4;
        char FileName[];
-} __attribute__((packed)) TRANSACTION2_SPI_REQ;
+} __packed TRANSACTION2_SPI_REQ;
 
 typedef struct smb_com_transaction2_spi_rsp {
        struct smb_hdr hdr;     /* wct = 10 + SetupCount */
        struct trans2_resp t2;
        __u16 ByteCount;
        __u16 Reserved2; /* parameter word is present for infolevels > 100 */
-} __attribute__((packed)) TRANSACTION2_SPI_RSP;
+} __packed TRANSACTION2_SPI_RSP;
 
 struct set_file_rename {
        __le32 overwrite;   /* 1 = overwrite dest */
        __u32 root_fid;   /* zero */
        __le32 target_name_len;
        char  target_name[];  /* Must be unicode */
-} __attribute__((packed));
+} __packed;
 
 struct smb_com_transaction2_sfi_req {
        struct smb_hdr hdr;     /* wct = 15 */
@@ -1623,14 +1623,14 @@ struct smb_com_transaction2_sfi_req {
        __le16 InformationLevel;
        __u16 Reserved4;
        __u8  payload[];
-} __attribute__((packed));
+} __packed;
 
 struct smb_com_transaction2_sfi_rsp {
        struct smb_hdr hdr;     /* wct = 10 + SetupCount */
        struct trans2_resp t2;
        __u16 ByteCount;
        __u16 Reserved2; /* parameter word reserved - present for infolevels > 100 */
-} __attribute__((packed));
+} __packed;
 
 struct smb_t2_qfi_req {
        struct  smb_hdr hdr;
@@ -1638,14 +1638,14 @@ struct smb_t2_qfi_req {
        __u8    Pad;
        __u16   Fid;
        __le16  InformationLevel;
-} __attribute__((packed));
+} __packed;
 
 struct smb_t2_qfi_rsp {
        struct smb_hdr hdr;     /* wct = 10 + SetupCount */
        struct trans2_resp t2;
        __u16 ByteCount;
        __u16 Reserved2; /* parameter word reserved - present for infolevels > 100 */
-} __attribute__((packed));
+} __packed;
 
 /*
  * Flags on T2 FINDFIRST and FINDNEXT
@@ -1687,13 +1687,13 @@ typedef struct smb_com_transaction2_ffirst_req {
        __le16 InformationLevel;
        __le32 SearchStorageType;
        char FileName[];
-} __attribute__((packed)) TRANSACTION2_FFIRST_REQ;
+} __packed TRANSACTION2_FFIRST_REQ;
 
 typedef struct smb_com_transaction2_ffirst_rsp {
        struct smb_hdr hdr;     /* wct = 10 */
        struct trans2_resp t2;
        __u16 ByteCount;
-} __attribute__((packed)) TRANSACTION2_FFIRST_RSP;
+} __packed TRANSACTION2_FFIRST_RSP;
 
 typedef struct smb_com_transaction2_ffirst_rsp_parms {
        __u16 SearchHandle;
@@ -1701,7 +1701,7 @@ typedef struct smb_com_transaction2_ffirst_rsp_parms {
        __le16 EndofSearch;
        __le16 EAErrorOffset;
        __le16 LastNameOffset;
-} __attribute__((packed)) T2_FFIRST_RSP_PARMS;
+} __packed T2_FFIRST_RSP_PARMS;
 
 typedef struct smb_com_transaction2_fnext_req {
        struct smb_hdr hdr;     /* wct = 15 */
@@ -1729,20 +1729,20 @@ typedef struct smb_com_transaction2_fnext_req {
        __u32 ResumeKey;
        __le16 SearchFlags;
        char ResumeFileName[];
-} __attribute__((packed)) TRANSACTION2_FNEXT_REQ;
+} __packed TRANSACTION2_FNEXT_REQ;
 
 typedef struct smb_com_transaction2_fnext_rsp {
        struct smb_hdr hdr;     /* wct = 10 */
        struct trans2_resp t2;
        __u16 ByteCount;
-} __attribute__((packed)) TRANSACTION2_FNEXT_RSP;
+} __packed TRANSACTION2_FNEXT_RSP;
 
 typedef struct smb_com_transaction2_fnext_rsp_parms {
        __le16 SearchCount;
        __le16 EndofSearch;
        __le16 EAErrorOffset;
        __le16 LastNameOffset;
-} __attribute__((packed)) T2_FNEXT_RSP_PARMS;
+} __packed T2_FNEXT_RSP_PARMS;
 
 /* QFSInfo Levels */
 #define SMB_INFO_ALLOCATION         1
@@ -1786,14 +1786,14 @@ typedef struct smb_com_transaction2_qfsi_req {
        __le16 ByteCount;
        __u8 Pad;
        __le16 InformationLevel;
-} __attribute__((packed)) TRANSACTION2_QFSI_REQ;
+} __packed TRANSACTION2_QFSI_REQ;
 
 typedef struct smb_com_transaction_qfsi_rsp {
        struct smb_hdr hdr;     /* wct = 10 + SetupCount */
        struct trans2_resp t2;
        __u16 ByteCount;
        __u8 Pad;       /* may be three bytes? *//* followed by data area */
-} __attribute__((packed)) TRANSACTION2_QFSI_RSP;
+} __packed TRANSACTION2_QFSI_RSP;
 
 typedef struct whoami_rsp_data { /* Query level 0x202 */
        __u32 flags; /* 0 = Authenticated user 1 = GUEST */
@@ -1806,7 +1806,7 @@ typedef struct whoami_rsp_data { /* Query level 0x202 */
        __u32 pad; /* reserved - MBZ */
        /* __u64 gid_array[0]; */  /* may be empty */
        /* __u8 * psid_list */  /* may be empty */
-} __attribute__((packed)) WHOAMI_RSP_DATA;
+} __packed WHOAMI_RSP_DATA;
 
 /* SETFSInfo Levels */
 #define SMB_SET_CIFS_UNIX_INFO    0x200
@@ -1839,7 +1839,7 @@ typedef struct smb_com_transaction2_setfsi_req {
        __le16 ClientUnixMajor; /* Data start. */
        __le16 ClientUnixMinor;
        __le64 ClientUnixCap;   /* Data end */
-} __attribute__((packed)) TRANSACTION2_SETFSI_REQ;
+} __packed TRANSACTION2_SETFSI_REQ;
 
 /* level 0x203 request structure follows */
 typedef struct smb_com_transaction2_setfs_enc_req {
@@ -1865,14 +1865,14 @@ typedef struct smb_com_transaction2_setfs_enc_req {
        __u16  Reserved4;       /* Parameters start. */
        __le16 InformationLevel;/* Parameters end. */
        /* NTLMSSP Blob, Data start. */
-} __attribute__((packed)) TRANSACTION2_SETFSI_ENC_REQ;
+} __packed TRANSACTION2_SETFSI_ENC_REQ;
 
 /* response for setfsinfo levels 0x200 and 0x203 */
 typedef struct smb_com_transaction2_setfsi_rsp {
        struct smb_hdr hdr;     /* wct = 10 */
        struct trans2_resp t2;
        __u16 ByteCount;
-} __attribute__((packed)) TRANSACTION2_SETFSI_RSP;
+} __packed TRANSACTION2_SETFSI_RSP;
 
 typedef struct smb_com_transaction2_get_dfs_refer_req {
        struct smb_hdr hdr;     /* wct = 15 */
@@ -1898,7 +1898,7 @@ typedef struct smb_com_transaction2_get_dfs_refer_req {
                                   seem to matter though */
        __le16 MaxReferralLevel;
        char RequestFileName[];
-} __attribute__((packed)) TRANSACTION2_GET_DFS_REFER_REQ;
+} __packed TRANSACTION2_GET_DFS_REFER_REQ;
 
 #define DFS_VERSION cpu_to_le16(0x0003)
 
@@ -1920,7 +1920,7 @@ typedef struct dfs_referral_level_3 { /* version 4 is same, + one flag bit */
        __le16 DfsAlternatePathOffset;
        __le16 NetworkAddressOffset; /* offset of the link target */
        __u8   ServiceSiteGuid[16];  /* MBZ, ignored */
-} __attribute__((packed)) REFERRAL3;
+} __packed REFERRAL3;
 
 struct get_dfs_referral_rsp {
        __le16 PathConsumed;
@@ -1960,7 +1960,7 @@ struct serverInfo {
        unsigned char versionMinor;
        unsigned long type;
        unsigned int commentOffset;
-} __attribute__((packed));
+} __packed;
 
 /*
  * The following structure is the format of the data returned on a NetShareEnum
@@ -1972,20 +1972,20 @@ struct shareInfo {
        char pad;
        unsigned short type;
        unsigned int commentOffset;
-} __attribute__((packed));
+} __packed;
 
 struct aliasInfo {
        char aliasName[9];
        char pad;
        unsigned int commentOffset;
        unsigned char type[2];
-} __attribute__((packed));
+} __packed;
 
 struct aliasInfo92 {
        int aliasNameOffset;
        int serverNameOffset;
        int shareNameOffset;
-} __attribute__((packed));
+} __packed;
 
 typedef struct {
        __le32 fsid;
@@ -1993,13 +1993,13 @@ typedef struct {
        __le32 TotalAllocationUnits;
        __le32 FreeAllocationUnits;
        __le16  BytesPerSector;
-} __attribute__((packed)) FILE_SYSTEM_ALLOC_INFO;
+} __packed FILE_SYSTEM_ALLOC_INFO;
 
 typedef struct {
        __le16 MajorVersionNumber;
        __le16 MinorVersionNumber;
        __le64 Capability;
-} __attribute__((packed)) FILE_SYSTEM_UNIX_INFO; /* Unix extension level 0x200*/
+} __packed FILE_SYSTEM_UNIX_INFO; /* Unix extension level 0x200*/
 
 /* Version numbers for CIFS UNIX major and minor. */
 #define CIFS_UNIX_MAJOR_VERSION 1
@@ -2102,7 +2102,7 @@ typedef struct { /* data block encoding of response to level 263 QPathInfo */
                char __pad;
                DECLARE_FLEX_ARRAY(char, FileName);
        };
-} __attribute__((packed)) FILE_ALL_INFO;       /* level 0x107 QPathInfo */
+} __packed FILE_ALL_INFO;      /* level 0x107 QPathInfo */
 
 typedef struct {
        __le64 AllocationSize;
@@ -2111,7 +2111,7 @@ typedef struct {
        __u8 DeletePending;
        __u8 Directory;
        __u16 Pad;
-} __attribute__((packed)) FILE_STANDARD_INFO;  /* level 0x102 QPathInfo */
+} __packed FILE_STANDARD_INFO; /* level 0x102 QPathInfo */
 
 
 /* defines for enumerating possible values of the Unix type field below */
@@ -2136,11 +2136,11 @@ typedef struct {
        __le64 UniqueId;
        __le64 Permissions;
        __le64 Nlinks;
-} __attribute__((packed)) FILE_UNIX_BASIC_INFO;        /* level 0x200 QPathInfo */
+} __packed FILE_UNIX_BASIC_INFO;       /* level 0x200 QPathInfo */
 
 typedef struct {
        DECLARE_FLEX_ARRAY(char, LinkDest);
-} __attribute__((packed)) FILE_UNIX_LINK_INFO; /* level 0x201 QPathInfo */
+} __packed FILE_UNIX_LINK_INFO;        /* level 0x201 QPathInfo */
 
 /* The following three structures are needed only for
        setting time to NT4 and some older servers via
@@ -2149,13 +2149,13 @@ typedef struct {
        __u16 Day:5;
        __u16 Month:4;
        __u16 Year:7;
-} __attribute__((packed)) SMB_DATE;
+} __packed SMB_DATE;
 
 typedef struct {
        __u16 TwoSeconds:5;
        __u16 Minutes:6;
        __u16 Hours:5;
-} __attribute__((packed)) SMB_TIME;
+} __packed SMB_TIME;
 
 typedef struct {
        __le16 CreationDate; /* SMB Date see above */
@@ -2168,7 +2168,7 @@ typedef struct {
        __le32 AllocationSize;
        __le16 Attributes; /* verify not u32 */
        __le32 EASize;
-} __attribute__((packed)) FILE_INFO_STANDARD;  /* level 1 SetPath/FileInfo */
+} __packed FILE_INFO_STANDARD;  /* level 1 SetPath/FileInfo */
 
 typedef struct {
        __le64 CreationTime;
@@ -2177,7 +2177,7 @@ typedef struct {
        __le64 ChangeTime;
        __le32 Attributes;
        __u32 Pad;
-} __attribute__((packed)) FILE_BASIC_INFO;     /* size info, level 0x101 */
+} __packed FILE_BASIC_INFO;    /* size info, level 0x101 */
 
 struct file_allocation_info {
        __le64 AllocationSize; /* Note old Samba srvr rounds this up too much */
@@ -2185,11 +2185,11 @@ struct file_allocation_info {
 
 struct file_end_of_file_info {
        __le64 FileSize;                /* offset to end of file */
-} __attribute__((packed)); /* size info, level 0x104 for set, 0x106 for query */
+} __packed; /* size info, level 0x104 for set, 0x106 for query */
 
 struct file_alt_name_info {
        DECLARE_FLEX_ARRAY(__u8, alt_name);
-} __attribute__((packed));      /* level 0x0108 */
+} __packed;      /* level 0x0108 */
 
 struct file_stream_info {
        __le32 number_of_streams;  /* BB check sizes and verify location */
@@ -2206,7 +2206,7 @@ struct file_compression_info {
        __u8   ch_shift;
        __u8   cl_shift;
        __u8   pad[3];
-} __attribute__((packed));      /* level 0x10b */
+} __packed;      /* level 0x10b */
 
 /* POSIX ACL set/query path info structures */
 #define CIFS_ACL_VERSION 1
@@ -2214,7 +2214,7 @@ struct cifs_posix_ace { /* access control entry (ACE) */
        __u8  cifs_e_tag;
        __u8  cifs_e_perm;
        __le64 cifs_uid; /* or gid */
-} __attribute__((packed));
+} __packed;
 
 struct cifs_posix_acl { /* access control list  (ACL) */
        __le16  version;
@@ -2222,7 +2222,7 @@ struct cifs_posix_acl { /* access control list  (ACL) */
        __le16  default_entry_count; /* default ACL - count of entries */
        struct cifs_posix_ace ace_array[];
        /* followed by struct cifs_posix_ace default_ace_array[] */
-} __attribute__((packed));  /* level 0x204 */
+} __packed;  /* level 0x204 */
 
 /* types of access control entries already defined in posix_acl.h */
 /* #define CIFS_POSIX_ACL_USER_OBJ      0x01
@@ -2257,7 +2257,7 @@ typedef struct {
        __le32 PosixOpenFlags;
        __le64 Permissions;
        __le16 Level; /* reply level requested (see QPathInfo levels) */
-} __attribute__((packed)) OPEN_PSX_REQ; /* level 0x209 SetPathInfo data */
+} __packed OPEN_PSX_REQ; /* level 0x209 SetPathInfo data */
 
 typedef struct {
        __le16 OplockFlags;
@@ -2266,27 +2266,27 @@ typedef struct {
        __le16 ReturnedLevel;
        __le16 Pad;
        /* struct following varies based on requested level */
-} __attribute__((packed)) OPEN_PSX_RSP; /* level 0x209 SetPathInfo data */
+} __packed OPEN_PSX_RSP; /* level 0x209 SetPathInfo data */
 
 #define SMB_POSIX_UNLINK_FILE_TARGET           0
 #define SMB_POSIX_UNLINK_DIRECTORY_TARGET      1
 
 struct unlink_psx_rq { /* level 0x20a SetPathInfo */
        __le16 type;
-} __attribute__((packed));
+} __packed;
 
 struct file_internal_info {
        __le64  UniqueId; /* inode number */
-} __attribute__((packed));      /* level 0x3ee */
+} __packed;      /* level 0x3ee */
 
 struct file_mode_info {
        __le32  Mode;
-} __attribute__((packed));      /* level 0x3f8 */
+} __packed;      /* level 0x3f8 */
 
 struct file_attrib_tag {
        __le32 Attribute;
        __le32 ReparseTag;
-} __attribute__((packed));      /* level 0x40b */
+} __packed;      /* level 0x40b */
 
 
 /********************************************************/
@@ -2301,7 +2301,7 @@ typedef struct {
                char __pad;
                DECLARE_FLEX_ARRAY(char, FileName);
        };
-} __attribute__((packed)) FILE_UNIX_INFO; /* level 0x202 */
+} __packed FILE_UNIX_INFO; /* level 0x202 */
 
 typedef struct {
        __u32  ResumeKey;
@@ -2316,7 +2316,7 @@ typedef struct {
        __le16 Attributes; /* verify not u32 */
        __u8   FileNameLength;
        char FileName[];
-} __attribute__((packed)) FIND_FILE_STANDARD_INFO; /* level 0x1 FF resp data */
+} __packed FIND_FILE_STANDARD_INFO; /* level 0x1 FF resp data */
 
 
 struct fea {
@@ -2325,21 +2325,21 @@ struct fea {
        __le16 value_len;
        char name[];
        /* optionally followed by value */
-} __attribute__((packed));
+} __packed;
 /* flags for _FEA.fEA */
 #define FEA_NEEDEA         0x80        /* need EA bit */
 
 struct fealist {
        __le32 list_len;
        struct fea list;
-} __attribute__((packed));
+} __packed;
 
 /* used to hold an arbitrary blob of data */
 struct data_blob {
        __u8 *data;
        size_t length;
        void (*free) (struct data_blob *data_blob);
-} __attribute__((packed));
+} __packed;
 
 
 #ifdef CONFIG_CIFS_POSIX
@@ -2442,7 +2442,7 @@ struct xsymlink {
        char cr2;        /* \n */
 /* if room left, then end with \n then 0x20s by convention but not required */
        char path[1024];
-} __attribute__((packed));
+} __packed;
 
 typedef struct file_xattr_info {
        /* BB do we need another field for flags? BB */
index ca4d6055d2f372af865c0d85806ecc17c7dc417a..ab42235b2955ed392ece63619988375020d5b817 100644 (file)
@@ -2312,8 +2312,8 @@ out_err:
 }
 #else /* ! CONFIG_KEYS */
 static inline int
-cifs_set_cifscreds(struct smb3_fs_context *ctx __attribute__((unused)),
-                  struct cifs_ses *ses __attribute__((unused)))
+cifs_set_cifscreds(struct smb3_fs_context *ctx __maybe_unused,
+                  struct cifs_ses *ses __maybe_unused)
 {
        return -ENOSYS;
 }
index 875de43b72de3e7337501ca910cc63675d0cfedd..a11fddc321f6a9bc99958299856961efc7f2e7e8 100644 (file)
@@ -73,7 +73,7 @@ typedef struct _SECURITY_BUFFER {
        __le16 Length;
        __le16 MaximumLength;
        __le32 BufferOffset;    /* offset to buffer */
-} __attribute__((packed)) SECURITY_BUFFER;
+} __packed SECURITY_BUFFER;
 
 typedef struct _NEGOTIATE_MESSAGE {
        __u8 Signature[sizeof(NTLMSSP_SIGNATURE)];
@@ -85,7 +85,7 @@ typedef struct _NEGOTIATE_MESSAGE {
           do not set the version is present flag */
        char DomainString[];
        /* followed by WorkstationString */
-} __attribute__((packed)) NEGOTIATE_MESSAGE, *PNEGOTIATE_MESSAGE;
+} __packed NEGOTIATE_MESSAGE, *PNEGOTIATE_MESSAGE;
 
 #define NTLMSSP_REVISION_W2K3 0x0F
 
@@ -121,7 +121,7 @@ typedef struct _CHALLENGE_MESSAGE {
        SECURITY_BUFFER TargetInfoArray;
        /* SECURITY_BUFFER for version info not present since we
           do not set the version is present flag */
-} __attribute__((packed)) CHALLENGE_MESSAGE, *PCHALLENGE_MESSAGE;
+} __packed CHALLENGE_MESSAGE, *PCHALLENGE_MESSAGE;
 
 typedef struct _AUTHENTICATE_MESSAGE {
        __u8 Signature[sizeof(NTLMSSP_SIGNATURE)];
@@ -136,7 +136,7 @@ typedef struct _AUTHENTICATE_MESSAGE {
        struct  ntlmssp_version Version;
        /* SECURITY_BUFFER */
        char UserString[];
-} __attribute__((packed)) AUTHENTICATE_MESSAGE, *PAUTHENTICATE_MESSAGE;
+} __packed AUTHENTICATE_MESSAGE, *PAUTHENTICATE_MESSAGE;
 
 /*
  * Size of the session key (crypto key encrypted with the password
index ac82c2f3a4a28c198ef35b0be0ee81f604e1f5f7..f5b143088b90f27dd9a6d30d044ee1537db6074c 100644 (file)
@@ -33,17 +33,17 @@ struct rfc1002_session_packet {
                        __u8 calling_len;
                        __u8 calling_name[32];
                        __u8 scope2; /* null */
-               } __attribute__((packed)) session_req;
+               } __packed session_req;
                struct {
                        __be32 retarget_ip_addr;
                        __be16 port;
-               } __attribute__((packed)) retarget_resp;
+               } __packed retarget_resp;
                __u8 neg_ses_resp_error_code;
                /* POSITIVE_SESSION_RESPONSE packet does not include trailer.
                SESSION_KEEP_ALIVE packet also does not include a trailer.
                Trailer for the SESSION_MESSAGE packet is SMB/CIFS header */
-       } __attribute__((packed)) trailer;
-} __attribute__((packed));
+       } __packed trailer;
+} __packed;
 
 /* Negative Session Response error codes */
 #define RFC1002_NOT_LISTENING_CALLED  0x80 /* not listening on called name */
index a624ec9e4a14437fd31759495efe7506c7d30c2a..70bba5ff7fc1d160d8d78b2a710b1510d3197ec9 100644 (file)
@@ -92,14 +92,14 @@ struct smb_ntsd {
        __le32 gsidoffset;
        __le32 sacloffset;
        __le32 dacloffset;
-} __attribute__((packed));
+} __packed;
 
 struct smb_sid {
        __u8 revision; /* revision level */
        __u8 num_subauth;
        __u8 authority[NUM_AUTHS];
        __le32 sub_auth[SID_MAX_SUB_AUTHORITIES]; /* sub_auth[num_subauth] */
-} __attribute__((packed));
+} __packed;
 
 /* size of a struct smb_sid, sans sub_auth array */
 #define CIFS_SID_BASE_SIZE (1 + 1 + NUM_AUTHS)
@@ -109,7 +109,7 @@ struct smb_acl {
        __le16 size;
        __le16 num_aces;
        __le16 reserved;
-} __attribute__((packed));
+} __packed;
 
 struct smb_ace {
        __u8 type; /* see above and MS-DTYP 2.4.4.1 */
@@ -117,6 +117,6 @@ struct smb_ace {
        __le16 size;
        __le32 access_req;
        struct smb_sid sid; /* ie UUID of user or group who gets these perms */
-} __attribute__((packed));
+} __packed;
 
 #endif /* _COMMON_SMBACL_H */