Lines Matching refs:fattr
67 struct cifs_fattr *fattr) in cifs_prime_dcache() argument
85 if (fattr->cf_flags & CIFS_FATTR_NEED_REVAL) in cifs_prime_dcache()
105 fattr->cf_uniqueid = CIFS_I(inode)->uniqueid; in cifs_prime_dcache()
109 if (CIFS_I(inode)->uniqueid == fattr->cf_uniqueid && in cifs_prime_dcache()
110 cifs_fattr_to_inode(inode, fattr) == 0) { in cifs_prime_dcache()
119 inode = cifs_iget(sb, fattr); in cifs_prime_dcache()
130 static bool reparse_file_needs_reval(const struct cifs_fattr *fattr) in reparse_file_needs_reval() argument
132 if (!(fattr->cf_cifsattrs & ATTR_REPARSE)) in reparse_file_needs_reval()
141 switch (fattr->cf_cifstag) { in reparse_file_needs_reval()
154 cifs_fill_common_info(struct cifs_fattr *fattr, struct cifs_sb_info *cifs_sb) in cifs_fill_common_info() argument
156 fattr->cf_uid = cifs_sb->ctx->linux_uid; in cifs_fill_common_info()
157 fattr->cf_gid = cifs_sb->ctx->linux_gid; in cifs_fill_common_info()
167 if ((fattr->cf_cifsattrs & ATTR_REPARSE) && in cifs_fill_common_info()
168 cifs_reparse_point_to_fattr(cifs_sb, fattr, fattr->cf_cifstag)) in cifs_fill_common_info()
171 if (fattr->cf_cifsattrs & ATTR_DIRECTORY) { in cifs_fill_common_info()
172 fattr->cf_mode = S_IFDIR | cifs_sb->ctx->dir_mode; in cifs_fill_common_info()
173 fattr->cf_dtype = DT_DIR; in cifs_fill_common_info()
175 fattr->cf_mode = S_IFREG | cifs_sb->ctx->file_mode; in cifs_fill_common_info()
176 fattr->cf_dtype = DT_REG; in cifs_fill_common_info()
185 if (reparse_file_needs_reval(fattr)) in cifs_fill_common_info()
186 fattr->cf_flags |= CIFS_FATTR_NEED_REVAL; in cifs_fill_common_info()
189 fattr->cf_flags |= CIFS_FATTR_UNKNOWN_NLINK; in cifs_fill_common_info()
191 if (fattr->cf_cifsattrs & ATTR_READONLY) in cifs_fill_common_info()
192 fattr->cf_mode &= ~S_IWUGO; in cifs_fill_common_info()
203 fattr->cf_flags |= CIFS_FATTR_NEED_REVAL; in cifs_fill_common_info()
206 fattr->cf_cifsattrs & ATTR_SYSTEM) { in cifs_fill_common_info()
207 if (fattr->cf_eof == 0) { in cifs_fill_common_info()
208 fattr->cf_mode &= ~S_IFMT; in cifs_fill_common_info()
209 fattr->cf_mode |= S_IFIFO; in cifs_fill_common_info()
210 fattr->cf_dtype = DT_FIFO; in cifs_fill_common_info()
217 fattr->cf_flags |= CIFS_FATTR_NEED_REVAL; in cifs_fill_common_info()
224 cifs_posix_to_fattr(struct cifs_fattr *fattr, struct smb2_posix_info *info, in cifs_posix_to_fattr() argument
231 memset(fattr, 0, sizeof(*fattr)); in cifs_posix_to_fattr()
232 fattr->cf_uniqueid = le64_to_cpu(info->Inode); in cifs_posix_to_fattr()
233 fattr->cf_bytes = le64_to_cpu(info->AllocationSize); in cifs_posix_to_fattr()
234 fattr->cf_eof = le64_to_cpu(info->EndOfFile); in cifs_posix_to_fattr()
236 fattr->cf_atime = cifs_NTtimeToUnix(info->LastAccessTime); in cifs_posix_to_fattr()
237 fattr->cf_mtime = cifs_NTtimeToUnix(info->LastWriteTime); in cifs_posix_to_fattr()
238 fattr->cf_ctime = cifs_NTtimeToUnix(info->CreationTime); in cifs_posix_to_fattr()
240 fattr->cf_nlink = le32_to_cpu(info->HardLinks); in cifs_posix_to_fattr()
241 fattr->cf_cifsattrs = le32_to_cpu(info->DosAttributes); in cifs_posix_to_fattr()
248 fattr->cf_mode = le32_to_cpu(info->Mode) & ~S_IFMT; in cifs_posix_to_fattr()
255 if (fattr->cf_cifsattrs & ATTR_DIRECTORY) { in cifs_posix_to_fattr()
256 fattr->cf_mode |= S_IFDIR; in cifs_posix_to_fattr()
257 fattr->cf_dtype = DT_DIR; in cifs_posix_to_fattr()
264 fattr->cf_mode |= S_IFREG; in cifs_posix_to_fattr()
265 fattr->cf_dtype = DT_REG; in cifs_posix_to_fattr()
268 if (reparse_file_needs_reval(fattr)) in cifs_posix_to_fattr()
269 fattr->cf_flags |= CIFS_FATTR_NEED_REVAL; in cifs_posix_to_fattr()
271 sid_to_id(cifs_sb, &parsed.owner, fattr, SIDOWNER); in cifs_posix_to_fattr()
272 sid_to_id(cifs_sb, &parsed.group, fattr, SIDGROUP); in cifs_posix_to_fattr()
275 static void __dir_info_to_fattr(struct cifs_fattr *fattr, const void *info) in __dir_info_to_fattr() argument
279 memset(fattr, 0, sizeof(*fattr)); in __dir_info_to_fattr()
280 fattr->cf_cifsattrs = le32_to_cpu(fi->ExtFileAttributes); in __dir_info_to_fattr()
281 fattr->cf_eof = le64_to_cpu(fi->EndOfFile); in __dir_info_to_fattr()
282 fattr->cf_bytes = le64_to_cpu(fi->AllocationSize); in __dir_info_to_fattr()
283 fattr->cf_createtime = le64_to_cpu(fi->CreationTime); in __dir_info_to_fattr()
284 fattr->cf_atime = cifs_NTtimeToUnix(fi->LastAccessTime); in __dir_info_to_fattr()
285 fattr->cf_ctime = cifs_NTtimeToUnix(fi->ChangeTime); in __dir_info_to_fattr()
286 fattr->cf_mtime = cifs_NTtimeToUnix(fi->LastWriteTime); in __dir_info_to_fattr()
290 cifs_dir_info_to_fattr(struct cifs_fattr *fattr, FILE_DIRECTORY_INFO *info, in cifs_dir_info_to_fattr() argument
293 __dir_info_to_fattr(fattr, info); in cifs_dir_info_to_fattr()
294 cifs_fill_common_info(fattr, cifs_sb); in cifs_dir_info_to_fattr()
297 static void cifs_fulldir_info_to_fattr(struct cifs_fattr *fattr, in cifs_fulldir_info_to_fattr() argument
301 __dir_info_to_fattr(fattr, info); in cifs_fulldir_info_to_fattr()
304 if (fattr->cf_cifsattrs & ATTR_REPARSE) in cifs_fulldir_info_to_fattr()
305 fattr->cf_cifstag = le32_to_cpu(info->EaSize); in cifs_fulldir_info_to_fattr()
306 cifs_fill_common_info(fattr, cifs_sb); in cifs_fulldir_info_to_fattr()
310 cifs_std_info_to_fattr(struct cifs_fattr *fattr, FIND_FILE_STANDARD_INFO *info, in cifs_std_info_to_fattr() argument
315 memset(fattr, 0, sizeof(*fattr)); in cifs_std_info_to_fattr()
316 fattr->cf_atime = cnvrtDosUnixTm(info->LastAccessDate, in cifs_std_info_to_fattr()
318 fattr->cf_ctime = cnvrtDosUnixTm(info->LastWriteDate, in cifs_std_info_to_fattr()
320 fattr->cf_mtime = cnvrtDosUnixTm(info->LastWriteDate, in cifs_std_info_to_fattr()
323 fattr->cf_cifsattrs = le16_to_cpu(info->Attributes); in cifs_std_info_to_fattr()
324 fattr->cf_bytes = le32_to_cpu(info->AllocationSize); in cifs_std_info_to_fattr()
325 fattr->cf_eof = le32_to_cpu(info->DataSize); in cifs_std_info_to_fattr()
327 cifs_fill_common_info(fattr, cifs_sb); in cifs_std_info_to_fattr()
861 dirent->fattr.cf_uniqueid, in emit_cached_dirents()
862 dirent->fattr.cf_dtype); in emit_cached_dirents()
897 struct cifs_fattr *fattr) in add_cached_dirent() argument
923 memcpy(&de->fattr, fattr, sizeof(struct cifs_fattr)); in add_cached_dirent()
930 struct cifs_fattr *fattr, in cifs_dir_emit() argument
934 ino_t ino = cifs_uniqueid_to_ino_t(fattr->cf_uniqueid); in cifs_dir_emit()
936 rc = dir_emit(ctx, name, namelen, ino, fattr->cf_dtype); in cifs_dir_emit()
943 fattr); in cifs_dir_emit()
959 struct cifs_fattr fattr; in cifs_filldir() local
997 cifs_posix_to_fattr(&fattr, in cifs_filldir()
1002 cifs_unix_basic_to_fattr(&fattr, in cifs_filldir()
1005 if (S_ISLNK(fattr.cf_mode)) in cifs_filldir()
1006 fattr.cf_flags |= CIFS_FATTR_NEED_REVAL; in cifs_filldir()
1009 cifs_std_info_to_fattr(&fattr, in cifs_filldir()
1014 cifs_fulldir_info_to_fattr(&fattr, in cifs_filldir()
1019 cifs_dir_info_to_fattr(&fattr, in cifs_filldir()
1026 fattr.cf_uniqueid = de.ino; in cifs_filldir()
1028 fattr.cf_uniqueid = iunique(sb, ROOT_I); in cifs_filldir()
1033 couldbe_mf_symlink(&fattr)) in cifs_filldir()
1039 fattr.cf_flags |= CIFS_FATTR_NEED_REVAL; in cifs_filldir()
1041 cifs_prime_dcache(file_dentry(file), &name, &fattr); in cifs_filldir()
1044 &fattr, cfid); in cifs_filldir()