chiark / gitweb /
shutdown: don't attempt read-only mounts in a container
authorLennart Poettering <lennart@poettering.net>
Fri, 24 Aug 2012 20:50:16 +0000 (22:50 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 4 Sep 2012 01:59:04 +0000 (18:59 -0700)
src/core/umount.c

index b9afac7ed5b368392dd68df4d841cdf56992984e..83c9de3e8298635d8c2736a67cd71a932dbe9a2b 100644 (file)
@@ -34,6 +34,7 @@
 #include "umount.h"
 #include "path-util.h"
 #include "util.h"
 #include "umount.h"
 #include "path-util.h"
 #include "util.h"
+#include "virt.h"
 
 typedef struct MountPoint {
         char *path;
 
 typedef struct MountPoint {
         char *path;
@@ -548,11 +549,9 @@ static int dm_points_list_detach(MountPoint **head, bool *changed) {
 int umount_all(bool *changed) {
         int r;
         bool umount_changed;
 int umount_all(bool *changed) {
         int r;
         bool umount_changed;
-
         LIST_HEAD(MountPoint, mp_list_head);
 
         LIST_HEAD_INIT(MountPoint, mp_list_head);
         LIST_HEAD(MountPoint, mp_list_head);
 
         LIST_HEAD_INIT(MountPoint, mp_list_head);
-
         r = mount_points_list_get(&mp_list_head);
         if (r < 0)
                 goto end;
         r = mount_points_list_get(&mp_list_head);
         if (r < 0)
                 goto end;
@@ -572,7 +571,12 @@ int umount_all(bool *changed) {
         if (r <= 0)
                 goto end;
 
         if (r <= 0)
                 goto end;
 
-        r = mount_points_list_remount_read_only(&mp_list_head, changed);
+        /* If we are in a container, don't attempt to read-only mount
+           anything as that brings no real benefits, but might confuse
+           the host, as we remount the superblock here, not the bind
+           mound. */
+        if (detect_container(NULL) <= 0)
+                r = mount_points_list_remount_read_only(&mp_list_head, changed);
 
   end:
         mount_points_list_free(&mp_list_head);
 
   end:
         mount_points_list_free(&mp_list_head);