int cifs_sfu_make_node(unsigned int xid, struct inode *inode,
                       struct dentry *dentry, struct cifs_tcon *tcon,
                       const char *full_path, umode_t mode, dev_t dev);
-umode_t wire_mode_to_posix(u32 wire);
+umode_t wire_mode_to_posix(u32 wire, bool is_dir);
 
 #ifdef CONFIG_CIFS_DFS_UPCALL
 static inline int get_dfs_path(const unsigned int xid, struct cifs_ses *ses,
 
        return posix_filetypes[wire_type];
 }
 
-umode_t wire_mode_to_posix(u32 wire)
+umode_t wire_mode_to_posix(u32 wire, bool is_dir)
 {
        u32 wire_type;
        u32 mode;
 
        wire_type = (wire & POSIX_FILETYPE_MASK) >> POSIX_FILETYPE_SHIFT;
-       mode = (wire_perms_to_posix(wire) | wire_filetype_to_posix(wire_type));
+       /* older servers do not set POSIX file type in the mode field in the response */
+       if ((wire_type == 0) && is_dir)
+               mode = wire_perms_to_posix(wire) | S_IFDIR;
+       else
+               mode = (wire_perms_to_posix(wire) | wire_filetype_to_posix(wire_type));
        return (umode_t)mode;
 }
 
        fattr->cf_bytes = le64_to_cpu(info->AllocationSize);
        fattr->cf_createtime = le64_to_cpu(info->CreationTime);
        fattr->cf_nlink = le32_to_cpu(info->HardLinks);
-       fattr->cf_mode = wire_mode_to_posix(le32_to_cpu(info->Mode));
+       fattr->cf_mode = wire_mode_to_posix(le32_to_cpu(info->Mode),
+                                           fattr->cf_cifsattrs & ATTR_DIRECTORY);
 
        if (cifs_open_data_reparse(data) &&
            cifs_reparse_point_to_fattr(cifs_sb, fattr, data))
 
                fattr->cf_cifstag = le32_to_cpu(info->ReparseTag);
 
        /* The Mode field in the response can now include the file type as well */
-       fattr->cf_mode = wire_mode_to_posix(le32_to_cpu(info->Mode));
+       fattr->cf_mode = wire_mode_to_posix(le32_to_cpu(info->Mode),
+                                           fattr->cf_cifsattrs & ATTR_DIRECTORY);
        fattr->cf_dtype = S_DT(le32_to_cpu(info->Mode));
 
        switch (fattr->cf_mode & S_IFMT) {