@@ -3994,6 +3994,26 @@ static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level,
3994
3994
posix_info -> DeviceId = cpu_to_le32 (ksmbd_kstat -> kstat -> rdev );
3995
3995
posix_info -> HardLinks = cpu_to_le32 (ksmbd_kstat -> kstat -> nlink );
3996
3996
posix_info -> Mode = cpu_to_le32 (ksmbd_kstat -> kstat -> mode & 0777 );
3997
+ switch (ksmbd_kstat -> kstat -> mode & S_IFMT ) {
3998
+ case S_IFDIR :
3999
+ posix_info -> Mode |= cpu_to_le32 (POSIX_TYPE_DIR << POSIX_FILETYPE_SHIFT );
4000
+ break ;
4001
+ case S_IFLNK :
4002
+ posix_info -> Mode |= cpu_to_le32 (POSIX_TYPE_SYMLINK << POSIX_FILETYPE_SHIFT );
4003
+ break ;
4004
+ case S_IFCHR :
4005
+ posix_info -> Mode |= cpu_to_le32 (POSIX_TYPE_CHARDEV << POSIX_FILETYPE_SHIFT );
4006
+ break ;
4007
+ case S_IFBLK :
4008
+ posix_info -> Mode |= cpu_to_le32 (POSIX_TYPE_BLKDEV << POSIX_FILETYPE_SHIFT );
4009
+ break ;
4010
+ case S_IFIFO :
4011
+ posix_info -> Mode |= cpu_to_le32 (POSIX_TYPE_FIFO << POSIX_FILETYPE_SHIFT );
4012
+ break ;
4013
+ case S_IFSOCK :
4014
+ posix_info -> Mode |= cpu_to_le32 (POSIX_TYPE_SOCKET << POSIX_FILETYPE_SHIFT );
4015
+ }
4016
+
3997
4017
posix_info -> Inode = cpu_to_le64 (ksmbd_kstat -> kstat -> ino );
3998
4018
posix_info -> DosAttributes =
3999
4019
S_ISDIR (ksmbd_kstat -> kstat -> mode ) ?
@@ -5184,6 +5204,26 @@ static int find_file_posix_info(struct smb2_query_info_rsp *rsp,
5184
5204
file_info -> AllocationSize = cpu_to_le64 (stat .blocks << 9 );
5185
5205
file_info -> HardLinks = cpu_to_le32 (stat .nlink );
5186
5206
file_info -> Mode = cpu_to_le32 (stat .mode & 0777 );
5207
+ switch (stat .mode & S_IFMT ) {
5208
+ case S_IFDIR :
5209
+ file_info -> Mode |= cpu_to_le32 (POSIX_TYPE_DIR << POSIX_FILETYPE_SHIFT );
5210
+ break ;
5211
+ case S_IFLNK :
5212
+ file_info -> Mode |= cpu_to_le32 (POSIX_TYPE_SYMLINK << POSIX_FILETYPE_SHIFT );
5213
+ break ;
5214
+ case S_IFCHR :
5215
+ file_info -> Mode |= cpu_to_le32 (POSIX_TYPE_CHARDEV << POSIX_FILETYPE_SHIFT );
5216
+ break ;
5217
+ case S_IFBLK :
5218
+ file_info -> Mode |= cpu_to_le32 (POSIX_TYPE_BLKDEV << POSIX_FILETYPE_SHIFT );
5219
+ break ;
5220
+ case S_IFIFO :
5221
+ file_info -> Mode |= cpu_to_le32 (POSIX_TYPE_FIFO << POSIX_FILETYPE_SHIFT );
5222
+ break ;
5223
+ case S_IFSOCK :
5224
+ file_info -> Mode |= cpu_to_le32 (POSIX_TYPE_SOCKET << POSIX_FILETYPE_SHIFT );
5225
+ }
5226
+
5187
5227
file_info -> DeviceId = cpu_to_le32 (stat .rdev );
5188
5228
5189
5229
/*
0 commit comments