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