Lines Matching refs:stat
3 * linux/fs/stat.c
34 * @stat: Where to fill in the attributes
47 struct inode *inode, struct kstat *stat)
52 stat->dev = inode->i_sb->s_dev;
53 stat->ino = inode->i_ino;
54 stat->mode = inode->i_mode;
55 stat->nlink = inode->i_nlink;
56 stat->uid = vfsuid_into_kuid(vfsuid);
57 stat->gid = vfsgid_into_kgid(vfsgid);
58 stat->rdev = inode->i_rdev;
59 stat->size = i_size_read(inode);
60 stat->atime = inode->i_atime;
61 stat->mtime = inode->i_mtime;
62 stat->ctime = inode_get_ctime(inode);
63 stat->blksize = i_blocksize(inode);
64 stat->blocks = inode->i_blocks;
67 stat->result_mask |= STATX_CHANGE_COOKIE;
68 stat->change_cookie = inode_query_iversion(inode);
77 * @stat: Where to fill in the attribute flags
82 void generic_fill_statx_attr(struct inode *inode, struct kstat *stat)
85 stat->attributes |= STATX_ATTR_IMMUTABLE;
87 stat->attributes |= STATX_ATTR_APPEND;
88 stat->attributes_mask |= KSTAT_ATTR_VFS_FLAGS;
95 * @stat: structure to return attributes in
105 int vfs_getattr_nosec(const struct path *path, struct kstat *stat,
111 memset(stat, 0, sizeof(*stat));
112 stat->result_mask |= STATX_BASIC_STATS;
118 stat->result_mask &= ~STATX_ATIME;
125 stat->attributes |= STATX_ATTR_AUTOMOUNT;
128 stat->attributes |= STATX_ATTR_DAX;
130 stat->attributes_mask |= (STATX_ATTR_AUTOMOUNT |
135 return inode->i_op->getattr(idmap, path, stat,
139 generic_fillattr(idmap, request_mask, inode, stat);
147 * @stat: Where to return the statistics
165 int vfs_getattr(const struct path *path, struct kstat *stat,
176 return vfs_getattr_nosec(path, stat, request_mask, query_flags);
183 * @stat: The result structure to fill in.
190 int vfs_fstat(int fd, struct kstat *stat)
198 error = vfs_getattr(&f.file->f_path, stat, STATX_BASIC_STATS, 0);
222 * @stat: The result structure to fill in.
233 struct kstat *stat, u32 request_mask)
248 error = vfs_getattr(&path, stat, request_mask, flags);
250 stat->mnt_id = real_mount(path.mnt)->mnt_id;
251 stat->result_mask |= STATX_MNT_ID;
254 stat->attributes |= STATX_ATTR_MOUNT_ROOT;
255 stat->attributes_mask |= STATX_ATTR_MOUNT_ROOT;
262 bdev_statx_dioalign(inode, stat);
275 struct kstat *stat, int flags)
295 return vfs_fstat(dfd, stat);
299 ret = vfs_statx(dfd, name, statx_flags, stat, STATX_BASIC_STATS);
311 static int cp_old_stat(struct kstat *stat, struct __old_kernel_stat __user * statbuf)
318 printk(KERN_WARNING "VFS: Warning: %s using old stat() call. Recompile your binary.\n",
326 tmp.st_dev = old_encode_dev(stat->dev);
327 tmp.st_ino = stat->ino;
328 if (sizeof(tmp.st_ino) < sizeof(stat->ino) && tmp.st_ino != stat->ino)
330 tmp.st_mode = stat->mode;
331 tmp.st_nlink = stat->nlink;
332 if (tmp.st_nlink != stat->nlink)
334 SET_UID(tmp.st_uid, from_kuid_munged(current_user_ns(), stat->uid));
335 SET_GID(tmp.st_gid, from_kgid_munged(current_user_ns(), stat->gid));
336 tmp.st_rdev = old_encode_dev(stat->rdev);
338 if (stat->size > MAX_NON_LFS)
341 tmp.st_size = stat->size;
342 tmp.st_atime = stat->atime.tv_sec;
343 tmp.st_mtime = stat->mtime.tv_sec;
344 tmp.st_ctime = stat->ctime.tv_sec;
348 SYSCALL_DEFINE2(stat, const char __user *, filename,
351 struct kstat stat;
354 error = vfs_stat(filename, &stat);
358 return cp_old_stat(&stat, statbuf);
364 struct kstat stat;
367 error = vfs_lstat(filename, &stat);
371 return cp_old_stat(&stat, statbuf);
376 struct kstat stat;
377 int error = vfs_fstat(fd, &stat);
380 error = cp_old_stat(&stat, statbuf);
393 static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf)
395 struct stat tmp;
397 if (sizeof(tmp.st_dev) < 4 && !old_valid_dev(stat->dev))
399 if (sizeof(tmp.st_rdev) < 4 && !old_valid_dev(stat->rdev))
402 if (stat->size > MAX_NON_LFS)
407 tmp.st_dev = new_encode_dev(stat->dev);
408 tmp.st_ino = stat->ino;
409 if (sizeof(tmp.st_ino) < sizeof(stat->ino) && tmp.st_ino != stat->ino)
411 tmp.st_mode = stat->mode;
412 tmp.st_nlink = stat->nlink;
413 if (tmp.st_nlink != stat->nlink)
415 SET_UID(tmp.st_uid, from_kuid_munged(current_user_ns(), stat->uid));
416 SET_GID(tmp.st_gid, from_kgid_munged(current_user_ns(), stat->gid));
417 tmp.st_rdev = new_encode_dev(stat->rdev);
418 tmp.st_size = stat->size;
419 tmp.st_atime = stat->atime.tv_sec;
420 tmp.st_mtime = stat->mtime.tv_sec;
421 tmp.st_ctime = stat->ctime.tv_sec;
423 tmp.st_atime_nsec = stat->atime.tv_nsec;
424 tmp.st_mtime_nsec = stat->mtime.tv_nsec;
425 tmp.st_ctime_nsec = stat->ctime.tv_nsec;
427 tmp.st_blocks = stat->blocks;
428 tmp.st_blksize = stat->blksize;
433 struct stat __user *, statbuf)
435 struct kstat stat;
436 int error = vfs_stat(filename, &stat);
440 return cp_new_stat(&stat, statbuf);
444 struct stat __user *, statbuf)
446 struct kstat stat;
449 error = vfs_lstat(filename, &stat);
453 return cp_new_stat(&stat, statbuf);
458 struct stat __user *, statbuf, int, flag)
460 struct kstat stat;
463 error = vfs_fstatat(dfd, filename, &stat, flag);
466 return cp_new_stat(&stat, statbuf);
470 SYSCALL_DEFINE2(newfstat, unsigned int, fd, struct stat __user *, statbuf)
472 struct kstat stat;
473 int error = vfs_fstat(fd, &stat);
476 error = cp_new_stat(&stat, statbuf);
538 static long cp_new_stat64(struct kstat *stat, struct stat64 __user *statbuf)
545 tmp.st_dev = new_encode_dev(stat->dev);
546 tmp.st_rdev = new_encode_dev(stat->rdev);
548 tmp.st_dev = huge_encode_dev(stat->dev);
549 tmp.st_rdev = huge_encode_dev(stat->rdev);
551 tmp.st_ino = stat->ino;
552 if (sizeof(tmp.st_ino) < sizeof(stat->ino) && tmp.st_ino != stat->ino)
555 tmp.__st_ino = stat->ino;
557 tmp.st_mode = stat->mode;
558 tmp.st_nlink = stat->nlink;
559 tmp.st_uid = from_kuid_munged(current_user_ns(), stat->uid);
560 tmp.st_gid = from_kgid_munged(current_user_ns(), stat->gid);
561 tmp.st_atime = stat->atime.tv_sec;
562 tmp.st_atime_nsec = stat->atime.tv_nsec;
563 tmp.st_mtime = stat->mtime.tv_sec;
564 tmp.st_mtime_nsec = stat->mtime.tv_nsec;
565 tmp.st_ctime = stat->ctime.tv_sec;
566 tmp.st_ctime_nsec = stat->ctime.tv_nsec;
567 tmp.st_size = stat->size;
568 tmp.st_blocks = stat->blocks;
569 tmp.st_blksize = stat->blksize;
576 struct kstat stat;
577 int error = vfs_stat(filename, &stat);
580 error = cp_new_stat64(&stat, statbuf);
588 struct kstat stat;
589 int error = vfs_lstat(filename, &stat);
592 error = cp_new_stat64(&stat, statbuf);
599 struct kstat stat;
600 int error = vfs_fstat(fd, &stat);
603 error = cp_new_stat64(&stat, statbuf);
611 struct kstat stat;
614 error = vfs_fstatat(dfd, filename, &stat, flag);
617 return cp_new_stat64(&stat, statbuf);
622 cp_statx(const struct kstat *stat, struct statx __user *buffer)
629 tmp.stx_mask = stat->result_mask & ~STATX_CHANGE_COOKIE;
630 tmp.stx_blksize = stat->blksize;
632 tmp.stx_attributes = stat->attributes & ~STATX_ATTR_CHANGE_MONOTONIC;
633 tmp.stx_nlink = stat->nlink;
634 tmp.stx_uid = from_kuid_munged(current_user_ns(), stat->uid);
635 tmp.stx_gid = from_kgid_munged(current_user_ns(), stat->gid);
636 tmp.stx_mode = stat->mode;
637 tmp.stx_ino = stat->ino;
638 tmp.stx_size = stat->size;
639 tmp.stx_blocks = stat->blocks;
640 tmp.stx_attributes_mask = stat->attributes_mask;
641 tmp.stx_atime.tv_sec = stat->atime.tv_sec;
642 tmp.stx_atime.tv_nsec = stat->atime.tv_nsec;
643 tmp.stx_btime.tv_sec = stat->btime.tv_sec;
644 tmp.stx_btime.tv_nsec = stat->btime.tv_nsec;
645 tmp.stx_ctime.tv_sec = stat->ctime.tv_sec;
646 tmp.stx_ctime.tv_nsec = stat->ctime.tv_nsec;
647 tmp.stx_mtime.tv_sec = stat->mtime.tv_sec;
648 tmp.stx_mtime.tv_nsec = stat->mtime.tv_nsec;
649 tmp.stx_rdev_major = MAJOR(stat->rdev);
650 tmp.stx_rdev_minor = MINOR(stat->rdev);
651 tmp.stx_dev_major = MAJOR(stat->dev);
652 tmp.stx_dev_minor = MINOR(stat->dev);
653 tmp.stx_mnt_id = stat->mnt_id;
654 tmp.stx_dio_mem_align = stat->dio_mem_align;
655 tmp.stx_dio_offset_align = stat->dio_offset_align;
663 struct kstat stat;
676 error = vfs_statx(dfd, filename, flags, &stat, mask);
680 return cp_statx(&stat, buffer);
685 * @dfd: Base directory to pathwalk from *or* fd to stat.
686 * @filename: File to stat or "" with AT_EMPTY_PATH
710 static int cp_compat_stat(struct kstat *stat, struct compat_stat __user *ubuf)
714 if (sizeof(tmp.st_dev) < 4 && !old_valid_dev(stat->dev))
716 if (sizeof(tmp.st_rdev) < 4 && !old_valid_dev(stat->rdev))
720 tmp.st_dev = new_encode_dev(stat->dev);
721 tmp.st_ino = stat->ino;
722 if (sizeof(tmp.st_ino) < sizeof(stat->ino) && tmp.st_ino != stat->ino)
724 tmp.st_mode = stat->mode;
725 tmp.st_nlink = stat->nlink;
726 if (tmp.st_nlink != stat->nlink)
728 SET_UID(tmp.st_uid, from_kuid_munged(current_user_ns(), stat->uid));
729 SET_GID(tmp.st_gid, from_kgid_munged(current_user_ns(), stat->gid));
730 tmp.st_rdev = new_encode_dev(stat->rdev);
731 if ((u64) stat->size > MAX_NON_LFS)
733 tmp.st_size = stat->size;
734 tmp.st_atime = stat->atime.tv_sec;
735 tmp.st_atime_nsec = stat->atime.tv_nsec;
736 tmp.st_mtime = stat->mtime.tv_sec;
737 tmp.st_mtime_nsec = stat->mtime.tv_nsec;
738 tmp.st_ctime = stat->ctime.tv_sec;
739 tmp.st_ctime_nsec = stat->ctime.tv_nsec;
740 tmp.st_blocks = stat->blocks;
741 tmp.st_blksize = stat->blksize;
748 struct kstat stat;
751 error = vfs_stat(filename, &stat);
754 return cp_compat_stat(&stat, statbuf);
760 struct kstat stat;
763 error = vfs_lstat(filename, &stat);
766 return cp_compat_stat(&stat, statbuf);
774 struct kstat stat;
777 error = vfs_fstatat(dfd, filename, &stat, flag);
780 return cp_compat_stat(&stat, statbuf);
787 struct kstat stat;
788 int error = vfs_fstat(fd, &stat);
791 error = cp_compat_stat(&stat, statbuf);