Lines Matching +full:data +full:- +full:path
1 // SPDX-License-Identifier: GPL-2.0-only
41 switch (cifs_symlink_type(CIFS_SB(inode->i_sb))) { in create_reparse_symlink()
49 return -EOPNOTSUPP; in create_reparse_symlink()
58 struct cifs_open_info_data data = {}; in create_native_symlink() local
59 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb); in create_native_symlink()
60 const char *symroot = cifs_sb->ctx->symlinkroot; in create_native_symlink()
63 __le16 *path = NULL; in create_native_symlink() local
72 return -ENAMETOOLONG; in create_native_symlink()
76 rc = -ENOMEM; in create_native_symlink()
80 data = (struct cifs_open_info_data) { in create_native_symlink()
86 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS) && in create_native_symlink()
91 * NT-style path. So convert absolute Linux symlink target path in create_native_symlink()
92 * to the absolute NT-style path. Root of the NT-style path for in create_native_symlink()
99 * If the absolute Linux symlink target path is not in create_native_symlink()
101 * to convert such Linux symlink to NT-style path. in create_native_symlink()
107 rc = -EINVAL; in create_native_symlink()
111 if (symroot[len - 1] != '/') in create_native_symlink()
116 * Symlink points to Linux target /symlinkroot/x/path/... in create_native_symlink()
118 * NT-style path for 'x' has common form \??\X:\path\... in create_native_symlink()
124 rc = -ENOMEM; in create_native_symlink()
128 sym[4] = symname[len] - ('a'-'A'); in create_native_symlink()
138 rc = -EINVAL; in create_native_symlink()
147 * so no conversion is needed. So just take symname as-is. in create_native_symlink()
151 rc = -ENOMEM; in create_native_symlink()
167 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS) && symname[0] == '/') in create_native_symlink()
170 path = cifs_convert_path_to_utf16(sym, cifs_sb); in create_native_symlink()
171 if (!path) { in create_native_symlink()
172 rc = -ENOMEM; in create_native_symlink()
176 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS) && symname[0] == '/') { in create_native_symlink()
180 path[0] = cpu_to_le16('\\'); in create_native_symlink()
181 path[1] = path[2] = cpu_to_le16('?'); in create_native_symlink()
182 path[5] = cpu_to_le16(':'); in create_native_symlink()
188 * directory cannot be resolved and vice-versa). Try to detect if in create_native_symlink()
190 * fails then treat symlink as a file (non-directory) symlink. in create_native_symlink()
197 slen = 2 * UniStrnlen((wchar_t *)path, REPARSE_SYM_PATH_MAX); in create_native_symlink()
200 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS) && symname[0] == '/') { in create_native_symlink()
206 plen -= 2 * poff; in create_native_symlink()
211 rc = -ENOMEM; in create_native_symlink()
215 buf->ReparseTag = cpu_to_le32(IO_REPARSE_TAG_SYMLINK); in create_native_symlink()
216 buf->ReparseDataLength = cpu_to_le16(len - sizeof(struct reparse_data_buffer)); in create_native_symlink()
218 buf->SubstituteNameOffset = cpu_to_le16(plen); in create_native_symlink()
219 buf->SubstituteNameLength = cpu_to_le16(slen); in create_native_symlink()
220 memcpy(&buf->PathBuffer[plen], path, slen); in create_native_symlink()
222 buf->PrintNameOffset = 0; in create_native_symlink()
223 buf->PrintNameLength = cpu_to_le16(plen); in create_native_symlink()
224 memcpy(buf->PathBuffer, path+poff, plen); in create_native_symlink()
226 buf->Flags = cpu_to_le32(*symname != '/' ? SYMLINK_FLAG_RELATIVE : 0); in create_native_symlink()
230 new = tcon->ses->server->ops->create_reparse_inode( in create_native_symlink()
231 &data, inode->i_sb, xid, in create_native_symlink()
240 kfree(path); in create_native_symlink()
241 cifs_free_open_info(&data); in create_native_symlink()
268 * with slash, or last path component is dot or dot-dot then it is for in detect_directory_symlink_target()
286 "%s: cannot determinate if the symlink target path '%s' " in detect_directory_symlink_target()
294 * then try to resolve the path on the SMB server, check if the path in detect_directory_symlink_target()
308 return -ENOMEM; in detect_directory_symlink_target()
312 * Compose the resolved SMB symlink path from the SMB full path in detect_directory_symlink_target()
313 * and Linux target symlink path. in detect_directory_symlink_target()
334 open_rc = tcon->ses->server->ops->open(xid, &oparms, &oplock, NULL); in detect_directory_symlink_target()
336 /* Successful open means that the target path is definitely a directory. */ in detect_directory_symlink_target()
338 tcon->ses->server->ops->close(xid, tcon, &fid); in detect_directory_symlink_target()
339 } else if (open_rc == -ENOTDIR) { in detect_directory_symlink_target()
340 /* -ENOTDIR means that the target path is definitely a file. */ in detect_directory_symlink_target()
342 } else if (open_rc == -ENOENT) { in detect_directory_symlink_target()
343 /* -ENOENT means that the target path does not exist. */ in detect_directory_symlink_target()
345 "%s: symlink target path '%s' does not exist, " in detect_directory_symlink_target()
353 open_rc = tcon->ses->server->ops->open(xid, &oparms, &oplock, NULL); in detect_directory_symlink_target()
355 /* Successful open means that the target path is definitely a file. */ in detect_directory_symlink_target()
357 tcon->ses->server->ops->close(xid, tcon, &fid); in detect_directory_symlink_target()
358 } else if (open_rc == -EISDIR) { in detect_directory_symlink_target()
359 /* -EISDIR means that the target path is definitely a directory. */ in detect_directory_symlink_target()
367 * TODO: Try to use ops->query_dir_first on the parent directory in detect_directory_symlink_target()
370 * case this could work also when opening of the path is denied. in detect_directory_symlink_target()
373 "%s: cannot determinate if the symlink target path '%s' " in detect_directory_symlink_target()
392 struct cifs_open_info_data data = { in create_native_socket() local
403 new = tcon->ses->server->ops->create_reparse_inode( in create_native_socket()
404 &data, inode->i_sb, xid, in create_native_socket()
410 cifs_free_open_info(&data); in create_native_socket()
429 ((__le32 *)buf->DataBuffer)[0] = cpu_to_le32(MAJOR(dev)); in nfs_set_reparse_buf()
430 ((__le32 *)buf->DataBuffer)[1] = cpu_to_le32(MINOR(dev)); in nfs_set_reparse_buf()
434 memcpy(buf->DataBuffer, symname_utf16, symname_utf16_len); in nfs_set_reparse_buf()
441 return -EOPNOTSUPP; in nfs_set_reparse_buf()
444 buf->ReparseTag = cpu_to_le32(IO_REPARSE_TAG_NFS); in nfs_set_reparse_buf()
445 buf->Reserved = 0; in nfs_set_reparse_buf()
446 buf->InodeType = cpu_to_le64(type); in nfs_set_reparse_buf()
447 buf->ReparseDataLength = cpu_to_le16(len + dlen - in nfs_set_reparse_buf()
449 iov->iov_base = buf; in nfs_set_reparse_buf()
450 iov->iov_len = len + dlen; in nfs_set_reparse_buf()
459 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb); in mknod_nfs()
460 struct cifs_open_info_data data; in mknod_nfs() local
472 cifs_sb->local_nls, in mknod_nfs()
475 rc = -ENOMEM; in mknod_nfs()
478 symname_utf16_len -= 2; /* symlink is without trailing wide-nul */ in mknod_nfs()
481 rc = -ENOMEM; in mknod_nfs()
491 data = (struct cifs_open_info_data) { in mknod_nfs()
497 new = tcon->ses->server->ops->create_reparse_inode( in mknod_nfs()
498 &data, inode->i_sb, xid, in mknod_nfs()
504 cifs_free_open_info(&data); in mknod_nfs()
534 return -ENOMEM; in wsl_set_reparse_buf()
539 cifs_sb->local_nls, in wsl_set_reparse_buf()
542 return -ENOMEM; in wsl_set_reparse_buf()
548 return -ENOMEM; in wsl_set_reparse_buf()
550 /* Version field must be set to 2 (MS-FSCC 2.1.2.7) */ in wsl_set_reparse_buf()
551 symlink_buf->Version = cpu_to_le32(2); in wsl_set_reparse_buf()
552 /* Target for Version 2 is in UTF-8 but without trailing null-term byte */ in wsl_set_reparse_buf()
555 symlink_buf->Target, in wsl_set_reparse_buf()
562 return -EOPNOTSUPP; in wsl_set_reparse_buf()
565 (*buf)->ReparseTag = cpu_to_le32(tag); in wsl_set_reparse_buf()
566 (*buf)->Reserved = 0; in wsl_set_reparse_buf()
567 (*buf)->ReparseDataLength = cpu_to_le16(buf_len - sizeof(struct reparse_data_buffer)); in wsl_set_reparse_buf()
568 iov->iov_base = *buf; in wsl_set_reparse_buf()
569 iov->iov_len = buf_len; in wsl_set_reparse_buf()
580 return ERR_PTR(-ENOMEM); in ea_create_context()
582 cc->ctx.NameOffset = cpu_to_le16(offsetof(struct smb2_create_ea_ctx, in ea_create_context()
584 cc->ctx.NameLength = cpu_to_le16(4); in ea_create_context()
585 memcpy(cc->name, SMB2_CREATE_EA_BUFFER, strlen(SMB2_CREATE_EA_BUFFER)); in ea_create_context()
586 cc->ctx.DataOffset = cpu_to_le16(offsetof(struct smb2_create_ea_ctx, ea)); in ea_create_context()
587 cc->ctx.DataLength = cpu_to_le32(dlen); in ea_create_context()
603 struct smb3_fs_context *ctx = CIFS_SB(inode->i_sb)->ctx; in wsl_set_xattrs()
604 __le64 uid = cpu_to_le64(from_kuid(current_user_ns(), ctx->linux_uid)); in wsl_set_xattrs()
605 __le64 gid = cpu_to_le64(from_kgid(current_user_ns(), ctx->linux_gid)); in wsl_set_xattrs()
621 /* Exclude $LXDEV xattr for non-device files */ in wsl_set_xattrs()
623 num_xattrs = ARRAY_SIZE(xattrs) - 1; in wsl_set_xattrs()
637 ea = &cc->ea; in wsl_set_xattrs()
641 ea->next_entry_offset = cpu_to_le32(next); in wsl_set_xattrs()
643 ea->ea_name_length = name_size - 1; in wsl_set_xattrs()
644 ea->ea_value_length = cpu_to_le16(xattrs[i].size); in wsl_set_xattrs()
645 memcpy(ea->ea_data, xattrs[i].name, name_size); in wsl_set_xattrs()
646 memcpy(&ea->ea_data[name_size], in wsl_set_xattrs()
649 ea->next_entry_offset = 0; in wsl_set_xattrs()
651 iov->iov_base = cc; in wsl_set_xattrs()
652 iov->iov_len = cc_len; in wsl_set_xattrs()
661 struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb); in mknod_wsl()
662 struct cifs_open_info_data data; in mknod_wsl() local
680 data = (struct cifs_open_info_data) { in mknod_wsl()
682 .reparse = { .tag = le32_to_cpu(buf->ReparseTag), .buf = buf, }, in mknod_wsl()
687 len = le32_to_cpu(cc->ctx.DataLength); in mknod_wsl()
688 memcpy(data.wsl.eas, &cc->ea, len); in mknod_wsl()
689 data.wsl.eas_len = len; in mknod_wsl()
691 new = tcon->ses->server->ops->create_reparse_inode( in mknod_wsl()
692 &data, inode->i_sb, in mknod_wsl()
699 cifs_free_open_info(&data); in mknod_wsl()
709 struct smb3_fs_context *ctx = CIFS_SB(inode->i_sb)->ctx; in mknod_reparse()
711 if (S_ISSOCK(mode) && !ctx->nonativesocket && ctx->reparse_type != CIFS_REPARSE_TYPE_NONE) in mknod_reparse()
714 switch (ctx->reparse_type) { in mknod_reparse()
720 return -EOPNOTSUPP; in mknod_reparse()
724 /* See MS-FSCC 2.1.2.6 for the 'NFS' style reparse tags */
727 struct cifs_open_info_data *data) in parse_reparse_nfs() argument
732 len = le16_to_cpu(buf->ReparseDataLength); in parse_reparse_nfs()
733 if (len < sizeof(buf->InodeType)) { in parse_reparse_nfs()
735 return -EIO; in parse_reparse_nfs()
738 len -= sizeof(buf->InodeType); in parse_reparse_nfs()
740 switch ((type = le64_to_cpu(buf->InodeType))) { in parse_reparse_nfs()
744 return -EIO; in parse_reparse_nfs()
747 * Check that buffer does not contain UTF-16 null codepoint in parse_reparse_nfs()
750 if (UniStrnlen((wchar_t *)buf->DataBuffer, len/2) != len/2) { in parse_reparse_nfs()
752 return -EIO; in parse_reparse_nfs()
754 data->symlink_target = cifs_strndup_from_utf16(buf->DataBuffer, in parse_reparse_nfs()
756 cifs_sb->local_nls); in parse_reparse_nfs()
757 if (!data->symlink_target) in parse_reparse_nfs()
758 return -ENOMEM; in parse_reparse_nfs()
759 cifs_dbg(FYI, "%s: target path: %s\n", in parse_reparse_nfs()
760 __func__, data->symlink_target); in parse_reparse_nfs()
764 /* DataBuffer for block and char devices contains two 32-bit numbers */ in parse_reparse_nfs()
767 return -EIO; in parse_reparse_nfs()
775 return -EIO; in parse_reparse_nfs()
781 return -EOPNOTSUPP; in parse_reparse_nfs()
791 const char *symroot = cifs_sb->ctx->symlinkroot; in smb2_parse_native_symlink()
805 rc = -EIO; in smb2_parse_native_symlink()
810 * Check that buffer does not contain UTF-16 null codepoint in smb2_parse_native_symlink()
815 rc = -EIO; in smb2_parse_native_symlink()
819 smb_target = cifs_strndup_from_utf16(buf, len, true, cifs_sb->local_nls); in smb2_parse_native_symlink()
821 rc = -ENOMEM; in smb2_parse_native_symlink()
825 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS) && in smb2_parse_native_symlink()
829 * support POSIX paths, so the symlink is in NT-style path. in smb2_parse_native_symlink()
830 * So convert it to absolute Linux symlink target path. Root of in smb2_parse_native_symlink()
831 * the NT-style path for symlinks is specified in "symlinkroot" in smb2_parse_native_symlink()
834 * Root of the DOS and Win32 paths is at NT path \??\ in smb2_parse_native_symlink()
835 * It means that DOS/Win32 path C:\folder\file.txt is in smb2_parse_native_symlink()
836 * NT path \??\C:\folder\file.txt in smb2_parse_native_symlink()
838 * NT systems have some well-known object symlinks in their NT in smb2_parse_native_symlink()
841 * \?? -> \GLOBAL?? in smb2_parse_native_symlink()
842 * \DosDevices -> \?? in smb2_parse_native_symlink()
843 * \GLOBAL??\GLOBALROOT -> \ in smb2_parse_native_symlink()
844 * \GLOBAL??\Global -> \GLOBAL?? in smb2_parse_native_symlink()
845 * \GLOBAL??\NUL -> \Device\Null in smb2_parse_native_symlink()
846 * \GLOBAL??\UNC -> \Device\Mup in smb2_parse_native_symlink()
847 * \GLOBAL??\PhysicalDrive0 -> \Device\Harddisk0\DR0 (for each harddisk) in smb2_parse_native_symlink()
848 * \GLOBAL??\A: -> \Device\Floppy0 (if A: is the first floppy) in smb2_parse_native_symlink()
849 * \GLOBAL??\C: -> \Device\HarddiskVolume1 (if C: is the first harddisk) in smb2_parse_native_symlink()
850 * \GLOBAL??\D: -> \Device\CdRom0 (if D: is first cdrom) in smb2_parse_native_symlink()
851 * \SystemRoot -> \Device\Harddisk0\Partition1\WINDOWS (or where is NT system installed) in smb2_parse_native_symlink()
852 * \Volume{...} -> \Device\HarddiskVolume1 (where ... is system generated guid) in smb2_parse_native_symlink()
854 * In most common cases, absolute NT symlinks points to path on in smb2_parse_native_symlink()
855 * DOS/Win32 drive letter, system-specific Volume or on UNC share. in smb2_parse_native_symlink()
862 * \??\Volume{b75e2c83-0000-0000-0000-602f00000000}\folder\file.txt in smb2_parse_native_symlink()
864 * It means that the most common path prefix \??\ is also NT path in smb2_parse_native_symlink()
865 * symlink (to \GLOBAL??). It is less common that second path in smb2_parse_native_symlink()
881 abs_path += sizeof("\\??\\")-1; in smb2_parse_native_symlink()
883 abs_path += sizeof("\\DosDevices\\")-1; in smb2_parse_native_symlink()
885 abs_path += sizeof("\\GLOBAL??\\")-1; in smb2_parse_native_symlink()
889 /* Sometimes path separator after \?? is double backslash */ in smb2_parse_native_symlink()
894 abs_path += sizeof("Global\\")-1; in smb2_parse_native_symlink()
897 /* Label globalroot requires path with leading '\\', so do not trim '\\' */ in smb2_parse_native_symlink()
898 abs_path += sizeof("GLOBALROOT")-1; in smb2_parse_native_symlink()
910 drive_letter += 'a'-'A'; in smb2_parse_native_symlink()
919 if (symroot[symlinkroot_len - 1] == '/') in smb2_parse_native_symlink()
920 symlinkroot_len--; in smb2_parse_native_symlink()
923 rc = -ENOMEM; in smb2_parse_native_symlink()
935 * full_path is the SMB path to the symlink (from which is in smb2_parse_native_symlink()
936 * extracted current directory) and smb_target is the SMB path in smb2_parse_native_symlink()
948 rc = -ENOMEM; in smb2_parse_native_symlink()
959 * This is either an absolute symlink in POSIX-style format in smb2_parse_native_symlink()
988 struct cifs_open_info_data *data) in parse_reparse_native_symlink() argument
993 /* We handle Symbolic Link reparse tag here. See: MS-FSCC 2.1.2.4 */ in parse_reparse_native_symlink()
995 offs = le16_to_cpu(sym->SubstituteNameOffset); in parse_reparse_native_symlink()
996 len = le16_to_cpu(sym->SubstituteNameLength); in parse_reparse_native_symlink()
999 return -EIO; in parse_reparse_native_symlink()
1002 return smb2_parse_native_symlink(&data->symlink_target, in parse_reparse_native_symlink()
1003 sym->PathBuffer + offs, in parse_reparse_native_symlink()
1005 le32_to_cpu(sym->Flags) & SYMLINK_FLAG_RELATIVE, in parse_reparse_native_symlink()
1012 struct cifs_open_info_data *data) in parse_reparse_wsl_symlink() argument
1014 int len = le16_to_cpu(buf->ReparseDataLength); in parse_reparse_wsl_symlink()
1015 int data_offset = offsetof(typeof(*buf), Target) - offsetof(typeof(*buf), Version); in parse_reparse_wsl_symlink()
1022 return -EIO; in parse_reparse_wsl_symlink()
1025 /* MS-FSCC 2.1.2.7 defines layout of the Target field only for Version 2. */ in parse_reparse_wsl_symlink()
1026 if (le32_to_cpu(buf->Version) != 2) { in parse_reparse_wsl_symlink()
1027 cifs_dbg(VFS, "srv returned unsupported wsl symlink version %u\n", le32_to_cpu(buf->Version)); in parse_reparse_wsl_symlink()
1028 return -EIO; in parse_reparse_wsl_symlink()
1031 /* Target for Version 2 is in UTF-8 but without trailing null-term byte */ in parse_reparse_wsl_symlink()
1032 symname_utf8_len = len - data_offset; in parse_reparse_wsl_symlink()
1037 if (strnlen(buf->Target, symname_utf8_len) != symname_utf8_len) { in parse_reparse_wsl_symlink()
1039 return -EIO; in parse_reparse_wsl_symlink()
1043 return -ENOMEM; in parse_reparse_wsl_symlink()
1044 symname_utf16_len = utf8s_to_utf16s(buf->Target, symname_utf8_len, in parse_reparse_wsl_symlink()
1053 data->symlink_target = cifs_strndup_from_utf16((u8 *)symname_utf16, in parse_reparse_wsl_symlink()
1055 cifs_sb->local_nls); in parse_reparse_wsl_symlink()
1057 if (!data->symlink_target) in parse_reparse_wsl_symlink()
1058 return -ENOMEM; in parse_reparse_wsl_symlink()
1066 struct cifs_open_info_data *data) in parse_reparse_point() argument
1068 data->reparse.buf = buf; in parse_reparse_point()
1070 /* See MS-FSCC 2.1.2 */ in parse_reparse_point()
1071 switch (le32_to_cpu(buf->ReparseTag)) { in parse_reparse_point()
1074 cifs_sb, data); in parse_reparse_point()
1078 plen, cifs_sb, full_path, data); in parse_reparse_point()
1082 cifs_sb, data); in parse_reparse_point()
1087 if (le16_to_cpu(buf->ReparseDataLength) != 0) { in parse_reparse_point()
1089 le32_to_cpu(buf->ReparseTag)); in parse_reparse_point()
1090 return -EIO; in parse_reparse_point()
1094 return -EOPNOTSUPP; in parse_reparse_point()
1101 struct smb2_ioctl_rsp *io = rsp_iov->iov_base; in smb2_get_reparse_point_buffer()
1102 *plen = le32_to_cpu(io->OutputCount); in smb2_get_reparse_point_buffer()
1104 le32_to_cpu(io->OutputOffset)); in smb2_get_reparse_point_buffer()
1107 static bool wsl_to_fattr(struct cifs_open_info_data *data, in wsl_to_fattr() argument
1117 fattr->cf_mode |= S_IFLNK; in wsl_to_fattr()
1120 fattr->cf_mode |= S_IFIFO; in wsl_to_fattr()
1123 fattr->cf_mode |= S_IFSOCK; in wsl_to_fattr()
1126 fattr->cf_mode |= S_IFCHR; in wsl_to_fattr()
1129 fattr->cf_mode |= S_IFBLK; in wsl_to_fattr()
1133 if (!data->wsl.eas_len) in wsl_to_fattr()
1136 ea = (struct smb2_file_full_ea_info *)data->wsl.eas; in wsl_to_fattr()
1143 next = le32_to_cpu(ea->next_entry_offset); in wsl_to_fattr()
1144 if (!le16_to_cpu(ea->ea_value_length)) in wsl_to_fattr()
1147 name = ea->ea_data; in wsl_to_fattr()
1148 nlen = ea->ea_name_length; in wsl_to_fattr()
1149 v = (void *)((u8 *)ea->ea_data + ea->ea_name_length + 1); in wsl_to_fattr()
1152 fattr->cf_uid = wsl_make_kuid(cifs_sb, v); in wsl_to_fattr()
1154 fattr->cf_gid = wsl_make_kgid(cifs_sb, v); in wsl_to_fattr()
1157 if (S_DT(fattr->cf_mode) != S_DT(le32_to_cpu(*(__le32 *)v))) in wsl_to_fattr()
1159 fattr->cf_mode = (umode_t)le32_to_cpu(*(__le32 *)v); in wsl_to_fattr()
1161 fattr->cf_rdev = reparse_mkdev(v); in wsl_to_fattr()
1176 struct cifs_open_info_data *data) in posix_reparse_to_fattr() argument
1178 struct reparse_nfs_data_buffer *buf = (struct reparse_nfs_data_buffer *)data->reparse.buf; in posix_reparse_to_fattr()
1183 if (le16_to_cpu(buf->ReparseDataLength) < sizeof(buf->InodeType)) { in posix_reparse_to_fattr()
1188 switch (le64_to_cpu(buf->InodeType)) { in posix_reparse_to_fattr()
1190 if (le16_to_cpu(buf->ReparseDataLength) != sizeof(buf->InodeType) + 8) { in posix_reparse_to_fattr()
1194 fattr->cf_mode |= S_IFCHR; in posix_reparse_to_fattr()
1195 fattr->cf_rdev = reparse_mkdev(buf->DataBuffer); in posix_reparse_to_fattr()
1198 if (le16_to_cpu(buf->ReparseDataLength) != sizeof(buf->InodeType) + 8) { in posix_reparse_to_fattr()
1202 fattr->cf_mode |= S_IFBLK; in posix_reparse_to_fattr()
1203 fattr->cf_rdev = reparse_mkdev(buf->DataBuffer); in posix_reparse_to_fattr()
1206 fattr->cf_mode |= S_IFIFO; in posix_reparse_to_fattr()
1209 fattr->cf_mode |= S_IFSOCK; in posix_reparse_to_fattr()
1212 fattr->cf_mode |= S_IFLNK; in posix_reparse_to_fattr()
1223 struct cifs_open_info_data *data) in cifs_reparse_point_to_fattr() argument
1225 u32 tag = data->reparse.tag; in cifs_reparse_point_to_fattr()
1234 ok = wsl_to_fattr(data, cifs_sb, tag, fattr); in cifs_reparse_point_to_fattr()
1239 ok = posix_reparse_to_fattr(cifs_sb, fattr, data); in cifs_reparse_point_to_fattr()
1245 fattr->cf_mode |= S_IFLNK; in cifs_reparse_point_to_fattr()
1248 if (!(fattr->cf_cifsattrs & ATTR_DIRECTORY)) in cifs_reparse_point_to_fattr()
1254 fattr->cf_mode = S_IFDIR | 0711; in cifs_reparse_point_to_fattr()
1258 fattr->cf_dtype = S_DT(fattr->cf_mode); in cifs_reparse_point_to_fattr()