Lines Matching refs:fattr
84 cifs_revalidate_cache(struct inode *inode, struct cifs_fattr *fattr) argument
105 fattr->cf_mtime = timestamp_truncate(fattr->cf_mtime, inode);
106 if (timespec64_equal(&inode->i_mtime, &fattr->cf_mtime) &&
107 cifs_i->server_eof == fattr->cf_eof) {
123 cifs_nlink_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr) argument
130 if (fattr->cf_flags & CIFS_FATTR_UNKNOWN_NLINK) {
133 if (fattr->cf_cifsattrs & ATTR_DIRECTORY)
142 set_nlink(inode, fattr->cf_nlink);
147 cifs_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr) argument
153 unlikely(inode_wrong_type(inode, fattr->cf_mode))) {
158 cifs_revalidate_cache(inode, fattr);
161 fattr->cf_mtime = timestamp_truncate(fattr->cf_mtime, inode);
162 fattr->cf_atime = timestamp_truncate(fattr->cf_atime, inode);
163 fattr->cf_ctime = timestamp_truncate(fattr->cf_ctime, inode);
165 if (timespec64_compare(&fattr->cf_atime, &fattr->cf_mtime) < 0)
166 inode->i_atime = fattr->cf_mtime;
168 inode->i_atime = fattr->cf_atime;
169 inode->i_mtime = fattr->cf_mtime;
170 inode->i_ctime = fattr->cf_ctime;
171 inode->i_rdev = fattr->cf_rdev;
172 cifs_nlink_fattr_to_inode(inode, fattr);
173 inode->i_uid = fattr->cf_uid;
174 inode->i_gid = fattr->cf_gid;
179 inode->i_mode = fattr->cf_mode;
181 cifs_i->cifsAttrs = fattr->cf_cifsattrs;
183 if (fattr->cf_flags & CIFS_FATTR_NEED_REVAL)
188 if (fattr->cf_flags & CIFS_FATTR_DELETE_PENDING)
193 cifs_i->server_eof = fattr->cf_eof;
198 if (is_size_safe_to_change(cifs_i, fattr->cf_eof)) {
199 i_size_write(inode, fattr->cf_eof);
206 inode->i_blocks = (512 - 1 + fattr->cf_bytes) >> 9;
210 if (fattr->cf_flags & CIFS_FATTR_DFS_REFERRAL)
218 cifs_fill_uniqueid(struct super_block *sb, struct cifs_fattr *fattr) argument
225 fattr->cf_uniqueid = iunique(sb, ROOT_I);
230 cifs_unix_basic_to_fattr(struct cifs_fattr *fattr, FILE_UNIX_BASIC_INFO *info, argument
233 memset(fattr, 0, sizeof(*fattr));
234 fattr->cf_uniqueid = le64_to_cpu(info->UniqueId);
235 fattr->cf_bytes = le64_to_cpu(info->NumOfBytes);
236 fattr->cf_eof = le64_to_cpu(info->EndOfFile);
238 fattr->cf_atime = cifs_NTtimeToUnix(info->LastAccessTime);
239 fattr->cf_mtime = cifs_NTtimeToUnix(info->LastModificationTime);
240 fattr->cf_ctime = cifs_NTtimeToUnix(info->LastStatusChange);
243 fattr->cf_mode = le64_to_cpu(info->Permissions);
249 fattr->cf_mode &= ~S_IFMT;
252 fattr->cf_mode |= S_IFREG;
253 fattr->cf_dtype = DT_REG;
256 fattr->cf_mode |= S_IFLNK;
257 fattr->cf_dtype = DT_LNK;
260 fattr->cf_mode |= S_IFDIR;
261 fattr->cf_dtype = DT_DIR;
264 fattr->cf_mode |= S_IFCHR;
265 fattr->cf_dtype = DT_CHR;
266 fattr->cf_rdev = MKDEV(le64_to_cpu(info->DevMajor),
270 fattr->cf_mode |= S_IFBLK;
271 fattr->cf_dtype = DT_BLK;
272 fattr->cf_rdev = MKDEV(le64_to_cpu(info->DevMajor),
276 fattr->cf_mode |= S_IFIFO;
277 fattr->cf_dtype = DT_FIFO;
280 fattr->cf_mode |= S_IFSOCK;
281 fattr->cf_dtype = DT_SOCK;
285 fattr->cf_mode |= S_IFREG;
286 fattr->cf_dtype = DT_REG;
291 fattr->cf_uid = cifs_sb->ctx->linux_uid;
297 fattr->cf_uid = uid;
301 fattr->cf_gid = cifs_sb->ctx->linux_gid;
307 fattr->cf_gid = gid;
311 fattr->cf_nlink = le64_to_cpu(info->Nlinks);
322 cifs_create_dfs_fattr(struct cifs_fattr *fattr, struct super_block *sb) argument
328 memset(fattr, 0, sizeof(*fattr));
329 fattr->cf_mode = S_IFDIR | S_IXUGO | S_IRWXU;
330 fattr->cf_uid = cifs_sb->ctx->linux_uid;
331 fattr->cf_gid = cifs_sb->ctx->linux_gid;
332 ktime_get_coarse_real_ts64(&fattr->cf_mtime);
333 fattr->cf_atime = fattr->cf_ctime = fattr->cf_mtime;
334 fattr->cf_nlink = 2;
335 fattr->cf_flags = CIFS_FATTR_DFS_REFERRAL;
344 struct cifs_fattr fattr; local
353 cifs_unix_basic_to_fattr(&fattr, &find_data, cifs_sb);
355 cifs_create_dfs_fattr(&fattr, inode->i_sb);
360 rc = cifs_fattr_to_inode(inode, &fattr);
373 struct cifs_fattr fattr; local
391 cifs_unix_basic_to_fattr(&fattr, &find_data, cifs_sb);
393 cifs_create_dfs_fattr(&fattr, sb);
401 int tmprc = check_mf_symlink(xid, tcon, cifs_sb, &fattr,
409 cifs_fill_uniqueid(sb, &fattr);
410 *pinode = cifs_iget(sb, &fattr);
418 CIFS_I(*pinode)->uniqueid != fattr.cf_uniqueid)) {
425 rc = cifs_fattr_to_inode(*pinode, &fattr);
433 cifs_sfu_type(struct cifs_fattr *fattr, const char *path, argument
450 fattr->cf_mode &= ~S_IFMT;
452 if (fattr->cf_eof == 0) {
453 fattr->cf_mode |= S_IFIFO;
454 fattr->cf_dtype = DT_FIFO;
456 } else if (fattr->cf_eof < 8) {
457 fattr->cf_mode |= S_IFREG;
458 fattr->cf_dtype = DT_REG;
499 fattr->cf_mode |= S_IFBLK;
500 fattr->cf_dtype = DT_BLK;
507 fattr->cf_rdev = MKDEV(mjr, mnr);
511 fattr->cf_mode |= S_IFCHR;
512 fattr->cf_dtype = DT_CHR;
519 fattr->cf_rdev = MKDEV(mjr, mnr);
523 fattr->cf_mode |= S_IFLNK;
524 fattr->cf_dtype = DT_LNK;
526 fattr->cf_mode |= S_IFREG; /* file? */
527 fattr->cf_dtype = DT_REG;
531 fattr->cf_mode |= S_IFREG; /* then it is a file */
532 fattr->cf_dtype = DT_REG;
548 static int cifs_sfu_mode(struct cifs_fattr *fattr, const unsigned char *path, argument
576 fattr->cf_mode &= ~SFBITS_MASK;
578 mode, fattr->cf_mode);
579 fattr->cf_mode = (mode & SFBITS_MASK) | fattr->cf_mode;
591 smb311_posix_info_to_fattr(struct cifs_fattr *fattr, struct smb311_posix_qinfo *info, argument
597 memset(fattr, 0, sizeof(*fattr));
600 fattr->cf_cifsattrs = le32_to_cpu(info->DosAttributes);
601 fattr->cf_uniqueid = le64_to_cpu(info->Inode);
604 fattr->cf_atime = cifs_NTtimeToUnix(info->LastAccessTime);
606 ktime_get_coarse_real_ts64(&fattr->cf_atime);
608 fattr->cf_ctime = cifs_NTtimeToUnix(info->ChangeTime);
609 fattr->cf_mtime = cifs_NTtimeToUnix(info->LastWriteTime);
612 fattr->cf_ctime.tv_sec += tcon->ses->server->timeAdj;
613 fattr->cf_mtime.tv_sec += tcon->ses->server->timeAdj;
616 fattr->cf_eof = le64_to_cpu(info->EndOfFile);
617 fattr->cf_bytes = le64_to_cpu(info->AllocationSize);
618 fattr->cf_createtime = le64_to_cpu(info->CreationTime);
620 fattr->cf_nlink = le32_to_cpu(info->HardLinks);
621 fattr->cf_mode = (umode_t) le32_to_cpu(info->Mode);
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;
630 fattr->cf_dtype = DT_DIR;
632 fattr->cf_mode |= S_IFREG;
633 fattr->cf_dtype = DT_REG;
637 fattr->cf_uid = cifs_sb->ctx->linux_uid; /* TODO: map uid and gid from SID */
638 fattr->cf_gid = cifs_sb->ctx->linux_gid;
641 fattr->cf_mode, fattr->cf_uniqueid, fattr->cf_nlink);
647 cifs_all_info_to_fattr(struct cifs_fattr *fattr, FILE_ALL_INFO *info, argument
654 memset(fattr, 0, sizeof(*fattr));
655 fattr->cf_cifsattrs = le32_to_cpu(info->Attributes);
657 fattr->cf_flags |= CIFS_FATTR_DELETE_PENDING;
660 fattr->cf_atime = cifs_NTtimeToUnix(info->LastAccessTime);
662 ktime_get_coarse_real_ts64(&fattr->cf_atime);
664 fattr->cf_ctime = cifs_NTtimeToUnix(info->ChangeTime);
665 fattr->cf_mtime = cifs_NTtimeToUnix(info->LastWriteTime);
668 fattr->cf_ctime.tv_sec += tcon->ses->server->timeAdj;
669 fattr->cf_mtime.tv_sec += tcon->ses->server->timeAdj;
672 fattr->cf_eof = le64_to_cpu(info->EndOfFile);
673 fattr->cf_bytes = le64_to_cpu(info->AllocationSize);
674 fattr->cf_createtime = le64_to_cpu(info->CreationTime);
676 fattr->cf_nlink = le32_to_cpu(info->NumberOfLinks);
678 fattr->cf_mode |= S_IFLNK | cifs_sb->ctx->file_mode;
679 fattr->cf_dtype = DT_LNK;
681 fattr->cf_mode |= S_IFIFO | cifs_sb->ctx->file_mode;
682 fattr->cf_dtype = DT_FIFO;
684 fattr->cf_mode |= S_IFSOCK | cifs_sb->ctx->file_mode;
685 fattr->cf_dtype = DT_SOCK;
687 fattr->cf_mode |= S_IFCHR | cifs_sb->ctx->file_mode;
688 fattr->cf_dtype = DT_CHR;
690 fattr->cf_mode |= S_IFBLK | cifs_sb->ctx->file_mode;
691 fattr->cf_dtype = DT_BLK;
693 fattr->cf_mode = S_IFLNK;
694 fattr->cf_dtype = DT_LNK;
695 } else if (fattr->cf_cifsattrs & ATTR_DIRECTORY) {
696 fattr->cf_mode = S_IFDIR | cifs_sb->ctx->dir_mode;
697 fattr->cf_dtype = DT_DIR;
703 fattr->cf_flags |= CIFS_FATTR_UNKNOWN_NLINK;
705 fattr->cf_mode = S_IFREG | cifs_sb->ctx->file_mode;
706 fattr->cf_dtype = DT_REG;
709 if (fattr->cf_cifsattrs & ATTR_READONLY)
710 fattr->cf_mode &= ~(S_IWUGO);
716 if ((fattr->cf_nlink < 1) && !tcon->unix_ext &&
719 fattr->cf_nlink);
720 fattr->cf_flags |= CIFS_FATTR_UNKNOWN_NLINK;
724 fattr->cf_uid = cifs_sb->ctx->linux_uid;
725 fattr->cf_gid = cifs_sb->ctx->linux_gid;
734 struct cifs_fattr fattr; local
748 cifs_all_info_to_fattr(&fattr, &find_data, inode->i_sb, false,
752 cifs_create_dfs_fattr(&fattr, inode->i_sb);
773 fattr.cf_uniqueid = CIFS_I(inode)->uniqueid;
774 fattr.cf_flags |= CIFS_FATTR_NEED_REVAL;
776 rc = cifs_fattr_to_inode(inode, &fattr);
854 struct cifs_fattr *fattr) argument
862 fattr->cf_uniqueid = CIFS_I(*inode)->uniqueid;
864 fattr->cf_uniqueid = iunique(sb, ROOT_I);
875 &fattr->cf_uniqueid,
883 fattr->cf_uniqueid = CIFS_I(*inode)->uniqueid;
885 fattr->cf_uniqueid = iunique(sb, ROOT_I);
892 if (fattr->cf_uniqueid == 0 && strlen(full_path) == 0) {
896 fattr->cf_uniqueid = CIFS_I(*inode)->uniqueid;
899 fattr->cf_flags |= CIFS_FATTR_FAKE_ROOT_INO;
900 fattr->cf_uniqueid = simple_hashstr(tcon->treeName);
923 struct cifs_fattr fattr = {0}; local
975 cifs_all_info_to_fattr(&fattr, data, sb, adjust_tz,
980 cifs_create_dfs_fattr(&fattr, sb);
1007 cifs_dir_info_to_fattr(&fattr, fdi, cifs_sb);
1008 fattr.cf_uniqueid = le64_to_cpu(si->UniqueId);
1025 cifs_set_fattr_ino(xid, tcon, sb, inode, full_path, data, &fattr);
1033 if (fattr.cf_cifsattrs & ATTR_SYSTEM &&
1035 tmprc = cifs_sfu_type(&fattr, full_path, cifs_sb, xid);
1042 rc = cifs_acl_to_fattr(cifs_sb, &fattr, *inode, true,
1052 rc = cifs_acl_to_fattr(cifs_sb, &fattr, *inode, false,
1065 cifs_sfu_mode(&fattr, full_path, cifs_sb, xid);
1069 tmprc = check_mf_symlink(xid, tcon, cifs_sb, &fattr,
1080 *inode = cifs_iget(sb, &fattr);
1088 CIFS_I(*inode)->uniqueid != fattr.cf_uniqueid)) {
1094 rc = cifs_fattr_to_inode(*inode, &fattr);
1112 struct cifs_fattr fattr = {0}; local
1147 smb311_posix_info_to_fattr(&fattr, data, sb, adjust_tz, symlink);
1151 cifs_create_dfs_fattr(&fattr, sb);
1174 tmprc = check_mf_symlink(xid, tcon, cifs_sb, &fattr,
1185 *inode = cifs_iget(sb, &fattr);
1193 CIFS_I(*inode)->uniqueid != fattr.cf_uniqueid)) {
1200 rc = cifs_fattr_to_inode(*inode, &fattr);
1216 struct cifs_fattr *fattr = (struct cifs_fattr *) opaque; local
1219 if (CIFS_I(inode)->uniqueid != fattr->cf_uniqueid)
1223 if (CIFS_I(inode)->createtime != fattr->cf_createtime)
1227 if (inode_wrong_type(inode, fattr->cf_mode))
1232 fattr->cf_flags |= CIFS_FATTR_INO_COLLISION;
1240 struct cifs_fattr *fattr = (struct cifs_fattr *) opaque; local
1242 CIFS_I(inode)->uniqueid = fattr->cf_uniqueid;
1243 CIFS_I(inode)->createtime = fattr->cf_createtime;
1270 cifs_iget(struct super_block *sb, struct cifs_fattr *fattr) argument
1276 cifs_dbg(FYI, "looking for uniqueid=%llu\n", fattr->cf_uniqueid);
1279 hash = cifs_uniqueid_to_ino_t(fattr->cf_uniqueid);
1281 inode = iget5_locked(sb, hash, cifs_find_inode, cifs_init_inode, fattr);
1284 if (fattr->cf_flags & CIFS_FATTR_INO_COLLISION) {
1285 fattr->cf_flags &= ~CIFS_FATTR_INO_COLLISION;
1290 fattr->cf_uniqueid = iunique(sb, ROOT_I);
1296 cifs_fattr_to_inode(inode, fattr);
1798 struct cifs_fattr fattr; local
1826 cifs_unix_basic_to_fattr(&fattr, info, cifs_sb);
1827 cifs_fill_uniqueid(inode->i_sb, &fattr);
1828 newinode = cifs_iget(inode->i_sb, &fattr);