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
typedef struct MountPoint {
char *path;
dev_t devnum;
typedef struct MountPoint {
char *path;
dev_t devnum;
LIST_FIELDS (struct MountPoint, mount_point);
} MountPoint;
LIST_FIELDS (struct MountPoint, mount_point);
} MountPoint;
for (i = 1;; i++) {
int k;
MountPoint *m;
for (i = 1;; i++) {
int k;
MountPoint *m;
- char *root;
- bool skip_ro;
"%*s " /* (1) mount id */
"%*s " /* (2) parent id */
"%*s " /* (3) major:minor */
"%*s " /* (1) mount id */
"%*s " /* (2) parent id */
"%*s " /* (3) major:minor */
"%ms " /* (5) mount point */
"%*s" /* (6) mount options */
"%*[^-]" /* (7) optional fields */
"%ms " /* (5) mount point */
"%*s" /* (6) mount options */
"%*[^-]" /* (7) optional fields */
"%*s" /* (10) mount source */
"%*s" /* (11) mount options 2 */
"%*[^\n]", /* some rubbish at the end */
"%*s" /* (10) mount source */
"%*s" /* (11) mount options 2 */
"%*[^\n]", /* some rubbish at the end */
- &root,
- &path)) != 2) {
- /* 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);
p = cunescape(path);
free(path);
LIST_PREPEND(MountPoint, mount_point, *head, m);
}
LIST_PREPEND(MountPoint, mount_point, *head, m);
}
LIST_FOREACH_SAFE(mount_point, m, n, *head) {
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)
/* Trying to remount read-only */
if (mount(NULL, m->path, NULL, MS_MGC_VAL|MS_REMOUNT|MS_RDONLY, NULL) == 0) {
if (changed)