[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