Commit 8bd25b61 authored by Paulo Alcantara's avatar Paulo Alcantara Committed by Steve French

smb: client: set correct d_type for reparse DFS/DFSR and mount point

Set correct dirent->d_type for IO_REPARSE_TAG_DFS{,R} and
IO_REPARSE_TAG_MOUNT_POINT reparse points.
Signed-off-by: default avatarPaulo Alcantara <pc@manguebit.com>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 78e26bec
...@@ -482,34 +482,35 @@ bool cifs_reparse_point_to_fattr(struct cifs_sb_info *cifs_sb, ...@@ -482,34 +482,35 @@ bool cifs_reparse_point_to_fattr(struct cifs_sb_info *cifs_sb,
switch (le64_to_cpu(buf->InodeType)) { switch (le64_to_cpu(buf->InodeType)) {
case NFS_SPECFILE_CHR: case NFS_SPECFILE_CHR:
fattr->cf_mode |= S_IFCHR; fattr->cf_mode |= S_IFCHR;
fattr->cf_dtype = DT_CHR;
fattr->cf_rdev = reparse_nfs_mkdev(buf); fattr->cf_rdev = reparse_nfs_mkdev(buf);
break; break;
case NFS_SPECFILE_BLK: case NFS_SPECFILE_BLK:
fattr->cf_mode |= S_IFBLK; fattr->cf_mode |= S_IFBLK;
fattr->cf_dtype = DT_BLK;
fattr->cf_rdev = reparse_nfs_mkdev(buf); fattr->cf_rdev = reparse_nfs_mkdev(buf);
break; break;
case NFS_SPECFILE_FIFO: case NFS_SPECFILE_FIFO:
fattr->cf_mode |= S_IFIFO; fattr->cf_mode |= S_IFIFO;
fattr->cf_dtype = DT_FIFO;
break; break;
case NFS_SPECFILE_SOCK: case NFS_SPECFILE_SOCK:
fattr->cf_mode |= S_IFSOCK; fattr->cf_mode |= S_IFSOCK;
fattr->cf_dtype = DT_SOCK;
break; break;
case NFS_SPECFILE_LNK: case NFS_SPECFILE_LNK:
fattr->cf_mode |= S_IFLNK; fattr->cf_mode |= S_IFLNK;
fattr->cf_dtype = DT_LNK;
break; break;
default: default:
WARN_ON_ONCE(1); WARN_ON_ONCE(1);
return false; return false;
} }
return true; goto out;
} }
switch (tag) { switch (tag) {
case IO_REPARSE_TAG_DFS:
case IO_REPARSE_TAG_DFSR:
case IO_REPARSE_TAG_MOUNT_POINT:
/* See cifs_create_junction_fattr() */
fattr->cf_mode = S_IFDIR | 0711;
break;
case IO_REPARSE_TAG_LX_SYMLINK: case IO_REPARSE_TAG_LX_SYMLINK:
case IO_REPARSE_TAG_LX_FIFO: case IO_REPARSE_TAG_LX_FIFO:
case IO_REPARSE_TAG_AF_UNIX: case IO_REPARSE_TAG_AF_UNIX:
...@@ -521,10 +522,11 @@ bool cifs_reparse_point_to_fattr(struct cifs_sb_info *cifs_sb, ...@@ -521,10 +522,11 @@ bool cifs_reparse_point_to_fattr(struct cifs_sb_info *cifs_sb,
case IO_REPARSE_TAG_SYMLINK: case IO_REPARSE_TAG_SYMLINK:
case IO_REPARSE_TAG_NFS: case IO_REPARSE_TAG_NFS:
fattr->cf_mode |= S_IFLNK; fattr->cf_mode |= S_IFLNK;
fattr->cf_dtype = DT_LNK;
break; break;
default: default:
return false; return false;
} }
out:
fattr->cf_dtype = S_DT(fattr->cf_mode);
return true; return true;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment