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_get_atime(inode);
61 stat->mtime = inode_get_mtime(inode);
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);
251 stat->mnt_id = real_mount(path.mnt)->mnt_id_unique;
252 stat->result_mask |= STATX_MNT_ID_UNIQUE;
254 stat->mnt_id = real_mount(path.mnt)->mnt_id;
255 stat->result_mask |= STATX_MNT_ID;
259 stat->attributes |= STATX_ATTR_MOUNT_ROOT;
260 stat->attributes_mask |= STATX_ATTR_MOUNT_ROOT;
267 bdev_statx_dioalign(inode, stat);
280 struct kstat *stat, int flags)
300 return vfs_fstat(dfd, stat);
304 ret = vfs_statx(dfd, name, statx_flags, stat, STATX_BASIC_STATS);
316 static int cp_old_stat(struct kstat *stat, struct __old_kernel_stat __user * statbuf)
323 printk(KERN_WARNING "VFS: Warning: %s using old stat() call. Recompile your binary.\n",
331 tmp.st_dev = old_encode_dev(stat->dev);
332 tmp.st_ino = stat->ino;
333 if (sizeof(tmp.st_ino) < sizeof(stat->ino) && tmp.st_ino != stat->ino)
335 tmp.st_mode = stat->mode;
336 tmp.st_nlink = stat->nlink;
337 if (tmp.st_nlink != stat->nlink)
339 SET_UID(tmp.st_uid, from_kuid_munged(current_user_ns(), stat->uid));
340 SET_GID(tmp.st_gid, from_kgid_munged(current_user_ns(), stat->gid));
341 tmp.st_rdev = old_encode_dev(stat->rdev);
343 if (stat->size > MAX_NON_LFS)
346 tmp.st_size = stat->size;
347 tmp.st_atime = stat->atime.tv_sec;
348 tmp.st_mtime = stat->mtime.tv_sec;
349 tmp.st_ctime = stat->ctime.tv_sec;
353 SYSCALL_DEFINE2(stat, const char __user *, filename,
356 struct kstat stat;
359 error = vfs_stat(filename, &stat);
363 return cp_old_stat(&stat, statbuf);
369 struct kstat stat;
372 error = vfs_lstat(filename, &stat);
376 return cp_old_stat(&stat, statbuf);
381 struct kstat stat;
382 int error = vfs_fstat(fd, &stat);
385 error = cp_old_stat(&stat, statbuf);
398 static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf)
400 struct stat tmp;
402 if (sizeof(tmp.st_dev) < 4 && !old_valid_dev(stat->dev))
404 if (sizeof(tmp.st_rdev) < 4 && !old_valid_dev(stat->rdev))
407 if (stat->size > MAX_NON_LFS)
412 tmp.st_dev = new_encode_dev(stat->dev);
413 tmp.st_ino = stat->ino;
414 if (sizeof(tmp.st_ino) < sizeof(stat->ino) && tmp.st_ino != stat->ino)
416 tmp.st_mode = stat->mode;
417 tmp.st_nlink = stat->nlink;
418 if (tmp.st_nlink != stat->nlink)
420 SET_UID(tmp.st_uid, from_kuid_munged(current_user_ns(), stat->uid));
421 SET_GID(tmp.st_gid, from_kgid_munged(current_user_ns(), stat->gid));
422 tmp.st_rdev = new_encode_dev(stat->rdev);
423 tmp.st_size = stat->size;
424 tmp.st_atime = stat->atime.tv_sec;
425 tmp.st_mtime = stat->mtime.tv_sec;
426 tmp.st_ctime = stat->ctime.tv_sec;
428 tmp.st_atime_nsec = stat->atime.tv_nsec;
429 tmp.st_mtime_nsec = stat->mtime.tv_nsec;
430 tmp.st_ctime_nsec = stat->ctime.tv_nsec;
432 tmp.st_blocks = stat->blocks;
433 tmp.st_blksize = stat->blksize;
438 struct stat __user *, statbuf)
440 struct kstat stat;
441 int error = vfs_stat(filename, &stat);
445 return cp_new_stat(&stat, statbuf);
449 struct stat __user *, statbuf)
451 struct kstat stat;
454 error = vfs_lstat(filename, &stat);
458 return cp_new_stat(&stat, statbuf);
463 struct stat __user *, statbuf, int, flag)
465 struct kstat stat;
468 error = vfs_fstatat(dfd, filename, &stat, flag);
471 return cp_new_stat(&stat, statbuf);
475 SYSCALL_DEFINE2(newfstat, unsigned int, fd, struct stat __user *, statbuf)
477 struct kstat stat;
478 int error = vfs_fstat(fd, &stat);
481 error = cp_new_stat(&stat, statbuf);
543 static long cp_new_stat64(struct kstat *stat, struct stat64 __user *statbuf)
550 tmp.st_dev = new_encode_dev(stat->dev);
551 tmp.st_rdev = new_encode_dev(stat->rdev);
553 tmp.st_dev = huge_encode_dev(stat->dev);
554 tmp.st_rdev = huge_encode_dev(stat->rdev);
556 tmp.st_ino = stat->ino;
557 if (sizeof(tmp.st_ino) < sizeof(stat->ino) && tmp.st_ino != stat->ino)
560 tmp.__st_ino = stat->ino;
562 tmp.st_mode = stat->mode;
563 tmp.st_nlink = stat->nlink;
564 tmp.st_uid = from_kuid_munged(current_user_ns(), stat->uid);
565 tmp.st_gid = from_kgid_munged(current_user_ns(), stat->gid);
566 tmp.st_atime = stat->atime.tv_sec;
567 tmp.st_atime_nsec = stat->atime.tv_nsec;
568 tmp.st_mtime = stat->mtime.tv_sec;
569 tmp.st_mtime_nsec = stat->mtime.tv_nsec;
570 tmp.st_ctime = stat->ctime.tv_sec;
571 tmp.st_ctime_nsec = stat->ctime.tv_nsec;
572 tmp.st_size = stat->size;
573 tmp.st_blocks = stat->blocks;
574 tmp.st_blksize = stat->blksize;
581 struct kstat stat;
582 int error = vfs_stat(filename, &stat);
585 error = cp_new_stat64(&stat, statbuf);
593 struct kstat stat;
594 int error = vfs_lstat(filename, &stat);
597 error = cp_new_stat64(&stat, statbuf);
604 struct kstat stat;
605 int error = vfs_fstat(fd, &stat);
608 error = cp_new_stat64(&stat, statbuf);
616 struct kstat stat;
619 error = vfs_fstatat(dfd, filename, &stat, flag);
622 return cp_new_stat64(&stat, statbuf);
627 cp_statx(const struct kstat *stat, struct statx __user *buffer)
634 tmp.stx_mask = stat->result_mask & ~STATX_CHANGE_COOKIE;
635 tmp.stx_blksize = stat->blksize;
637 tmp.stx_attributes = stat->attributes & ~STATX_ATTR_CHANGE_MONOTONIC;
638 tmp.stx_nlink = stat->nlink;
639 tmp.stx_uid = from_kuid_munged(current_user_ns(), stat->uid);
640 tmp.stx_gid = from_kgid_munged(current_user_ns(), stat->gid);
641 tmp.stx_mode = stat->mode;
642 tmp.stx_ino = stat->ino;
643 tmp.stx_size = stat->size;
644 tmp.stx_blocks = stat->blocks;
645 tmp.stx_attributes_mask = stat->attributes_mask;
646 tmp.stx_atime.tv_sec = stat->atime.tv_sec;
647 tmp.stx_atime.tv_nsec = stat->atime.tv_nsec;
648 tmp.stx_btime.tv_sec = stat->btime.tv_sec;
649 tmp.stx_btime.tv_nsec = stat->btime.tv_nsec;
650 tmp.stx_ctime.tv_sec = stat->ctime.tv_sec;
651 tmp.stx_ctime.tv_nsec = stat->ctime.tv_nsec;
652 tmp.stx_mtime.tv_sec = stat->mtime.tv_sec;
653 tmp.stx_mtime.tv_nsec = stat->mtime.tv_nsec;
654 tmp.stx_rdev_major = MAJOR(stat->rdev);
655 tmp.stx_rdev_minor = MINOR(stat->rdev);
656 tmp.stx_dev_major = MAJOR(stat->dev);
657 tmp.stx_dev_minor = MINOR(stat->dev);
658 tmp.stx_mnt_id = stat->mnt_id;
659 tmp.stx_dio_mem_align = stat->dio_mem_align;
660 tmp.stx_dio_offset_align = stat->dio_offset_align;
668 struct kstat stat;
681 error = vfs_statx(dfd, filename, flags, &stat, mask);
685 return cp_statx(&stat, buffer);
690 * @dfd: Base directory to pathwalk from *or* fd to stat.
691 * @filename: File to stat or "" with AT_EMPTY_PATH
715 static int cp_compat_stat(struct kstat *stat, struct compat_stat __user *ubuf)
719 if (sizeof(tmp.st_dev) < 4 && !old_valid_dev(stat->dev))
721 if (sizeof(tmp.st_rdev) < 4 && !old_valid_dev(stat->rdev))
725 tmp.st_dev = new_encode_dev(stat->dev);
726 tmp.st_ino = stat->ino;
727 if (sizeof(tmp.st_ino) < sizeof(stat->ino) && tmp.st_ino != stat->ino)
729 tmp.st_mode = stat->mode;
730 tmp.st_nlink = stat->nlink;
731 if (tmp.st_nlink != stat->nlink)
733 SET_UID(tmp.st_uid, from_kuid_munged(current_user_ns(), stat->uid));
734 SET_GID(tmp.st_gid, from_kgid_munged(current_user_ns(), stat->gid));
735 tmp.st_rdev = new_encode_dev(stat->rdev);
736 if ((u64) stat->size > MAX_NON_LFS)
738 tmp.st_size = stat->size;
739 tmp.st_atime = stat->atime.tv_sec;
740 tmp.st_atime_nsec = stat->atime.tv_nsec;
741 tmp.st_mtime = stat->mtime.tv_sec;
742 tmp.st_mtime_nsec = stat->mtime.tv_nsec;
743 tmp.st_ctime = stat->ctime.tv_sec;
744 tmp.st_ctime_nsec = stat->ctime.tv_nsec;
745 tmp.st_blocks = stat->blocks;
746 tmp.st_blksize = stat->blksize;
753 struct kstat stat;
756 error = vfs_stat(filename, &stat);
759 return cp_compat_stat(&stat, statbuf);
765 struct kstat stat;
768 error = vfs_lstat(filename, &stat);
771 return cp_compat_stat(&stat, statbuf);
779 struct kstat stat;
782 error = vfs_fstatat(dfd, filename, &stat, flag);
785 return cp_compat_stat(&stat, statbuf);
792 struct kstat stat;
793 int error = vfs_fstat(fd, &stat);
796 error = cp_compat_stat(&stat, statbuf);