Lines Matching refs:fattr
78 struct cifs_fattr *fattr) in cifs_prime_dcache() argument
96 if (fattr->cf_flags & CIFS_FATTR_NEED_REVAL) in cifs_prime_dcache()
116 fattr->cf_uniqueid = CIFS_I(inode)->uniqueid; in cifs_prime_dcache()
120 if (CIFS_I(inode)->uniqueid == fattr->cf_uniqueid && in cifs_prime_dcache()
122 (fattr->cf_mode & S_IFMT)) { in cifs_prime_dcache()
123 cifs_fattr_to_inode(inode, fattr); in cifs_prime_dcache()
132 inode = cifs_iget(sb, fattr); in cifs_prime_dcache()
143 static bool reparse_file_needs_reval(const struct cifs_fattr *fattr) in reparse_file_needs_reval() argument
145 if (!(fattr->cf_cifsattrs & ATTR_REPARSE)) in reparse_file_needs_reval()
154 switch (fattr->cf_cifstag) { in reparse_file_needs_reval()
166 cifs_fill_common_info(struct cifs_fattr *fattr, struct cifs_sb_info *cifs_sb) in cifs_fill_common_info() argument
168 fattr->cf_uid = cifs_sb->mnt_uid; in cifs_fill_common_info()
169 fattr->cf_gid = cifs_sb->mnt_gid; in cifs_fill_common_info()
179 if (fattr->cf_cifsattrs & ATTR_DIRECTORY) { in cifs_fill_common_info()
180 fattr->cf_mode = S_IFDIR | cifs_sb->mnt_dir_mode; in cifs_fill_common_info()
181 fattr->cf_dtype = DT_DIR; in cifs_fill_common_info()
182 } else if (fattr->cf_cifstag == IO_REPARSE_TAG_LX_SYMLINK) { in cifs_fill_common_info()
183 fattr->cf_mode |= S_IFLNK | cifs_sb->mnt_file_mode; in cifs_fill_common_info()
184 fattr->cf_dtype = DT_LNK; in cifs_fill_common_info()
185 } else if (fattr->cf_cifstag == IO_REPARSE_TAG_LX_FIFO) { in cifs_fill_common_info()
186 fattr->cf_mode |= S_IFIFO | cifs_sb->mnt_file_mode; in cifs_fill_common_info()
187 fattr->cf_dtype = DT_FIFO; in cifs_fill_common_info()
188 } else if (fattr->cf_cifstag == IO_REPARSE_TAG_AF_UNIX) { in cifs_fill_common_info()
189 fattr->cf_mode |= S_IFSOCK | cifs_sb->mnt_file_mode; in cifs_fill_common_info()
190 fattr->cf_dtype = DT_SOCK; in cifs_fill_common_info()
191 } else if (fattr->cf_cifstag == IO_REPARSE_TAG_LX_CHR) { in cifs_fill_common_info()
192 fattr->cf_mode |= S_IFCHR | cifs_sb->mnt_file_mode; in cifs_fill_common_info()
193 fattr->cf_dtype = DT_CHR; in cifs_fill_common_info()
194 } else if (fattr->cf_cifstag == IO_REPARSE_TAG_LX_BLK) { in cifs_fill_common_info()
195 fattr->cf_mode |= S_IFBLK | cifs_sb->mnt_file_mode; in cifs_fill_common_info()
196 fattr->cf_dtype = DT_BLK; in cifs_fill_common_info()
198 fattr->cf_mode = S_IFREG | cifs_sb->mnt_file_mode; in cifs_fill_common_info()
199 fattr->cf_dtype = DT_REG; in cifs_fill_common_info()
207 if (reparse_file_needs_reval(fattr)) in cifs_fill_common_info()
208 fattr->cf_flags |= CIFS_FATTR_NEED_REVAL; in cifs_fill_common_info()
211 fattr->cf_flags |= CIFS_FATTR_UNKNOWN_NLINK; in cifs_fill_common_info()
213 if (fattr->cf_cifsattrs & ATTR_READONLY) in cifs_fill_common_info()
214 fattr->cf_mode &= ~S_IWUGO; in cifs_fill_common_info()
225 fattr->cf_flags |= CIFS_FATTR_NEED_REVAL; in cifs_fill_common_info()
228 fattr->cf_cifsattrs & ATTR_SYSTEM) { in cifs_fill_common_info()
229 if (fattr->cf_eof == 0) { in cifs_fill_common_info()
230 fattr->cf_mode &= ~S_IFMT; in cifs_fill_common_info()
231 fattr->cf_mode |= S_IFIFO; in cifs_fill_common_info()
232 fattr->cf_dtype = DT_FIFO; in cifs_fill_common_info()
239 fattr->cf_flags |= CIFS_FATTR_NEED_REVAL; in cifs_fill_common_info()
246 cifs_posix_to_fattr(struct cifs_fattr *fattr, struct smb2_posix_info *info, in cifs_posix_to_fattr() argument
253 memset(fattr, 0, sizeof(*fattr)); in cifs_posix_to_fattr()
254 fattr->cf_uniqueid = le64_to_cpu(info->Inode); in cifs_posix_to_fattr()
255 fattr->cf_bytes = le64_to_cpu(info->AllocationSize); in cifs_posix_to_fattr()
256 fattr->cf_eof = le64_to_cpu(info->EndOfFile); in cifs_posix_to_fattr()
258 fattr->cf_atime = cifs_NTtimeToUnix(info->LastAccessTime); in cifs_posix_to_fattr()
259 fattr->cf_mtime = cifs_NTtimeToUnix(info->LastWriteTime); in cifs_posix_to_fattr()
260 fattr->cf_ctime = cifs_NTtimeToUnix(info->CreationTime); in cifs_posix_to_fattr()
262 fattr->cf_nlink = le32_to_cpu(info->HardLinks); in cifs_posix_to_fattr()
263 fattr->cf_cifsattrs = le32_to_cpu(info->DosAttributes); in cifs_posix_to_fattr()
270 fattr->cf_mode = le32_to_cpu(info->Mode) & ~S_IFMT; in cifs_posix_to_fattr()
277 if (fattr->cf_cifsattrs & ATTR_DIRECTORY) { in cifs_posix_to_fattr()
278 fattr->cf_mode |= S_IFDIR; in cifs_posix_to_fattr()
279 fattr->cf_dtype = DT_DIR; in cifs_posix_to_fattr()
286 fattr->cf_mode |= S_IFREG; in cifs_posix_to_fattr()
287 fattr->cf_dtype = DT_REG; in cifs_posix_to_fattr()
290 if (reparse_file_needs_reval(fattr)) in cifs_posix_to_fattr()
291 fattr->cf_flags |= CIFS_FATTR_NEED_REVAL; in cifs_posix_to_fattr()
293 sid_to_id(cifs_sb, &parsed.owner, fattr, SIDOWNER); in cifs_posix_to_fattr()
294 sid_to_id(cifs_sb, &parsed.group, fattr, SIDGROUP); in cifs_posix_to_fattr()
297 static void __dir_info_to_fattr(struct cifs_fattr *fattr, const void *info) in __dir_info_to_fattr() argument
301 memset(fattr, 0, sizeof(*fattr)); in __dir_info_to_fattr()
302 fattr->cf_cifsattrs = le32_to_cpu(fi->ExtFileAttributes); in __dir_info_to_fattr()
303 fattr->cf_eof = le64_to_cpu(fi->EndOfFile); in __dir_info_to_fattr()
304 fattr->cf_bytes = le64_to_cpu(fi->AllocationSize); in __dir_info_to_fattr()
305 fattr->cf_createtime = le64_to_cpu(fi->CreationTime); in __dir_info_to_fattr()
306 fattr->cf_atime = cifs_NTtimeToUnix(fi->LastAccessTime); in __dir_info_to_fattr()
307 fattr->cf_ctime = cifs_NTtimeToUnix(fi->ChangeTime); in __dir_info_to_fattr()
308 fattr->cf_mtime = cifs_NTtimeToUnix(fi->LastWriteTime); in __dir_info_to_fattr()
312 cifs_dir_info_to_fattr(struct cifs_fattr *fattr, FILE_DIRECTORY_INFO *info, in cifs_dir_info_to_fattr() argument
315 __dir_info_to_fattr(fattr, info); in cifs_dir_info_to_fattr()
316 cifs_fill_common_info(fattr, cifs_sb); in cifs_dir_info_to_fattr()
319 static void cifs_fulldir_info_to_fattr(struct cifs_fattr *fattr, in cifs_fulldir_info_to_fattr() argument
323 __dir_info_to_fattr(fattr, info); in cifs_fulldir_info_to_fattr()
326 if (fattr->cf_cifsattrs & ATTR_REPARSE) in cifs_fulldir_info_to_fattr()
327 fattr->cf_cifstag = le32_to_cpu(info->EaSize); in cifs_fulldir_info_to_fattr()
328 cifs_fill_common_info(fattr, cifs_sb); in cifs_fulldir_info_to_fattr()
332 cifs_std_info_to_fattr(struct cifs_fattr *fattr, FIND_FILE_STANDARD_INFO *info, in cifs_std_info_to_fattr() argument
337 memset(fattr, 0, sizeof(*fattr)); in cifs_std_info_to_fattr()
338 fattr->cf_atime = cnvrtDosUnixTm(info->LastAccessDate, in cifs_std_info_to_fattr()
340 fattr->cf_ctime = cnvrtDosUnixTm(info->LastWriteDate, in cifs_std_info_to_fattr()
342 fattr->cf_mtime = cnvrtDosUnixTm(info->LastWriteDate, in cifs_std_info_to_fattr()
345 fattr->cf_cifsattrs = le16_to_cpu(info->Attributes); in cifs_std_info_to_fattr()
346 fattr->cf_bytes = le32_to_cpu(info->AllocationSize); in cifs_std_info_to_fattr()
347 fattr->cf_eof = le32_to_cpu(info->DataSize); in cifs_std_info_to_fattr()
349 cifs_fill_common_info(fattr, cifs_sb); in cifs_std_info_to_fattr()
844 struct cifs_fattr fattr; in cifs_filldir() local
883 cifs_posix_to_fattr(&fattr, in cifs_filldir()
888 cifs_unix_basic_to_fattr(&fattr, in cifs_filldir()
893 cifs_std_info_to_fattr(&fattr, in cifs_filldir()
898 cifs_fulldir_info_to_fattr(&fattr, in cifs_filldir()
903 cifs_dir_info_to_fattr(&fattr, in cifs_filldir()
910 fattr.cf_uniqueid = de.ino; in cifs_filldir()
912 fattr.cf_uniqueid = iunique(sb, ROOT_I); in cifs_filldir()
917 couldbe_mf_symlink(&fattr)) in cifs_filldir()
923 fattr.cf_flags |= CIFS_FATTR_NEED_REVAL; in cifs_filldir()
925 cifs_prime_dcache(file_dentry(file), &name, &fattr); in cifs_filldir()
927 ino = cifs_uniqueid_to_ino_t(fattr.cf_uniqueid); in cifs_filldir()
928 return !dir_emit(ctx, name.name, name.len, ino, fattr.cf_dtype); in cifs_filldir()