summaryrefslogtreecommitdiffstats
path: root/init/do_mounts.h
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2017-05-08 15:57:00 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2017-05-08 17:15:12 -0700
commit046aa1265f08d8400bd4b63171238c9daba15ec3 (patch)
treebdd079d995d88a6e415c7340a05e73c0e02e89f6 /init/do_mounts.h
parentcff75e0b6fe835800f8e08a32d731119cd9e3b79 (diff)
downloadlinux-stable-046aa1265f08d8400bd4b63171238c9daba15ec3.tar.gz
linux-stable-046aa1265f08d8400bd4b63171238c9daba15ec3.tar.bz2
linux-stable-046aa1265f08d8400bd4b63171238c9daba15ec3.zip
initramfs: use vfs_stat/lstat directly
sys_newlstat is a system call implementation that is meant for user space, and that copies kernel-internal data structure to the user format, which is not needed for in-kernel users. Further, as we rearrange the system call implementation so we can extend it with 64-bit time_t, the prototype for sys_newlstat changes. This changes the initramfs code to use vfs_lstat directly, to get it out of the way of the time_t changes, and make it slightly more efficient in the process. Along the same lines we also replace sys_stat and sys_stat64 with vfs_stat. Link: http://lkml.kernel.org/r/20170314214932.4052842-1-arnd@arndb.de Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Alexander Viro <viro@zeniv.linux.org.uk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'init/do_mounts.h')
-rw-r--r--init/do_mounts.h22
1 files changed, 4 insertions, 18 deletions
diff --git a/init/do_mounts.h b/init/do_mounts.h
index 067af1d9e8b6..282d65bfd674 100644
--- a/init/do_mounts.h
+++ b/init/do_mounts.h
@@ -19,29 +19,15 @@ static inline int create_dev(char *name, dev_t dev)
return sys_mknod(name, S_IFBLK|0600, new_encode_dev(dev));
}
-#if BITS_PER_LONG == 32
static inline u32 bstat(char *name)
{
- struct stat64 stat;
- if (sys_stat64(name, &stat) != 0)
+ struct kstat stat;
+ if (vfs_stat(name, &stat) != 0)
return 0;
- if (!S_ISBLK(stat.st_mode))
+ if (!S_ISBLK(stat.mode))
return 0;
- if (stat.st_rdev != (u32)stat.st_rdev)
- return 0;
- return stat.st_rdev;
-}
-#else
-static inline u32 bstat(char *name)
-{
- struct stat stat;
- if (sys_newstat(name, &stat) != 0)
- return 0;
- if (!S_ISBLK(stat.st_mode))
- return 0;
- return stat.st_rdev;
+ return stat.rdev;
}
-#endif
#ifdef CONFIG_BLK_DEV_RAM