]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
SMB3: Add new info level for query directory
authorSteve French <stfrench@microsoft.com>
Tue, 22 Jun 2021 18:56:20 +0000 (13:56 -0500)
committerSteve French <stfrench@microsoft.com>
Wed, 23 Jun 2021 18:05:17 +0000 (13:05 -0500)
The recently updated MS-SMB2 (June 2021) added protocol definitions
for a new level 60 for query directory (FileIdExtdDirectoryInformation).

Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/readdir.c
fs/cifs/smb2pdu.h

index 00b6b953d13c17d1136f51ec97b022b40d997f22..bfee176b901d45257076b5aeeb939bc5951097f1 100644 (file)
@@ -309,7 +309,7 @@ static void cifs_fulldir_info_to_fattr(struct cifs_fattr *fattr,
 {
        __dir_info_to_fattr(fattr, info);
 
-       /* See MS-FSCC 2.4.18 FileIdFullDirectoryInformation */
+       /* See MS-FSCC 2.4.19 FileIdFullDirectoryInformation */
        if (fattr->cf_cifsattrs & ATTR_REPARSE)
                fattr->cf_cifstag = le32_to_cpu(info->EaSize);
        cifs_fill_common_info(fattr, cifs_sb);
index 653486243cdfc1bc6219365178663f0b30dd6630..a5c48b85549a9ae154d91362029150763b4a18f8 100644 (file)
@@ -264,7 +264,7 @@ struct share_redirect_error_context_rsp {
        __le32 NotificationType;
        __le32 ResourceNameOffset;
        __le32 ResourceNameLength;
-       __le16 Flags;
+       __le16 Reserved;
        __le16 TargetType;
        __le32 IPAddrCount;
        struct move_dst_ipaddr IpAddrMoveList[];
@@ -1448,6 +1448,22 @@ struct smb2_echo_rsp {
 
 #define SMB2_QUERY_DIRECTORY_IOV_SIZE 2
 
+/*
+ * Valid FileInformation classes.
+ *
+ * Note that these are a subset of the (file) QUERY_INFO levels defined
+ * later in this file (but since QUERY_DIRECTORY uses equivalent numbers
+ * we do not redefine them here)
+ *
+ * FileDirectoryInfomation             0x01
+ * FileFullDirectoryInformation                0x02
+ * FileIdFullDirectoryInformation      0x26
+ * FileBothDirectoryInformation                0x03
+ * FileIdBothDirectoryInformation      0x25
+ * FileNamesInformation                        0x0C
+ * FileIdExtdDirectoryInformation      0x3C
+ */
+
 struct smb2_query_directory_req {
        struct smb2_sync_hdr sync_hdr;
        __le16 StructureSize; /* Must be 33 */
@@ -1684,6 +1700,7 @@ struct smb3_fs_vol_info {
 #define FILEID_GLOBAL_TX_DIRECTORY_INFORMATION 50
 #define FILE_STANDARD_LINK_INFORMATION 54
 #define FILE_ID_INFORMATION            59
+#define FILE_ID_EXTD_DIRECTORY_INFORMATION 60
 
 struct smb2_file_internal_info {
        __le64 IndexNumber;
@@ -1764,13 +1781,31 @@ struct smb2_file_network_open_info {
        __le32 Reserved;
 } __packed; /* level 34 Query also similar returned in close rsp and open rsp */
 
-/* See MS-FSCC 2.4.43 */
+/* See MS-FSCC 2.4.21 */
 struct smb2_file_id_information {
        __le64  VolumeSerialNumber;
        __u64  PersistentFileId; /* opaque endianness */
        __u64  VolatileFileId; /* opaque endianness */
 } __packed; /* level 59 */
 
+/* See MS-FSCC 2.4.18 */
+struct smb2_file_id_extd_directory_info {
+       __le32 NextEntryOffset;
+       __u32 FileIndex;
+       __le64 CreationTime;
+       __le64 LastAccessTime;
+       __le64 LastWriteTime;
+       __le64 ChangeTime;
+       __le64 EndOfFile;
+       __le64 AllocationSize;
+       __le32 FileAttributes;
+       __le32 FileNameLength;
+       __le32 EaSize; /* EA size */
+       __le32 ReparsePointTag; /* valid if FILE_ATTR_REPARSE_POINT set in FileAttributes */
+       __le64 UniqueId; /* inode num - le since Samba puts ino in low 32 bit */
+       char FileName[1];
+} __packed; /* level 60 */
+
 extern char smb2_padding[7];
 
 /* equivalent of the contents of SMB3.1.1 POSIX open context response */