[systemd-devel] [PATCH] Don't skip bind mounts on shutdown
Daniel Drake
dsd at laptop.org
Wed May 30 10:27:19 PDT 2012
Hi,
On Wed, Apr 25, 2012 at 9:46 AM, Daniel Drake <dsd at laptop.org> wrote:
> 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
Any news on this patch?
Thanks
Daniel
> ---
> src/core/umount.c | 19 ++-----------------
> 1 file changed, 2 insertions(+), 17 deletions(-)
>
> diff --git a/src/core/umount.c b/src/core/umount.c
> index 488e1e4..85b7824 100644
> --- a/src/core/umount.c
> +++ b/src/core/umount.c
> @@ -37,7 +37,6 @@
> typedef struct MountPoint {
> char *path;
> dev_t devnum;
> - bool skip_ro;
> LIST_FIELDS (struct MountPoint, mount_point);
> } MountPoint;
>
> @@ -72,8 +71,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;
>
> @@ -81,7 +78,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 */
> @@ -90,8 +87,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;
>
> @@ -101,11 +97,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);
>
> @@ -131,7 +122,6 @@ static int mount_points_list_get(MountPoint **head) {
> }
>
> m->path = p;
> - m->skip_ro = skip_ro;
> LIST_PREPEND(MountPoint, mount_point, *head, m);
> }
>
> @@ -448,11 +438,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)
> --
> 1.7.10
More information about the systemd-devel
mailing list