Re: [systemd-devel] [PATCH] Don't skip bind mounts on shutdown

2012-05-30 Thread Daniel Drake
Hi,

On Wed, Apr 25, 2012 at 9:46 AM, Daniel Drake d...@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
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


[systemd-devel] [PATCH] Don't skip bind mounts on shutdown

2012-04-25 Thread Daniel Drake
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
---
 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

___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel