initramfs: add INITRAMFS_PRESERVE_MTIME Kconfig option
[linux-2.6-microblaze.git] / init / initramfs.c
index 656d2d7..b5bfed8 100644 (file)
@@ -116,15 +116,17 @@ static void __init free_hash(void)
        }
 }
 
-static long __init do_utime(char *filename, time64_t mtime)
+#ifdef CONFIG_INITRAMFS_PRESERVE_MTIME
+static void __init do_utime(char *filename, time64_t mtime)
 {
-       struct timespec64 t[2];
+       struct timespec64 t[2] = { { .tv_sec = mtime }, { .tv_sec = mtime } };
+       init_utimes(filename, t);
+}
 
-       t[0].tv_sec = mtime;
-       t[0].tv_nsec = 0;
-       t[1].tv_sec = mtime;
-       t[1].tv_nsec = 0;
-       return init_utimes(filename, t);
+static void __init do_utime_path(const struct path *path, time64_t mtime)
+{
+       struct timespec64 t[2] = { { .tv_sec = mtime }, { .tv_sec = mtime } };
+       vfs_utimes(path, t);
 }
 
 static __initdata LIST_HEAD(dir_list);
@@ -157,6 +159,12 @@ static void __init dir_utime(void)
                kfree(de);
        }
 }
+#else
+static void __init do_utime(char *filename, time64_t mtime) {}
+static void __init do_utime_path(const struct path *path, time64_t mtime) {}
+static void __init dir_add(const char *name, time64_t mtime) {}
+static void __init dir_utime(void) {}
+#endif
 
 static __initdata time64_t mtime;
 
@@ -381,14 +389,10 @@ static int __init do_name(void)
 static int __init do_copy(void)
 {
        if (byte_count >= body_len) {
-               struct timespec64 t[2] = { };
                if (xwrite(wfile, victim, body_len, &wfile_pos) != body_len)
                        error("write error");
 
-               t[0].tv_sec = mtime;
-               t[1].tv_sec = mtime;
-               vfs_utimes(&wfile->f_path, t);
-
+               do_utime_path(&wfile->f_path, mtime);
                fput(wfile);
                eat(body_len);
                state = SkipIt;