From patchwork Fri Jun 17 20:10:06 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 102143 Delivered-To: patch@linaro.org Received: by 10.140.28.4 with SMTP id 4csp451316qgy; Fri, 17 Jun 2016 13:08:53 -0700 (PDT) X-Received: by 10.98.19.133 with SMTP id 5mr4230721pft.17.1466194133509; Fri, 17 Jun 2016 13:08:53 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id dc7si16846924pab.147.2016.06.17.13.08.52; Fri, 17 Jun 2016 13:08:53 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932858AbcFQUIu (ORCPT + 30 others); Fri, 17 Jun 2016 16:08:50 -0400 Received: from mout.kundenserver.de ([217.72.192.74]:60813 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752021AbcFQUIs (ORCPT ); Fri, 17 Jun 2016 16:08:48 -0400 Received: from wuerfel.lan. ([78.42.132.4]) by mrelayeu.kundenserver.de (mreue103) with ESMTPA (Nemesis) id 0LjcUK-1bpWg72Kka-00beio; Fri, 17 Jun 2016 22:08:35 +0200 From: Arnd Bergmann To: Andrew Morton Cc: y2038@lists.linaro.org, linux-fsdevel@vger.kernel.org, Arnd Bergmann , Yaowei Bai , Dave Young , linux-kernel@vger.kernel.org Subject: [PATCH] initramfs: use vfs_stat/lstat directly Date: Fri, 17 Jun 2016 22:10:06 +0200 Message-Id: <20160617201021.2235473-1-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 X-Provags-ID: V03:K0:okfh9szFkbdSsMgHCrv/F5UNqjNaUihusAeqR71cWbZY6DmAjVd ZauW6Kk/qfLoev3fTqhCEP7DPspZj7s1SneSOrx+0y8/ac6Naj6WwiqIOL18/AihUIVKoXp bZAtP+YiYglp8eBDGGhAiM+daxDYQ+nUhfL4nz1O2EZh/Hrpc4OEA84hBh4e5R4S0LxslWU HPo6Cv/IRY8iDcDK3CbqQ== X-UI-Out-Filterresults: notjunk:1; V01:K0:M4m/kVBBkpQ=:w1bPdl+B+7Aj5RsZk1+zOe 1z40eUqrT2qxS4/wFfMLmcN+qxPnnA1JR68mfqlbUIxV3ysJQ7hLHOdjdGK9JjOCK0tLdFM47 as4dn6/GdBMFVCjiYG+ESA/aWWDdIwsv8+uv5I0zM3jntxldnOtNiliBTYD1R4cUPo8GGwtCG USAK953lwJPh0yIhNWMxlzFQmWqyp8wtvnWJsRv5JBUzXizTbDmzUOiHdzPy0SicaZJ7gj43b CuZO1w53UKbJUvFpQbFGZZc/7JNJhyGnUAQu5vteZo5YY3VE8JaYHYahSMGxKmQVW0zRt234E /4p5tDnTld23zl7CvUyrUikKZvzq5nbygCEEmMzaWS50hldwYaRr/tMqWoJ0qNrBpDqFoOjNf rSqG4/SxU3o5gOFO9zpV8DNWJbC4rh9QF29Nk7rih4WR5/1gQ7ifhWaUN4cgeaCYraTCEoBh4 JypW3hBjIwE+ctqaoz6bBXoOjduoTmbDPHRLHqfG7yJYJCvvSqgIiFz1Vcb9j2HTaWqiSuXeM Tzsd5XeXIOUmrKOADAv/uDvM3qtmnlh+fLX7ibx1nuGoZe2CV/vRvM5KxDFWozffFZp+EFcFu yf/I9t41G6xlPwnSuaYdp3Nsy7I7jc7yzw6jxQYDhoIuHrt1OtvVNIcVGDapnzWkbFTEk3AJ4 m7yIr8oXdUqM8htPFkj6Fjgqm7Ou/i8vY6gZh8PNk/NQ7vaexeG47KSkVkDwVlv9adjE= Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. Signed-off-by: Arnd Bergmann --- init/do_mounts.h | 22 ++++------------------ init/initramfs.c | 12 ++++++------ 2 files changed, 10 insertions(+), 24 deletions(-) -- 2.9.0 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 diff --git a/init/initramfs.c b/init/initramfs.c index b32ad7d97ac9..ce7a04435996 100644 --- a/init/initramfs.c +++ b/init/initramfs.c @@ -311,10 +311,10 @@ static int __init maybe_link(void) static void __init clean_path(char *path, umode_t fmode) { - struct stat st; + struct kstat st; - if (!sys_newlstat(path, &st) && (st.st_mode ^ fmode) & S_IFMT) { - if (S_ISDIR(st.st_mode)) + if (!vfs_lstat(path, &st) && (st.mode ^ fmode) & S_IFMT) { + if (S_ISDIR(st.mode)) sys_rmdir(path); else sys_unlink(path); @@ -580,13 +580,13 @@ static void __init clean_rootfs(void) num = sys_getdents64(fd, dirp, BUF_SIZE); while (num > 0) { while (num > 0) { - struct stat st; + struct kstat st; int ret; - ret = sys_newlstat(dirp->d_name, &st); + ret = vfs_lstat(dirp->d_name, &st); WARN_ON_ONCE(ret); if (!ret) { - if (S_ISDIR(st.st_mode)) + if (S_ISDIR(st.mode)) sys_rmdir(dirp->d_name); else sys_unlink(dirp->d_name);