--- /dev/null
+Index: e2fsck/Makefile.in
+===================================================================
+--- e2fsck/Makefile.in.orig 2012-06-04 18:49:33.000000000 +0200
++++ e2fsck/Makefile.in 2012-06-14 09:50:56.344425761 +0200
+@@ -68,7 +68,7 @@ OBJS= crc32.o dict.o unix.o e2fsck.o sup
+ pass3.o pass4.o pass5.o journal.o badblocks.o util.o dirinfo.o \
+ dx_dirinfo.o ehandler.o problem.o message.o quota.o recovery.o \
+ region.o revoke.o ea_refcount.o rehash.o profile.o prof_err.o \
+- logfile.o sigcatcher.o $(MTRACE_OBJ)
++ logfile.o sigcatcher.o splash.o $(MTRACE_OBJ)
+
+ PROFILED_OBJS= profiled/dict.o profiled/unix.o profiled/e2fsck.o \
+ profiled/super.o profiled/pass1.o profiled/pass1b.o \
+@@ -107,6 +107,7 @@ SRCS= $(srcdir)/e2fsck.c \
+ $(srcdir)/rehash.c \
+ $(srcdir)/region.c \
+ $(srcdir)/profile.c \
++ $(srcdir)/splash.c \
+ $(srcdir)/sigcatcher.c \
+ $(srcdir)/logfile.c \
+ prof_err.c \
+@@ -539,6 +540,7 @@ region.o: $(srcdir)/region.c $(top_build
+ $(srcdir)/profile.h prof_err.h $(top_srcdir)/lib/quota/mkquota.h \
+ $(top_srcdir)/lib/quota/quotaio.h $(top_srcdir)/lib/quota/dqblk_v2.h \
+ $(top_srcdir)/lib/quota/quotaio_tree.h $(top_srcdir)/lib/../e2fsck/dict.h
++splash.o: $(srcdir)/splash.c $(srcdir)/splash.h
+ profile.o: $(srcdir)/profile.c $(top_builddir)/lib/config.h \
+ $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/et/com_err.h \
+ $(srcdir)/profile.h prof_err.h
+Index: e2fsck/splash.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ e2fsck/splash.c 2012-06-14 09:50:21.834048298 +0200
+@@ -0,0 +1,100 @@
++/*
++ * add support for switching the splash screen on boot
++ */
++#include <stdio.h>
++#include <string.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#include <unistd.h>
++#include <errno.h>
++#include "splash.h"
++
++static int verbose = 0;
++
++/* nop implementation
++ */
++static void nop(void)
++{
++}
++
++static struct splash_ops nop_ops = {
++ .splash_on = nop,
++ .splash_off = nop
++};
++
++/*
++ * bootsplash implementation
++ */
++#define BOOTSPLASH_CTL "/proc/splash"
++
++static int bootsplash_exists(void)
++{
++ struct stat sb;
++
++ if (stat(BOOTSPLASH_CTL, &sb) == -1)
++ return 0;
++
++ if (S_ISREG(sb.st_mode))
++ return 1;
++
++ return 0;
++}
++
++/* write msg to splash control */
++static void bootsplash_msg(const char *msg, size_t size)
++{
++ int fd;
++ size_t written;
++
++ fd = open(BOOTSPLASH_CTL, O_WRONLY);
++ if (fd == -1) {
++ if (verbose)
++ printf("cannot open %s\n", BOOTSPLASH_CTL);
++ return;
++ }
++
++ written = write(fd, msg, size);
++ if (written != size) {
++ if (verbose)
++ printf("size = %i, written = %i\n", size, written);
++ }
++
++ close(fd);
++}
++
++static void bootsplash_on(void)
++{
++ if (verbose)
++ printf("setting bootsplash silent\n");
++ bootsplash_msg("silent\n", 7);
++}
++
++static void bootsplash_off(void)
++{
++ if (verbose)
++ printf("setting bootsplash verbose\n");
++ bootsplash_msg("verbose\n", 8);
++}
++
++static struct splash_ops bootsplash_ops = {
++ .splash_on = bootsplash_on,
++ .splash_off = bootsplash_off
++};
++
++/*
++ * Initialisation
++ */
++void splash_init(struct splash_ops **ops)
++{
++ if (bootsplash_exists())
++ *ops = &bootsplash_ops;
++ else
++ *ops = &nop_ops;
++}
++
++void splash_set_verbose(void)
++{
++ verbose = 1;
++}
++
+Index: e2fsck/splash.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ e2fsck/splash.h 2012-06-14 09:50:21.834048298 +0200
+@@ -0,0 +1,13 @@
++#ifndef _SPLASH_H
++#define _SPLASH_H
++
++struct splash_ops {
++ void (*splash_on)(void);
++ void (*splash_off)(void);
++};
++
++void splash_init(struct splash_ops **ops);
++void splash_set_verbose(void);
++
++#endif /* _SPLASH_H */
++
+Index: e2fsck/unix.c
+===================================================================
+--- e2fsck/unix.c.orig 2012-06-12 04:12:50.000000000 +0200
++++ e2fsck/unix.c 2012-06-14 09:50:21.834048298 +0200
+@@ -51,6 +51,7 @@ extern int optind;
+ #include "e2p/e2p.h"
+ #include "e2fsck.h"
+ #include "problem.h"
++#include "splash.h"
+ #include "../version.h"
+
+ /* Command line options */
+@@ -1141,6 +1142,7 @@ int main (int argc, char *argv[])
+ __u32 features[3];
+ char *cp;
+ int qtype; /* quota type */
++ struct splash_ops *sops;
+
+ clear_problem_context(&pctx);
+ sigcatcher_setup();
+@@ -1172,6 +1174,7 @@ int main (int argc, char *argv[])
+ exit(FSCK_ERROR);
+ }
+ reserve_stdio_fds();
++ splash_init(&sops);
+
+ set_up_logging(ctx);
+ if (ctx->logf) {
+@@ -1548,6 +1551,7 @@ print_unsupp_features:
+ fatal_error(ctx, 0);
+ check_if_skip(ctx);
+ check_resize_inode(ctx);
++ sops->splash_off();
+ if (bad_blocks_file)
+ read_bad_blocks_file(ctx, bad_blocks_file, replace_bad_blocks);
+ else if (cflag)