@@ -3994,6 +3994,26 @@ static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level,
39943994 posix_info -> DeviceId = cpu_to_le32 (ksmbd_kstat -> kstat -> rdev );
39953995 posix_info -> HardLinks = cpu_to_le32 (ksmbd_kstat -> kstat -> nlink );
39963996 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+
39974017 posix_info -> Inode = cpu_to_le64 (ksmbd_kstat -> kstat -> ino );
39984018 posix_info -> DosAttributes =
39994019 S_ISDIR (ksmbd_kstat -> kstat -> mode ) ?
@@ -5184,6 +5204,26 @@ static int find_file_posix_info(struct smb2_query_info_rsp *rsp,
51845204 file_info -> AllocationSize = cpu_to_le64 (stat .blocks << 9 );
51855205 file_info -> HardLinks = cpu_to_le32 (stat .nlink );
51865206 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+
51875227 file_info -> DeviceId = cpu_to_le32 (stat .rdev );
51885228
51895229 /*
0 commit comments