Lines Matching refs:fattr
92 cifs_revalidate_cache(struct inode *inode, struct cifs_fattr *fattr) argument
113 if (timespec_equal(&inode->i_mtime, &fattr->cf_mtime) &&
114 cifs_i->server_eof == fattr->cf_eof) {
130 cifs_nlink_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr) argument
137 if (fattr->cf_flags & CIFS_FATTR_UNKNOWN_NLINK) {
140 if (fattr->cf_cifsattrs & ATTR_DIRECTORY)
149 set_nlink(inode, fattr->cf_nlink);
154 cifs_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr) argument
159 cifs_revalidate_cache(inode, fattr);
162 inode->i_atime = fattr->cf_atime;
163 inode->i_mtime = fattr->cf_mtime;
164 inode->i_ctime = fattr->cf_ctime;
165 inode->i_rdev = fattr->cf_rdev;
166 cifs_nlink_fattr_to_inode(inode, fattr);
167 inode->i_uid = fattr->cf_uid;
168 inode->i_gid = fattr->cf_gid;
173 inode->i_mode = fattr->cf_mode;
175 cifs_i->cifsAttrs = fattr->cf_cifsattrs;
177 if (fattr->cf_flags & CIFS_FATTR_NEED_REVAL)
182 if (fattr->cf_flags & CIFS_FATTR_DELETE_PENDING)
187 cifs_i->server_eof = fattr->cf_eof;
192 if (is_size_safe_to_change(cifs_i, fattr->cf_eof)) {
193 i_size_write(inode, fattr->cf_eof);
200 inode->i_blocks = (512 - 1 + fattr->cf_bytes) >> 9;
204 if (fattr->cf_flags & CIFS_FATTR_DFS_REFERRAL)
211 cifs_fill_uniqueid(struct super_block *sb, struct cifs_fattr *fattr) argument
218 fattr->cf_uniqueid = iunique(sb, ROOT_I);
223 cifs_unix_basic_to_fattr(struct cifs_fattr *fattr, FILE_UNIX_BASIC_INFO *info, argument
226 memset(fattr, 0, sizeof(*fattr));
227 fattr->cf_uniqueid = le64_to_cpu(info->UniqueId);
228 fattr->cf_bytes = le64_to_cpu(info->NumOfBytes);
229 fattr->cf_eof = le64_to_cpu(info->EndOfFile);
231 fattr->cf_atime = cifs_NTtimeToUnix(info->LastAccessTime);
232 fattr->cf_mtime = cifs_NTtimeToUnix(info->LastModificationTime);
233 fattr->cf_ctime = cifs_NTtimeToUnix(info->LastStatusChange);
234 fattr->cf_mode = le64_to_cpu(info->Permissions);
240 fattr->cf_mode &= ~S_IFMT;
243 fattr->cf_mode |= S_IFREG;
244 fattr->cf_dtype = DT_REG;
247 fattr->cf_mode |= S_IFLNK;
248 fattr->cf_dtype = DT_LNK;
251 fattr->cf_mode |= S_IFDIR;
252 fattr->cf_dtype = DT_DIR;
255 fattr->cf_mode |= S_IFCHR;
256 fattr->cf_dtype = DT_CHR;
257 fattr->cf_rdev = MKDEV(le64_to_cpu(info->DevMajor),
261 fattr->cf_mode |= S_IFBLK;
262 fattr->cf_dtype = DT_BLK;
263 fattr->cf_rdev = MKDEV(le64_to_cpu(info->DevMajor),
267 fattr->cf_mode |= S_IFIFO;
268 fattr->cf_dtype = DT_FIFO;
271 fattr->cf_mode |= S_IFSOCK;
272 fattr->cf_dtype = DT_SOCK;
276 fattr->cf_mode |= S_IFREG;
277 fattr->cf_dtype = DT_REG;
282 fattr->cf_uid = cifs_sb->mnt_uid;
288 fattr->cf_uid = uid;
292 fattr->cf_gid = cifs_sb->mnt_gid;
298 fattr->cf_gid = gid;
302 fattr->cf_nlink = le64_to_cpu(info->Nlinks);
313 cifs_create_dfs_fattr(struct cifs_fattr *fattr, struct super_block *sb) argument
319 memset(fattr, 0, sizeof(*fattr));
320 fattr->cf_mode = S_IFDIR | S_IXUGO | S_IRWXU;
321 fattr->cf_uid = cifs_sb->mnt_uid;
322 fattr->cf_gid = cifs_sb->mnt_gid;
323 fattr->cf_atime = CURRENT_TIME;
324 fattr->cf_ctime = CURRENT_TIME;
325 fattr->cf_mtime = CURRENT_TIME;
326 fattr->cf_nlink = 2;
327 fattr->cf_flags |= CIFS_FATTR_DFS_REFERRAL;
336 struct cifs_fattr fattr; local
345 cifs_unix_basic_to_fattr(&fattr, &find_data, cifs_sb);
347 cifs_create_dfs_fattr(&fattr, inode->i_sb);
351 cifs_fattr_to_inode(inode, &fattr);
362 struct cifs_fattr fattr; local
380 cifs_unix_basic_to_fattr(&fattr, &find_data, cifs_sb);
382 cifs_create_dfs_fattr(&fattr, sb);
390 int tmprc = check_mf_symlink(xid, tcon, cifs_sb, &fattr,
398 cifs_fill_uniqueid(sb, &fattr);
399 *pinode = cifs_iget(sb, &fattr);
407 CIFS_I(*pinode)->uniqueid != fattr.cf_uniqueid)) {
414 (fattr.cf_mode & S_IFMT))) {
419 cifs_fattr_to_inode(*pinode, &fattr);
427 cifs_sfu_type(struct cifs_fattr *fattr, const char *path, argument
444 fattr->cf_mode &= ~S_IFMT;
446 if (fattr->cf_eof == 0) {
447 fattr->cf_mode |= S_IFIFO;
448 fattr->cf_dtype = DT_FIFO;
450 } else if (fattr->cf_eof < 8) {
451 fattr->cf_mode |= S_IFREG;
452 fattr->cf_dtype = DT_REG;
493 fattr->cf_mode |= S_IFBLK;
494 fattr->cf_dtype = DT_BLK;
501 fattr->cf_rdev = MKDEV(mjr, mnr);
505 fattr->cf_mode |= S_IFCHR;
506 fattr->cf_dtype = DT_CHR;
513 fattr->cf_rdev = MKDEV(mjr, mnr);
517 fattr->cf_mode |= S_IFLNK;
518 fattr->cf_dtype = DT_LNK;
520 fattr->cf_mode |= S_IFREG; /* file? */
521 fattr->cf_dtype = DT_REG;
525 fattr->cf_mode |= S_IFREG; /* then it is a file */
526 fattr->cf_dtype = DT_REG;
542 static int cifs_sfu_mode(struct cifs_fattr *fattr, const unsigned char *path, argument
571 fattr->cf_mode &= ~SFBITS_MASK;
573 mode, fattr->cf_mode);
574 fattr->cf_mode = (mode & SFBITS_MASK) | fattr->cf_mode;
586 cifs_all_info_to_fattr(struct cifs_fattr *fattr, FILE_ALL_INFO *info, argument
592 memset(fattr, 0, sizeof(*fattr));
593 fattr->cf_cifsattrs = le32_to_cpu(info->Attributes);
595 fattr->cf_flags |= CIFS_FATTR_DELETE_PENDING;
598 fattr->cf_atime = cifs_NTtimeToUnix(info->LastAccessTime);
600 fattr->cf_atime = CURRENT_TIME;
602 fattr->cf_ctime = cifs_NTtimeToUnix(info->ChangeTime);
603 fattr->cf_mtime = cifs_NTtimeToUnix(info->LastWriteTime);
606 fattr->cf_ctime.tv_sec += tcon->ses->server->timeAdj;
607 fattr->cf_mtime.tv_sec += tcon->ses->server->timeAdj;
610 fattr->cf_eof = le64_to_cpu(info->EndOfFile);
611 fattr->cf_bytes = le64_to_cpu(info->AllocationSize);
612 fattr->cf_createtime = le64_to_cpu(info->CreationTime);
614 fattr->cf_nlink = le32_to_cpu(info->NumberOfLinks);
617 fattr->cf_mode = S_IFLNK;
618 fattr->cf_dtype = DT_LNK;
619 } else if (fattr->cf_cifsattrs & ATTR_DIRECTORY) {
620 fattr->cf_mode = S_IFDIR | cifs_sb->mnt_dir_mode;
621 fattr->cf_dtype = DT_DIR;
627 fattr->cf_flags |= CIFS_FATTR_UNKNOWN_NLINK;
629 fattr->cf_mode = S_IFREG | cifs_sb->mnt_file_mode;
630 fattr->cf_dtype = DT_REG;
633 if (fattr->cf_cifsattrs & ATTR_READONLY)
634 fattr->cf_mode &= ~(S_IWUGO);
640 if ((fattr->cf_nlink < 1) && !tcon->unix_ext &&
643 fattr->cf_nlink);
644 fattr->cf_flags |= CIFS_FATTR_UNKNOWN_NLINK;
648 fattr->cf_uid = cifs_sb->mnt_uid;
649 fattr->cf_gid = cifs_sb->mnt_gid;
658 struct cifs_fattr fattr; local
672 cifs_all_info_to_fattr(&fattr, &find_data, cifs_sb, false,
676 cifs_create_dfs_fattr(&fattr, inode->i_sb);
696 fattr.cf_uniqueid = CIFS_I(inode)->uniqueid;
697 fattr.cf_flags |= CIFS_FATTR_NEED_REVAL;
698 cifs_fattr_to_inode(inode, &fattr);
718 struct cifs_fattr fattr; local
754 cifs_all_info_to_fattr(&fattr, data, cifs_sb, adjust_tz,
757 cifs_create_dfs_fattr(&fattr, sb);
780 cifs_dir_info_to_fattr(&fattr,
782 fattr.cf_uniqueid = le64_to_cpu(
807 &fattr.cf_uniqueid, data);
811 fattr.cf_uniqueid = iunique(sb, ROOT_I);
816 fattr.cf_uniqueid = iunique(sb, ROOT_I);
818 fattr.cf_uniqueid = CIFS_I(*inode)->uniqueid;
821 if (fattr.cf_cifsattrs & ATTR_SYSTEM &&
823 tmprc = cifs_sfu_type(&fattr, full_path, cifs_sb, xid);
831 rc = cifs_acl_to_fattr(cifs_sb, &fattr, *inode, full_path, fid);
842 cifs_sfu_mode(&fattr, full_path, cifs_sb, xid);
846 tmprc = check_mf_symlink(xid, tcon, cifs_sb, &fattr,
853 *inode = cifs_iget(sb, &fattr);
861 (fattr.cf_mode & S_IFMT))) {
866 cifs_fattr_to_inode(*inode, &fattr);
882 struct cifs_fattr *fattr = (struct cifs_fattr *) opaque; local
885 if (CIFS_I(inode)->uniqueid != fattr->cf_uniqueid)
889 if (CIFS_I(inode)->createtime != fattr->cf_createtime)
893 if ((inode->i_mode & S_IFMT) != (fattr->cf_mode & S_IFMT))
898 fattr->cf_flags |= CIFS_FATTR_INO_COLLISION;
906 struct cifs_fattr *fattr = (struct cifs_fattr *) opaque; local
908 CIFS_I(inode)->uniqueid = fattr->cf_uniqueid;
909 CIFS_I(inode)->createtime = fattr->cf_createtime;
936 cifs_iget(struct super_block *sb, struct cifs_fattr *fattr) argument
942 cifs_dbg(FYI, "looking for uniqueid=%llu\n", fattr->cf_uniqueid);
945 hash = cifs_uniqueid_to_ino_t(fattr->cf_uniqueid);
947 inode = iget5_locked(sb, hash, cifs_find_inode, cifs_init_inode, fattr);
950 if (fattr->cf_flags & CIFS_FATTR_INO_COLLISION) {
951 fattr->cf_flags &= ~CIFS_FATTR_INO_COLLISION;
956 fattr->cf_uniqueid = iunique(sb, ROOT_I);
961 cifs_fattr_to_inode(inode, fattr);
1420 struct cifs_fattr fattr; local
1448 cifs_unix_basic_to_fattr(&fattr, info, cifs_sb);
1449 cifs_fill_uniqueid(inode->i_sb, &fattr);
1450 newinode = cifs_iget(inode->i_sb, &fattr);