Lines Matching refs:fattr
95 cifs_revalidate_cache(struct inode *inode, struct cifs_fattr *fattr) argument
116 if (timespec64_equal(&inode->i_mtime, &fattr->cf_mtime) &&
117 cifs_i->server_eof == fattr->cf_eof) {
133 cifs_nlink_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr) argument
140 if (fattr->cf_flags & CIFS_FATTR_UNKNOWN_NLINK) {
143 if (fattr->cf_cifsattrs & ATTR_DIRECTORY)
152 set_nlink(inode, fattr->cf_nlink);
157 cifs_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr) argument
162 cifs_revalidate_cache(inode, fattr);
165 inode->i_atime = fattr->cf_atime;
166 inode->i_mtime = fattr->cf_mtime;
167 inode->i_ctime = fattr->cf_ctime;
168 inode->i_rdev = fattr->cf_rdev;
169 cifs_nlink_fattr_to_inode(inode, fattr);
170 inode->i_uid = fattr->cf_uid;
171 inode->i_gid = fattr->cf_gid;
176 inode->i_mode = fattr->cf_mode;
178 cifs_i->cifsAttrs = fattr->cf_cifsattrs;
180 if (fattr->cf_flags & CIFS_FATTR_NEED_REVAL)
185 if (fattr->cf_flags & CIFS_FATTR_DELETE_PENDING)
190 cifs_i->server_eof = fattr->cf_eof;
195 if (is_size_safe_to_change(cifs_i, fattr->cf_eof)) {
196 i_size_write(inode, fattr->cf_eof);
203 inode->i_blocks = (512 - 1 + fattr->cf_bytes) >> 9;
207 if (fattr->cf_flags & CIFS_FATTR_DFS_REFERRAL)
214 cifs_fill_uniqueid(struct super_block *sb, struct cifs_fattr *fattr) argument
221 fattr->cf_uniqueid = iunique(sb, ROOT_I);
226 cifs_unix_basic_to_fattr(struct cifs_fattr *fattr, FILE_UNIX_BASIC_INFO *info, argument
229 memset(fattr, 0, sizeof(*fattr));
230 fattr->cf_uniqueid = le64_to_cpu(info->UniqueId);
231 fattr->cf_bytes = le64_to_cpu(info->NumOfBytes);
232 fattr->cf_eof = le64_to_cpu(info->EndOfFile);
234 fattr->cf_atime = cifs_NTtimeToUnix(info->LastAccessTime);
235 fattr->cf_mtime = cifs_NTtimeToUnix(info->LastModificationTime);
236 fattr->cf_ctime = cifs_NTtimeToUnix(info->LastStatusChange);
239 fattr->cf_mode = le64_to_cpu(info->Permissions);
245 fattr->cf_mode &= ~S_IFMT;
248 fattr->cf_mode |= S_IFREG;
249 fattr->cf_dtype = DT_REG;
252 fattr->cf_mode |= S_IFLNK;
253 fattr->cf_dtype = DT_LNK;
256 fattr->cf_mode |= S_IFDIR;
257 fattr->cf_dtype = DT_DIR;
260 fattr->cf_mode |= S_IFCHR;
261 fattr->cf_dtype = DT_CHR;
262 fattr->cf_rdev = MKDEV(le64_to_cpu(info->DevMajor),
266 fattr->cf_mode |= S_IFBLK;
267 fattr->cf_dtype = DT_BLK;
268 fattr->cf_rdev = MKDEV(le64_to_cpu(info->DevMajor),
272 fattr->cf_mode |= S_IFIFO;
273 fattr->cf_dtype = DT_FIFO;
276 fattr->cf_mode |= S_IFSOCK;
277 fattr->cf_dtype = DT_SOCK;
281 fattr->cf_mode |= S_IFREG;
282 fattr->cf_dtype = DT_REG;
287 fattr->cf_uid = cifs_sb->mnt_uid;
293 fattr->cf_uid = uid;
297 fattr->cf_gid = cifs_sb->mnt_gid;
303 fattr->cf_gid = gid;
307 fattr->cf_nlink = le64_to_cpu(info->Nlinks);
318 cifs_create_dfs_fattr(struct cifs_fattr *fattr, struct super_block *sb) argument
324 memset(fattr, 0, sizeof(*fattr));
325 fattr->cf_mode = S_IFDIR | S_IXUGO | S_IRWXU;
326 fattr->cf_uid = cifs_sb->mnt_uid;
327 fattr->cf_gid = cifs_sb->mnt_gid;
328 ktime_get_real_ts64(&fattr->cf_mtime);
329 fattr->cf_mtime = timespec64_trunc(fattr->cf_mtime, sb->s_time_gran);
330 fattr->cf_atime = fattr->cf_ctime = fattr->cf_mtime;
331 fattr->cf_nlink = 2;
332 fattr->cf_flags |= CIFS_FATTR_DFS_REFERRAL;
341 struct cifs_fattr fattr; local
350 cifs_unix_basic_to_fattr(&fattr, &find_data, cifs_sb);
352 cifs_create_dfs_fattr(&fattr, inode->i_sb);
356 cifs_fattr_to_inode(inode, &fattr);
367 struct cifs_fattr fattr; local
385 cifs_unix_basic_to_fattr(&fattr, &find_data, cifs_sb);
387 cifs_create_dfs_fattr(&fattr, sb);
395 int tmprc = check_mf_symlink(xid, tcon, cifs_sb, &fattr,
403 cifs_fill_uniqueid(sb, &fattr);
404 *pinode = cifs_iget(sb, &fattr);
412 CIFS_I(*pinode)->uniqueid != fattr.cf_uniqueid)) {
419 (fattr.cf_mode & S_IFMT))) {
424 cifs_fattr_to_inode(*pinode, &fattr);
432 cifs_sfu_type(struct cifs_fattr *fattr, const char *path, argument
449 fattr->cf_mode &= ~S_IFMT;
451 if (fattr->cf_eof == 0) {
452 fattr->cf_mode |= S_IFIFO;
453 fattr->cf_dtype = DT_FIFO;
455 } else if (fattr->cf_eof < 8) {
456 fattr->cf_mode |= S_IFREG;
457 fattr->cf_dtype = DT_REG;
500 fattr->cf_mode |= S_IFBLK;
501 fattr->cf_dtype = DT_BLK;
508 fattr->cf_rdev = MKDEV(mjr, mnr);
512 fattr->cf_mode |= S_IFCHR;
513 fattr->cf_dtype = DT_CHR;
520 fattr->cf_rdev = MKDEV(mjr, mnr);
524 fattr->cf_mode |= S_IFLNK;
525 fattr->cf_dtype = DT_LNK;
527 fattr->cf_mode |= S_IFREG; /* file? */
528 fattr->cf_dtype = DT_REG;
532 fattr->cf_mode |= S_IFREG; /* then it is a file */
533 fattr->cf_dtype = DT_REG;
549 static int cifs_sfu_mode(struct cifs_fattr *fattr, const unsigned char *path, argument
577 fattr->cf_mode &= ~SFBITS_MASK;
579 mode, fattr->cf_mode);
580 fattr->cf_mode = (mode & SFBITS_MASK) | fattr->cf_mode;
592 cifs_all_info_to_fattr(struct cifs_fattr *fattr, FILE_ALL_INFO *info, argument
599 memset(fattr, 0, sizeof(*fattr));
600 fattr->cf_cifsattrs = le32_to_cpu(info->Attributes);
602 fattr->cf_flags |= CIFS_FATTR_DELETE_PENDING;
605 fattr->cf_atime = cifs_NTtimeToUnix(info->LastAccessTime);
607 ktime_get_real_ts64(&fattr->cf_atime);
608 fattr->cf_atime = timespec64_trunc(fattr->cf_atime, sb->s_time_gran);
611 fattr->cf_ctime = cifs_NTtimeToUnix(info->ChangeTime);
612 fattr->cf_mtime = cifs_NTtimeToUnix(info->LastWriteTime);
615 fattr->cf_ctime.tv_sec += tcon->ses->server->timeAdj;
616 fattr->cf_mtime.tv_sec += tcon->ses->server->timeAdj;
619 fattr->cf_eof = le64_to_cpu(info->EndOfFile);
620 fattr->cf_bytes = le64_to_cpu(info->AllocationSize);
621 fattr->cf_createtime = le64_to_cpu(info->CreationTime);
623 fattr->cf_nlink = le32_to_cpu(info->NumberOfLinks);
626 fattr->cf_mode = S_IFLNK;
627 fattr->cf_dtype = DT_LNK;
628 } else if (fattr->cf_cifsattrs & ATTR_DIRECTORY) {
629 fattr->cf_mode = S_IFDIR | cifs_sb->mnt_dir_mode;
630 fattr->cf_dtype = DT_DIR;
636 fattr->cf_flags |= CIFS_FATTR_UNKNOWN_NLINK;
638 fattr->cf_mode = S_IFREG | cifs_sb->mnt_file_mode;
639 fattr->cf_dtype = DT_REG;
642 if (fattr->cf_cifsattrs & ATTR_READONLY)
643 fattr->cf_mode &= ~(S_IWUGO);
649 if ((fattr->cf_nlink < 1) && !tcon->unix_ext &&
652 fattr->cf_nlink);
653 fattr->cf_flags |= CIFS_FATTR_UNKNOWN_NLINK;
657 fattr->cf_uid = cifs_sb->mnt_uid;
658 fattr->cf_gid = cifs_sb->mnt_gid;
667 struct cifs_fattr fattr; local
680 cifs_all_info_to_fattr(&fattr, &find_data, inode->i_sb, false,
684 cifs_create_dfs_fattr(&fattr, inode->i_sb);
704 fattr.cf_uniqueid = CIFS_I(inode)->uniqueid;
705 fattr.cf_flags |= CIFS_FATTR_NEED_REVAL;
706 cifs_fattr_to_inode(inode, &fattr);
738 struct cifs_fattr fattr; local
775 cifs_all_info_to_fattr(&fattr, data, sb, adjust_tz,
778 cifs_create_dfs_fattr(&fattr, sb);
801 cifs_dir_info_to_fattr(&fattr,
803 fattr.cf_uniqueid = le64_to_cpu(
828 &fattr.cf_uniqueid, data);
832 fattr.cf_uniqueid = iunique(sb, ROOT_I);
834 } else if ((fattr.cf_uniqueid == 0) &&
838 fattr.cf_flags |=
840 fattr.cf_uniqueid =
845 fattr.cf_uniqueid = iunique(sb, ROOT_I);
855 &fattr.cf_uniqueid, data);
857 fattr.cf_uniqueid = CIFS_I(*inode)->uniqueid;
858 else if ((fattr.cf_uniqueid == 0) &&
866 fattr.cf_uniqueid = CIFS_I(*inode)->uniqueid;
869 fattr.cf_uniqueid = CIFS_I(*inode)->uniqueid;
873 if (fattr.cf_cifsattrs & ATTR_SYSTEM &&
875 tmprc = cifs_sfu_type(&fattr, full_path, cifs_sb, xid);
883 rc = cifs_acl_to_fattr(cifs_sb, &fattr, *inode, full_path, fid);
894 cifs_sfu_mode(&fattr, full_path, cifs_sb, xid);
898 tmprc = check_mf_symlink(xid, tcon, cifs_sb, &fattr,
905 *inode = cifs_iget(sb, &fattr);
913 CIFS_I(*inode)->uniqueid != fattr.cf_uniqueid)) {
920 (fattr.cf_mode & S_IFMT))) {
925 cifs_fattr_to_inode(*inode, &fattr);
944 struct cifs_fattr *fattr = (struct cifs_fattr *) opaque; local
947 if (CIFS_I(inode)->uniqueid != fattr->cf_uniqueid)
951 if (CIFS_I(inode)->createtime != fattr->cf_createtime)
955 if ((inode->i_mode & S_IFMT) != (fattr->cf_mode & S_IFMT))
960 fattr->cf_flags |= CIFS_FATTR_INO_COLLISION;
968 struct cifs_fattr *fattr = (struct cifs_fattr *) opaque; local
970 CIFS_I(inode)->uniqueid = fattr->cf_uniqueid;
971 CIFS_I(inode)->createtime = fattr->cf_createtime;
998 cifs_iget(struct super_block *sb, struct cifs_fattr *fattr) argument
1004 cifs_dbg(FYI, "looking for uniqueid=%llu\n", fattr->cf_uniqueid);
1007 hash = cifs_uniqueid_to_ino_t(fattr->cf_uniqueid);
1009 inode = iget5_locked(sb, hash, cifs_find_inode, cifs_init_inode, fattr);
1012 if (fattr->cf_flags & CIFS_FATTR_INO_COLLISION) {
1013 fattr->cf_flags &= ~CIFS_FATTR_INO_COLLISION;
1018 fattr->cf_uniqueid = iunique(sb, ROOT_I);
1023 cifs_fattr_to_inode(inode, fattr);
1499 struct cifs_fattr fattr; local
1527 cifs_unix_basic_to_fattr(&fattr, info, cifs_sb);
1528 cifs_fill_uniqueid(inode->i_sb, &fattr);
1529 newinode = cifs_iget(inode->i_sb, &fattr);