nixpkgs/pkgs/os-specific/linux/mountall/no-plymouth.patch
Eelco Dolstra 84b56ade89 * Respect the "nobootwait" mount option for filesystems under /var and
/usr.

svn path=/nixpkgs/trunk/; revision=22510
2010-07-07 13:08:44 +00:00

298 lines
7.3 KiB
Diff

diff -ru -x '*~' mountall-2.15-orig/configure.ac mountall-2.15/configure.ac
--- mountall-2.15-orig/configure.ac 2010-05-09 01:42:22.000000000 +0200
+++ mountall-2.15/configure.ac 2010-06-03 13:46:09.000000000 +0200
@@ -29,7 +29,7 @@
PKG_CHECK_MODULES([NIH_DBUS], [libnih-dbus >= 1.0.0])
PKG_CHECK_MODULES([DBUS], [dbus-1 >= 1.2.16])
PKG_CHECK_MODULES([UDEV], [libudev >= 146])
-PKG_CHECK_MODULES([PLYMOUTH], [ply-boot-client >= 0.8.0])
+#PKG_CHECK_MODULES([PLYMOUTH], [ply-boot-client >= 0.8.0])
# Checks for header files.
diff -ru -x '*~' mountall-2.15-orig/src/mountall.c mountall-2.15/src/mountall.c
--- mountall-2.15-orig/src/mountall.c 2010-05-09 01:42:24.000000000 +0200
+++ mountall-2.15/src/mountall.c 2010-07-07 14:40:47.000000000 +0200
@@ -64,8 +64,10 @@
#include <nih-dbus/dbus_proxy.h>
#include <nih-dbus/errors.h>
+#if 0
#include <ply-event-loop.h>
#include <ply-boot-client.h>
+#endif
#include "ioprio.h"
@@ -75,7 +77,7 @@
#define BUILTIN_FSTAB "/lib/init/fstab"
-#define BOREDOM_TIMEOUT 3
+#define BOREDOM_TIMEOUT 15
enum exit {
EXIT_OK = 0, /* Ok */
@@ -214,15 +216,19 @@
void boredom_timeout (void *data, NihTimer *timer);
int plymouth_connect (void);
+#if 0
void plymouth_disconnected (void *user_data, ply_boot_client_t *client);
+#endif
void plymouth_progress (Mount *mnt, int progress);
void plymouth_update (int only_clear);
+#if 0
void plymouth_response (void *user_data, ply_boot_client_t *client);
void plymouth_failed (void *user_data, ply_boot_client_t *client);
void plymouth_answer (void *user_data, const char *keys,
ply_boot_client_t *client);
+#endif
void usr1_handler (void *data, NihSignal *signal);
@@ -241,8 +247,10 @@
**/
size_t num_local = 0;
size_t num_local_mounted = 0;
+size_t num_local_failed = 0;
size_t num_remote = 0;
size_t num_remote_mounted = 0;
+size_t num_remote_failed = 0;
size_t num_virtual = 0;
size_t num_virtual_mounted = 0;
size_t num_swap = 0;
@@ -310,6 +318,7 @@
**/
static struct udev *udev = NULL;
+#if 0
/**
* ply_event_loop:
*
@@ -323,6 +332,7 @@
* Plymouth boot client.
**/
static ply_boot_client_t *ply_boot_client = NULL;
+#endif
/**
* plymouth_error:
@@ -1208,11 +1218,12 @@
nih_debug ("%s is root filesystem", MOUNT_NAME (mnt));
tag = TAG_LOCAL;
} else if (is_remote (mnt)) {
- if ((! strcmp (mnt->mountpoint, "/usr"))
+ if ((! has_option (mnt, "nobootwait", FALSE)) && (
+ (! strcmp (mnt->mountpoint, "/usr"))
|| (! strcmp (mnt->mountpoint, "/var"))
|| (! strncmp (mnt->mountpoint, "/usr/", 5))
|| (! strncmp (mnt->mountpoint, "/var/", 5))
- || (has_option (mnt, "bootwait", FALSE)))
+ || (has_option (mnt, "bootwait", FALSE))))
{
tag = TAG_REMOTE;
} else {
@@ -1475,7 +1486,8 @@
/* Enforce local only after virtual filesystems triggered */
if ((! local_triggered)
&& virtual_triggered
- && (num_local_mounted == num_local)) {
+ && (num_local_mounted == num_local)
+ && (num_local_failed == 0)) {
nih_info (_("%s finished"), "local");
emit_event ("local-filesystems", NULL);
local_triggered = TRUE;
@@ -1484,7 +1496,8 @@
/* Enforce remote only after virtual filesystems triggrered */
if ((! remote_triggered)
&& virtual_triggered
- && (num_remote_mounted == num_remote)) {
+ && (num_remote_mounted == num_remote)
+ && (num_remote_failed == 0)) {
nih_info (_("%s finished"), "remote");
emit_event ("remote-filesystems", NULL);
remote_triggered = TRUE;
@@ -1494,7 +1507,9 @@
if ((! filesystem_triggered)
&& virtual_triggered
&& local_triggered
- && remote_triggered) {
+ && remote_triggered
+ && (num_local_failed == 0)
+ && (num_remote_failed == 0)) {
nih_info (_("All filesystems mounted"));
emit_event ("filesystem", NULL);
filesystem_triggered = TRUE;
@@ -1508,9 +1523,9 @@
swap_triggered = TRUE;
}
- nih_info ("local %zi/%zi remote %zi/%zi virtual %zi/%zi swap %zi/%zi",
- num_local_mounted, num_local,
- num_remote_mounted, num_remote,
+ nih_info ("local %zi/%zi/%zi remote %zi/%zi/%zi virtual %zi/%zi swap %zi/%zi",
+ num_local_mounted, num_local, num_local_failed,
+ num_remote_mounted, num_remote, num_remote_failed,
num_virtual_mounted, num_virtual,
num_swap_mounted, num_swap);
}
@@ -2203,12 +2218,14 @@
if (no_events)
return;
+#if 0
/* Flush the Plymouth connection to ensure all updates are sent,
* since the event may kill plymouth.
*/
if (ply_boot_client)
ply_boot_client_flush (ply_boot_client);
-
+#endif
+
env = NIH_MUST (nih_str_array_new (NULL));
if (mnt) {
@@ -2787,6 +2804,7 @@
int
plymouth_connect (void)
{
+#if 0
/* If we were already connected, just re-use that connection */
if (ply_boot_client)
return TRUE;
@@ -2813,8 +2831,13 @@
nih_info (_("Connected to Plymouth"));
return TRUE;
+#else
+ return FALSE;
+#endif
}
+
+#if 0
void
plymouth_disconnected (void * user_data,
ply_boot_client_t *client)
@@ -2827,6 +2850,7 @@
ply_boot_client_free (ply_boot_client);
ply_boot_client = NULL;
}
+#endif
void
@@ -2837,6 +2861,7 @@
nih_assert (mnt != NULL);
+#if 0
/* No Plymouth => no progress information */
if (! plymouth_connect ())
return;
@@ -2866,6 +2891,7 @@
plymouth_response,
plymouth_failed,
NULL);
+#endif
}
void
@@ -2881,20 +2907,31 @@
NIH_LIST_FOREACH (mounts, iter) {
Mount *mnt = (Mount *)iter;
- if (mnt->error <= ERROR_BORED)
+ if (mnt->error == ERROR_NONE)
continue;
- nih_error (_("Skipping mounting %s since Plymouth is not available"),
+ nih_error (_("Could not mount %s"),
MOUNT_NAME (mnt));
mnt->error = ERROR_NONE;
+ if (mnt->tag == TAG_LOCAL) {
+ num_local_failed++;
+ emit_event ("mount-failed", mnt);
+ }
+
+ if (mnt->tag == TAG_REMOTE) {
+ num_remote_failed++;
+ emit_event ("mount-failed", mnt);
+ }
+
skip_mount (mnt);
}
return;
}
+#if 0
/* If we're already displaying messages, don't change them unless
* the message is no longer valid for that mount point; otherwise
* clear the message.
@@ -3005,8 +3042,10 @@
plymouth_answer,
plymouth_failed,
NULL);
+#endif
}
+#if 0
void
plymouth_response (void * user_data,
ply_boot_client_t *client)
@@ -3125,7 +3164,7 @@
break;
}
}
-
+#endif
/**
@@ -3211,6 +3250,7 @@
(NihIoWatcher)udev_monitor_watcher,
udev_monitor));
+#if 0
/* Initialise a Plymouth event loop; this is an epoll instance that
* we can poll within our own main loop and call out to when needs
* be.
@@ -3224,6 +3264,7 @@
/* Attempt an early connection to Plymouth */
plymouth_connect ();
+#endif
mounts = NIH_MUST (nih_list_new (NULL));
@@ -3236,7 +3277,9 @@
* from /etc/fstab and /proc/self/mountinfo to find out what else
* we need to do.
*/
+#if 0
parse_fstab (BUILTIN_FSTAB);
+#endif
parse_fstab (_PATH_MNTTAB);
parse_mountinfo ();
@@ -3338,10 +3381,12 @@
/* Flush the D-Bus connection to ensure all messages are sent */
dbus_connection_flush (connection);
+#if 0
/* Flush the Plymouth connection to ensure all updates are sent */
if (ply_boot_client)
ply_boot_client_flush (ply_boot_client);
-
+#endif
+
return ret;
}