Lines Matching refs:fattr

85 cifs_revalidate_cache(struct inode *inode, struct cifs_fattr *fattr)  argument
107 fattr->cf_mtime = timestamp_truncate(fattr->cf_mtime, inode);
108 if (timespec64_equal(&inode->i_mtime, &fattr->cf_mtime) &&
109 cifs_i->server_eof == fattr->cf_eof) {
128 cifs_nlink_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr) argument
135 if (fattr->cf_flags & CIFS_FATTR_UNKNOWN_NLINK) {
138 if (fattr->cf_cifsattrs & ATTR_DIRECTORY)
147 set_nlink(inode, fattr->cf_nlink);
152 cifs_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr) argument
158 unlikely(inode_wrong_type(inode, fattr->cf_mode))) {
163 cifs_revalidate_cache(inode, fattr);
166 fattr->cf_mtime = timestamp_truncate(fattr->cf_mtime, inode);
167 fattr->cf_atime = timestamp_truncate(fattr->cf_atime, inode);
168 fattr->cf_ctime = timestamp_truncate(fattr->cf_ctime, inode);
170 if (timespec64_compare(&fattr->cf_atime, &fattr->cf_mtime) < 0)
171 inode->i_atime = fattr->cf_mtime;
173 inode->i_atime = fattr->cf_atime;
174 inode->i_mtime = fattr->cf_mtime;
175 inode->i_ctime = fattr->cf_ctime;
176 inode->i_rdev = fattr->cf_rdev;
177 cifs_nlink_fattr_to_inode(inode, fattr);
178 inode->i_uid = fattr->cf_uid;
179 inode->i_gid = fattr->cf_gid;
184 inode->i_mode = fattr->cf_mode;
186 cifs_i->cifsAttrs = fattr->cf_cifsattrs;
188 if (fattr->cf_flags & CIFS_FATTR_NEED_REVAL)
193 if (fattr->cf_flags & CIFS_FATTR_DELETE_PENDING)
198 cifs_i->server_eof = fattr->cf_eof;
203 if (is_size_safe_to_change(cifs_i, fattr->cf_eof)) {
204 i_size_write(inode, fattr->cf_eof);
211 inode->i_blocks = (512 - 1 + fattr->cf_bytes) >> 9;
214 if (S_ISLNK(fattr->cf_mode)) {
216 cifs_i->symlink_target = fattr->cf_symlink_target;
217 fattr->cf_symlink_target = NULL;
221 if (fattr->cf_flags & CIFS_FATTR_DFS_REFERRAL)
229 cifs_fill_uniqueid(struct super_block *sb, struct cifs_fattr *fattr) argument
236 fattr->cf_uniqueid = iunique(sb, ROOT_I);
241 cifs_unix_basic_to_fattr(struct cifs_fattr *fattr, FILE_UNIX_BASIC_INFO *info, argument
244 memset(fattr, 0, sizeof(*fattr));
245 fattr->cf_uniqueid = le64_to_cpu(info->UniqueId);
246 fattr->cf_bytes = le64_to_cpu(info->NumOfBytes);
247 fattr->cf_eof = le64_to_cpu(info->EndOfFile);
249 fattr->cf_atime = cifs_NTtimeToUnix(info->LastAccessTime);
250 fattr->cf_mtime = cifs_NTtimeToUnix(info->LastModificationTime);
251 fattr->cf_ctime = cifs_NTtimeToUnix(info->LastStatusChange);
254 fattr->cf_mode = le64_to_cpu(info->Permissions);
260 fattr->cf_mode &= ~S_IFMT;
263 fattr->cf_mode |= S_IFREG;
264 fattr->cf_dtype = DT_REG;
267 fattr->cf_mode |= S_IFLNK;
268 fattr->cf_dtype = DT_LNK;
271 fattr->cf_mode |= S_IFDIR;
272 fattr->cf_dtype = DT_DIR;
275 fattr->cf_mode |= S_IFCHR;
276 fattr->cf_dtype = DT_CHR;
277 fattr->cf_rdev = MKDEV(le64_to_cpu(info->DevMajor),
281 fattr->cf_mode |= S_IFBLK;
282 fattr->cf_dtype = DT_BLK;
283 fattr->cf_rdev = MKDEV(le64_to_cpu(info->DevMajor),
287 fattr->cf_mode |= S_IFIFO;
288 fattr->cf_dtype = DT_FIFO;
291 fattr->cf_mode |= S_IFSOCK;
292 fattr->cf_dtype = DT_SOCK;
296 fattr->cf_mode |= S_IFREG;
297 fattr->cf_dtype = DT_REG;
302 fattr->cf_uid = cifs_sb->ctx->linux_uid;
308 fattr->cf_uid = uid;
312 fattr->cf_gid = cifs_sb->ctx->linux_gid;
318 fattr->cf_gid = gid;
322 fattr->cf_nlink = le64_to_cpu(info->Nlinks);
333 cifs_create_dfs_fattr(struct cifs_fattr *fattr, struct super_block *sb) argument
339 memset(fattr, 0, sizeof(*fattr));
340 fattr->cf_mode = S_IFDIR | S_IXUGO | S_IRWXU;
341 fattr->cf_uid = cifs_sb->ctx->linux_uid;
342 fattr->cf_gid = cifs_sb->ctx->linux_gid;
343 ktime_get_coarse_real_ts64(&fattr->cf_mtime);
344 fattr->cf_atime = fattr->cf_ctime = fattr->cf_mtime;
345 fattr->cf_nlink = 2;
346 fattr->cf_flags = CIFS_FATTR_DFS_REFERRAL;
356 struct cifs_fattr fattr = {}; local
365 fattr.cf_symlink_target = kstrdup(cfile->symlink_target, GFP_KERNEL);
366 if (!fattr.cf_symlink_target) {
374 cifs_unix_basic_to_fattr(&fattr, &find_data, cifs_sb);
376 cifs_create_dfs_fattr(&fattr, inode->i_sb);
381 rc = cifs_fattr_to_inode(inode, &fattr);
394 struct cifs_fattr fattr; local
415 cifs_unix_basic_to_fattr(&fattr, &find_data, cifs_sb);
417 cifs_create_dfs_fattr(&fattr, sb);
425 int tmprc = check_mf_symlink(xid, tcon, cifs_sb, &fattr,
431 if (S_ISLNK(fattr.cf_mode) && !fattr.cf_symlink_target) {
435 &fattr.cf_symlink_target, false);
444 cifs_fill_uniqueid(sb, &fattr);
445 *pinode = cifs_iget(sb, &fattr);
453 CIFS_I(*pinode)->uniqueid != fattr.cf_uniqueid)) {
460 rc = cifs_fattr_to_inode(*pinode, &fattr);
464 kfree(fattr.cf_symlink_target);
477 cifs_sfu_type(struct cifs_fattr *fattr, const char *path, argument
494 fattr->cf_mode &= ~S_IFMT;
496 if (fattr->cf_eof == 0) {
497 fattr->cf_mode |= S_IFIFO;
498 fattr->cf_dtype = DT_FIFO;
500 } else if (fattr->cf_eof < 8) {
501 fattr->cf_mode |= S_IFREG;
502 fattr->cf_dtype = DT_REG;
543 fattr->cf_mode |= S_IFBLK;
544 fattr->cf_dtype = DT_BLK;
551 fattr->cf_rdev = MKDEV(mjr, mnr);
555 fattr->cf_mode |= S_IFCHR;
556 fattr->cf_dtype = DT_CHR;
563 fattr->cf_rdev = MKDEV(mjr, mnr);
567 fattr->cf_mode |= S_IFLNK;
568 fattr->cf_dtype = DT_LNK;
570 fattr->cf_mode |= S_IFREG; /* file? */
571 fattr->cf_dtype = DT_REG;
575 fattr->cf_mode |= S_IFREG; /* then it is a file */
576 fattr->cf_dtype = DT_REG;
592 static int cifs_sfu_mode(struct cifs_fattr *fattr, const unsigned char *path, argument
620 fattr->cf_mode &= ~SFBITS_MASK;
622 mode, fattr->cf_mode);
623 fattr->cf_mode = (mode & SFBITS_MASK) | fattr->cf_mode;
634 static void smb311_posix_info_to_fattr(struct cifs_fattr *fattr, struct cifs_open_info_data *data, argument
641 memset(fattr, 0, sizeof(*fattr));
644 fattr->cf_cifsattrs = le32_to_cpu(info->DosAttributes);
645 fattr->cf_uniqueid = le64_to_cpu(info->Inode);
648 fattr->cf_atime = cifs_NTtimeToUnix(info->LastAccessTime);
650 ktime_get_coarse_real_ts64(&fattr->cf_atime);
652 fattr->cf_ctime = cifs_NTtimeToUnix(info->ChangeTime);
653 fattr->cf_mtime = cifs_NTtimeToUnix(info->LastWriteTime);
656 fattr->cf_ctime.tv_sec += tcon->ses->server->timeAdj;
657 fattr->cf_mtime.tv_sec += tcon->ses->server->timeAdj;
660 fattr->cf_eof = le64_to_cpu(info->EndOfFile);
661 fattr->cf_bytes = le64_to_cpu(info->AllocationSize);
662 fattr->cf_createtime = le64_to_cpu(info->CreationTime);
664 fattr->cf_nlink = le32_to_cpu(info->HardLinks);
665 fattr->cf_mode = (umode_t) le32_to_cpu(info->Mode);
670 fattr->cf_mode |= S_IFLNK;
671 fattr->cf_dtype = DT_LNK;
672 fattr->cf_symlink_target = data->symlink_target;
674 } else if (fattr->cf_cifsattrs & ATTR_DIRECTORY) {
675 fattr->cf_mode |= S_IFDIR;
676 fattr->cf_dtype = DT_DIR;
678 fattr->cf_mode |= S_IFREG;
679 fattr->cf_dtype = DT_REG;
683 fattr->cf_uid = cifs_sb->ctx->linux_uid; /* TODO: map uid and gid from SID */
684 fattr->cf_gid = cifs_sb->ctx->linux_gid;
687 fattr->cf_mode, fattr->cf_uniqueid, fattr->cf_nlink);
690 static void cifs_open_info_to_fattr(struct cifs_fattr *fattr, struct cifs_open_info_data *data, argument
698 memset(fattr, 0, sizeof(*fattr));
699 fattr->cf_cifsattrs = le32_to_cpu(info->Attributes);
701 fattr->cf_flags |= CIFS_FATTR_DELETE_PENDING;
704 fattr->cf_atime = cifs_NTtimeToUnix(info->LastAccessTime);
706 ktime_get_coarse_real_ts64(&fattr->cf_atime);
708 fattr->cf_ctime = cifs_NTtimeToUnix(info->ChangeTime);
709 fattr->cf_mtime = cifs_NTtimeToUnix(info->LastWriteTime);
712 fattr->cf_ctime.tv_sec += tcon->ses->server->timeAdj;
713 fattr->cf_mtime.tv_sec += tcon->ses->server->timeAdj;
716 fattr->cf_eof = le64_to_cpu(info->EndOfFile);
717 fattr->cf_bytes = le64_to_cpu(info->AllocationSize);
718 fattr->cf_createtime = le64_to_cpu(info->CreationTime);
720 fattr->cf_nlink = le32_to_cpu(info->NumberOfLinks);
722 fattr->cf_mode |= S_IFLNK | cifs_sb->ctx->file_mode;
723 fattr->cf_dtype = DT_LNK;
725 fattr->cf_mode |= S_IFIFO | cifs_sb->ctx->file_mode;
726 fattr->cf_dtype = DT_FIFO;
728 fattr->cf_mode |= S_IFSOCK | cifs_sb->ctx->file_mode;
729 fattr->cf_dtype = DT_SOCK;
731 fattr->cf_mode |= S_IFCHR | cifs_sb->ctx->file_mode;
732 fattr->cf_dtype = DT_CHR;
734 fattr->cf_mode |= S_IFBLK | cifs_sb->ctx->file_mode;
735 fattr->cf_dtype = DT_BLK;
738 fattr->cf_mode = S_IFLNK;
739 fattr->cf_dtype = DT_LNK;
740 } else if (fattr->cf_cifsattrs & ATTR_DIRECTORY) {
741 fattr->cf_mode = S_IFDIR | cifs_sb->ctx->dir_mode;
742 fattr->cf_dtype = DT_DIR;
748 fattr->cf_flags |= CIFS_FATTR_UNKNOWN_NLINK;
750 fattr->cf_mode = S_IFREG | cifs_sb->ctx->file_mode;
751 fattr->cf_dtype = DT_REG;
754 if (fattr->cf_cifsattrs & ATTR_READONLY)
755 fattr->cf_mode &= ~(S_IWUGO);
761 if ((fattr->cf_nlink < 1) && !tcon->unix_ext &&
764 fattr->cf_nlink);
765 fattr->cf_flags |= CIFS_FATTR_UNKNOWN_NLINK;
769 if (S_ISLNK(fattr->cf_mode)) {
770 fattr->cf_symlink_target = data->symlink_target;
774 fattr->cf_uid = cifs_sb->ctx->linux_uid;
775 fattr->cf_gid = cifs_sb->ctx->linux_gid;
784 struct cifs_fattr fattr; local
804 cifs_open_info_to_fattr(&fattr, &data, inode->i_sb, false, symlink, tag);
807 cifs_create_dfs_fattr(&fattr, inode->i_sb);
828 fattr.cf_uniqueid = CIFS_I(inode)->uniqueid;
829 fattr.cf_flags |= CIFS_FATTR_NEED_REVAL;
831 rc = cifs_fattr_to_inode(inode, &fattr);
907 struct cifs_open_info_data *data, struct cifs_fattr *fattr) argument
915 fattr->cf_uniqueid = CIFS_I(*inode)->uniqueid;
917 fattr->cf_uniqueid = iunique(sb, ROOT_I);
926 &fattr->cf_uniqueid, data);
933 fattr->cf_uniqueid = CIFS_I(*inode)->uniqueid;
935 fattr->cf_uniqueid = iunique(sb, ROOT_I);
942 if (fattr->cf_uniqueid == 0 && strlen(full_path) == 0) {
946 fattr->cf_uniqueid = CIFS_I(*inode)->uniqueid;
949 fattr->cf_flags |= CIFS_FATTR_FAKE_ROOT_INO;
950 fattr->cf_uniqueid = simple_hashstr(tcon->tree_name);
969 struct cifs_fattr fattr = {0}; local
1031 cifs_open_info_to_fattr(&fattr, data, sb, adjust_tz, is_reparse_point, reparse_tag);
1035 cifs_create_dfs_fattr(&fattr, sb);
1065 cifs_dir_info_to_fattr(&fattr, fdi, cifs_sb);
1066 fattr.cf_uniqueid = le64_to_cpu(si->UniqueId);
1086 cifs_set_fattr_ino(xid, tcon, sb, inode, full_path, data, &fattr);
1095 if (fattr.cf_cifsattrs & ATTR_SYSTEM &&
1097 tmprc = cifs_sfu_type(&fattr, full_path, cifs_sb, xid);
1104 rc = cifs_acl_to_fattr(cifs_sb, &fattr, *inode, true,
1114 rc = cifs_acl_to_fattr(cifs_sb, &fattr, *inode, false,
1127 cifs_sfu_mode(&fattr, full_path, cifs_sb, xid);
1131 tmprc = check_mf_symlink(xid, tcon, cifs_sb, &fattr,
1142 *inode = cifs_iget(sb, &fattr);
1150 CIFS_I(*inode)->uniqueid != fattr.cf_uniqueid)) {
1156 rc = cifs_fattr_to_inode(*inode, &fattr);
1162 kfree(fattr.cf_symlink_target);
1175 struct cifs_fattr fattr = {0}; local
1204 smb311_posix_info_to_fattr(&fattr, &data, sb, adjust_tz, symlink);
1208 cifs_create_dfs_fattr(&fattr, sb);
1231 tmprc = check_mf_symlink(xid, tcon, cifs_sb, &fattr,
1242 *inode = cifs_iget(sb, &fattr);
1250 CIFS_I(*inode)->uniqueid != fattr.cf_uniqueid)) {
1257 rc = cifs_fattr_to_inode(*inode, &fattr);
1262 kfree(fattr.cf_symlink_target);
1274 struct cifs_fattr *fattr = opaque; local
1277 if (CIFS_I(inode)->uniqueid != fattr->cf_uniqueid)
1281 if (CIFS_I(inode)->createtime != fattr->cf_createtime)
1285 if (inode_wrong_type(inode, fattr->cf_mode))
1290 fattr->cf_flags |= CIFS_FATTR_INO_COLLISION;
1298 struct cifs_fattr *fattr = opaque; local
1300 CIFS_I(inode)->uniqueid = fattr->cf_uniqueid;
1301 CIFS_I(inode)->createtime = fattr->cf_createtime;
1328 cifs_iget(struct super_block *sb, struct cifs_fattr *fattr) argument
1334 cifs_dbg(FYI, "looking for uniqueid=%llu\n", fattr->cf_uniqueid);
1337 hash = cifs_uniqueid_to_ino_t(fattr->cf_uniqueid);
1339 inode = iget5_locked(sb, hash, cifs_find_inode, cifs_init_inode, fattr);
1342 if (fattr->cf_flags & CIFS_FATTR_INO_COLLISION) {
1343 fattr->cf_flags &= ~CIFS_FATTR_INO_COLLISION;
1348 fattr->cf_uniqueid = iunique(sb, ROOT_I);
1354 cifs_fattr_to_inode(inode, fattr);
1859 struct cifs_fattr fattr; local
1887 cifs_unix_basic_to_fattr(&fattr, info, cifs_sb);
1888 cifs_fill_uniqueid(inode->i_sb, &fattr);
1889 newinode = cifs_iget(inode->i_sb, &fattr);