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()
153 cifs_fill_common_info(struct cifs_fattr *fattr, struct cifs_sb_info *cifs_sb) in cifs_fill_common_info() argument
155 fattr->cf_uid = cifs_sb->ctx->linux_uid; in cifs_fill_common_info()
156 fattr->cf_gid = cifs_sb->ctx->linux_gid; in cifs_fill_common_info()
166 if (fattr->cf_cifsattrs & ATTR_DIRECTORY) { in cifs_fill_common_info()
167 fattr->cf_mode = S_IFDIR | cifs_sb->ctx->dir_mode; in cifs_fill_common_info()
168 fattr->cf_dtype = DT_DIR; in cifs_fill_common_info()
169 } else if (fattr->cf_cifstag == IO_REPARSE_TAG_LX_SYMLINK) { in cifs_fill_common_info()
170 fattr->cf_mode |= S_IFLNK | cifs_sb->ctx->file_mode; in cifs_fill_common_info()
171 fattr->cf_dtype = DT_LNK; in cifs_fill_common_info()
172 } else if (fattr->cf_cifstag == IO_REPARSE_TAG_LX_FIFO) { in cifs_fill_common_info()
173 fattr->cf_mode |= S_IFIFO | cifs_sb->ctx->file_mode; in cifs_fill_common_info()
174 fattr->cf_dtype = DT_FIFO; in cifs_fill_common_info()
175 } else if (fattr->cf_cifstag == IO_REPARSE_TAG_AF_UNIX) { in cifs_fill_common_info()
176 fattr->cf_mode |= S_IFSOCK | cifs_sb->ctx->file_mode; in cifs_fill_common_info()
177 fattr->cf_dtype = DT_SOCK; in cifs_fill_common_info()
178 } else if (fattr->cf_cifstag == IO_REPARSE_TAG_LX_CHR) { in cifs_fill_common_info()
179 fattr->cf_mode |= S_IFCHR | cifs_sb->ctx->file_mode; in cifs_fill_common_info()
180 fattr->cf_dtype = DT_CHR; in cifs_fill_common_info()
181 } else if (fattr->cf_cifstag == IO_REPARSE_TAG_LX_BLK) { in cifs_fill_common_info()
182 fattr->cf_mode |= S_IFBLK | cifs_sb->ctx->file_mode; in cifs_fill_common_info()
183 fattr->cf_dtype = DT_BLK; in cifs_fill_common_info()
185 fattr->cf_mode = S_IFREG | cifs_sb->ctx->file_mode; in cifs_fill_common_info()
186 fattr->cf_dtype = DT_REG; in cifs_fill_common_info()
194 if (reparse_file_needs_reval(fattr)) in cifs_fill_common_info()
195 fattr->cf_flags |= CIFS_FATTR_NEED_REVAL; in cifs_fill_common_info()
198 fattr->cf_flags |= CIFS_FATTR_UNKNOWN_NLINK; in cifs_fill_common_info()
200 if (fattr->cf_cifsattrs & ATTR_READONLY) in cifs_fill_common_info()
201 fattr->cf_mode &= ~S_IWUGO; in cifs_fill_common_info()
212 fattr->cf_flags |= CIFS_FATTR_NEED_REVAL; in cifs_fill_common_info()
215 fattr->cf_cifsattrs & ATTR_SYSTEM) { in cifs_fill_common_info()
216 if (fattr->cf_eof == 0) { in cifs_fill_common_info()
217 fattr->cf_mode &= ~S_IFMT; in cifs_fill_common_info()
218 fattr->cf_mode |= S_IFIFO; in cifs_fill_common_info()
219 fattr->cf_dtype = DT_FIFO; in cifs_fill_common_info()
226 fattr->cf_flags |= CIFS_FATTR_NEED_REVAL; in cifs_fill_common_info()
233 cifs_posix_to_fattr(struct cifs_fattr *fattr, struct smb2_posix_info *info, in cifs_posix_to_fattr() argument
240 memset(fattr, 0, sizeof(*fattr)); in cifs_posix_to_fattr()
241 fattr->cf_uniqueid = le64_to_cpu(info->Inode); in cifs_posix_to_fattr()
242 fattr->cf_bytes = le64_to_cpu(info->AllocationSize); in cifs_posix_to_fattr()
243 fattr->cf_eof = le64_to_cpu(info->EndOfFile); in cifs_posix_to_fattr()
245 fattr->cf_atime = cifs_NTtimeToUnix(info->LastAccessTime); in cifs_posix_to_fattr()
246 fattr->cf_mtime = cifs_NTtimeToUnix(info->LastWriteTime); in cifs_posix_to_fattr()
247 fattr->cf_ctime = cifs_NTtimeToUnix(info->CreationTime); in cifs_posix_to_fattr()
249 fattr->cf_nlink = le32_to_cpu(info->HardLinks); in cifs_posix_to_fattr()
250 fattr->cf_cifsattrs = le32_to_cpu(info->DosAttributes); in cifs_posix_to_fattr()
257 fattr->cf_mode = le32_to_cpu(info->Mode) & ~S_IFMT; in cifs_posix_to_fattr()
264 if (fattr->cf_cifsattrs & ATTR_DIRECTORY) { in cifs_posix_to_fattr()
265 fattr->cf_mode |= S_IFDIR; in cifs_posix_to_fattr()
266 fattr->cf_dtype = DT_DIR; in cifs_posix_to_fattr()
273 fattr->cf_mode |= S_IFREG; in cifs_posix_to_fattr()
274 fattr->cf_dtype = DT_REG; in cifs_posix_to_fattr()
277 if (reparse_file_needs_reval(fattr)) in cifs_posix_to_fattr()
278 fattr->cf_flags |= CIFS_FATTR_NEED_REVAL; in cifs_posix_to_fattr()
280 sid_to_id(cifs_sb, &parsed.owner, fattr, SIDOWNER); in cifs_posix_to_fattr()
281 sid_to_id(cifs_sb, &parsed.group, fattr, SIDGROUP); in cifs_posix_to_fattr()
284 static void __dir_info_to_fattr(struct cifs_fattr *fattr, const void *info) in __dir_info_to_fattr() argument
288 memset(fattr, 0, sizeof(*fattr)); in __dir_info_to_fattr()
289 fattr->cf_cifsattrs = le32_to_cpu(fi->ExtFileAttributes); in __dir_info_to_fattr()
290 fattr->cf_eof = le64_to_cpu(fi->EndOfFile); in __dir_info_to_fattr()
291 fattr->cf_bytes = le64_to_cpu(fi->AllocationSize); in __dir_info_to_fattr()
292 fattr->cf_createtime = le64_to_cpu(fi->CreationTime); in __dir_info_to_fattr()
293 fattr->cf_atime = cifs_NTtimeToUnix(fi->LastAccessTime); in __dir_info_to_fattr()
294 fattr->cf_ctime = cifs_NTtimeToUnix(fi->ChangeTime); in __dir_info_to_fattr()
295 fattr->cf_mtime = cifs_NTtimeToUnix(fi->LastWriteTime); in __dir_info_to_fattr()
299 cifs_dir_info_to_fattr(struct cifs_fattr *fattr, FILE_DIRECTORY_INFO *info, in cifs_dir_info_to_fattr() argument
302 __dir_info_to_fattr(fattr, info); in cifs_dir_info_to_fattr()
303 cifs_fill_common_info(fattr, cifs_sb); in cifs_dir_info_to_fattr()
306 static void cifs_fulldir_info_to_fattr(struct cifs_fattr *fattr, in cifs_fulldir_info_to_fattr() argument
310 __dir_info_to_fattr(fattr, info); in cifs_fulldir_info_to_fattr()
313 if (fattr->cf_cifsattrs & ATTR_REPARSE) in cifs_fulldir_info_to_fattr()
314 fattr->cf_cifstag = le32_to_cpu(info->EaSize); in cifs_fulldir_info_to_fattr()
315 cifs_fill_common_info(fattr, cifs_sb); in cifs_fulldir_info_to_fattr()
319 cifs_std_info_to_fattr(struct cifs_fattr *fattr, FIND_FILE_STANDARD_INFO *info, in cifs_std_info_to_fattr() argument
324 memset(fattr, 0, sizeof(*fattr)); in cifs_std_info_to_fattr()
325 fattr->cf_atime = cnvrtDosUnixTm(info->LastAccessDate, in cifs_std_info_to_fattr()
327 fattr->cf_ctime = cnvrtDosUnixTm(info->LastWriteDate, in cifs_std_info_to_fattr()
329 fattr->cf_mtime = cnvrtDosUnixTm(info->LastWriteDate, in cifs_std_info_to_fattr()
332 fattr->cf_cifsattrs = le16_to_cpu(info->Attributes); in cifs_std_info_to_fattr()
333 fattr->cf_bytes = le32_to_cpu(info->AllocationSize); in cifs_std_info_to_fattr()
334 fattr->cf_eof = le32_to_cpu(info->DataSize); in cifs_std_info_to_fattr()
336 cifs_fill_common_info(fattr, cifs_sb); in cifs_std_info_to_fattr()
870 dirent->fattr.cf_uniqueid, in emit_cached_dirents()
871 dirent->fattr.cf_dtype); in emit_cached_dirents()
906 struct cifs_fattr *fattr) in add_cached_dirent() argument
932 memcpy(&de->fattr, fattr, sizeof(struct cifs_fattr)); in add_cached_dirent()
939 struct cifs_fattr *fattr, in cifs_dir_emit() argument
943 ino_t ino = cifs_uniqueid_to_ino_t(fattr->cf_uniqueid); in cifs_dir_emit()
945 rc = dir_emit(ctx, name, namelen, ino, fattr->cf_dtype); in cifs_dir_emit()
952 fattr); in cifs_dir_emit()
968 struct cifs_fattr fattr; in cifs_filldir() local
1006 cifs_posix_to_fattr(&fattr, in cifs_filldir()
1011 cifs_unix_basic_to_fattr(&fattr, in cifs_filldir()
1014 if (S_ISLNK(fattr.cf_mode)) in cifs_filldir()
1015 fattr.cf_flags |= CIFS_FATTR_NEED_REVAL; in cifs_filldir()
1018 cifs_std_info_to_fattr(&fattr, in cifs_filldir()
1023 cifs_fulldir_info_to_fattr(&fattr, in cifs_filldir()
1028 cifs_dir_info_to_fattr(&fattr, in cifs_filldir()
1035 fattr.cf_uniqueid = de.ino; in cifs_filldir()
1037 fattr.cf_uniqueid = iunique(sb, ROOT_I); in cifs_filldir()
1042 couldbe_mf_symlink(&fattr)) in cifs_filldir()
1048 fattr.cf_flags |= CIFS_FATTR_NEED_REVAL; in cifs_filldir()
1050 cifs_prime_dcache(file_dentry(file), &name, &fattr); in cifs_filldir()
1053 &fattr, cfid); in cifs_filldir()