summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Drake <dsd@laptop.org>2012-04-25 16:46:46 +0100
committerLennart Poettering <lennart@poettering.net>2012-05-30 23:17:03 +0200
commit7c49259fc8f63ade6cb212a43477d7030aaaf423 (patch)
tree3ab182bfeee5800e3f37b08ebad531199c4ea3ac
parentd94117a93c0a8431de5c765f21a97f6eb32580da (diff)
shutdown: Don't skip bind mounts on shutdown
This reverts commits d72238fcb34abc81aca97c5fb15888708ee937d3 and f3accc08. OLPC runs / as a bind-mount, so this must be remounted RO during shutdown to avoid corruption. As Lennert can't recall the exact reasons for making the shutdown code skip bind mounts, revert to previous behaviour to solve the issue for OLPC. http://lists.freedesktop.org/archives/systemd-devel/2012-April/004957.html
-rw-r--r--src/core/umount.c19
1 files changed, 2 insertions, 17 deletions
diff --git a/src/core/umount.c b/src/core/umount.c
index 71ad4b623d..a5a215b2b5 100644
--- a/src/core/umount.c
+++ b/src/core/umount.c
@@ -38,7 +38,6 @@
typedef struct MountPoint {
char *path;
dev_t devnum;
- bool skip_ro;
LIST_FIELDS (struct MountPoint, mount_point);
} MountPoint;
@@ -73,8 +72,6 @@ static int mount_points_list_get(MountPoint **head) {
for (i = 1;; i++) {
int k;
MountPoint *m;
- char *root;
- bool skip_ro;
path = p = NULL;
@@ -82,7 +79,7 @@ static int mount_points_list_get(MountPoint **head) {
"%*s " /* (1) mount id */
"%*s " /* (2) parent id */
"%*s " /* (3) major:minor */
- "%ms " /* (4) root */
+ "%*s " /* (4) root */
"%ms " /* (5) mount point */
"%*s" /* (6) mount options */
"%*[^-]" /* (7) optional fields */
@@ -91,8 +88,7 @@ static int mount_points_list_get(MountPoint **head) {
"%*s" /* (10) mount source */
"%*s" /* (11) mount options 2 */
"%*[^\n]", /* some rubbish at the end */
- &root,
- &path)) != 2) {
+ &path)) != 1) {
if (k == EOF)
break;
@@ -102,11 +98,6 @@ static int mount_points_list_get(MountPoint **head) {
continue;
}
- /* If we encounter a bind mount, don't try to remount
- * the source dir too early */
- skip_ro = !streq(root, "/");
- free(root);
-
p = cunescape(path);
free(path);
@@ -132,7 +123,6 @@ static int mount_points_list_get(MountPoint **head) {
}
m->path = p;
- m->skip_ro = skip_ro;
LIST_PREPEND(MountPoint, mount_point, *head, m);
}
@@ -449,11 +439,6 @@ static int mount_points_list_remount_read_only(MountPoint **head, bool *changed)
LIST_FOREACH_SAFE(mount_point, m, n, *head) {
- if (m->skip_ro) {
- n_failed++;
- continue;
- }
-
/* Trying to remount read-only */
if (mount(NULL, m->path, NULL, MS_MGC_VAL|MS_REMOUNT|MS_RDONLY, NULL) == 0) {
if (changed)