summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2015-01-07 01:32:13 +0100
committerLennart Poettering <lennart@poettering.net>2015-01-07 01:32:13 +0100
commita7e07206021c6484a8d33c6ee156ecfb5b90534c (patch)
tree86ab96222c65ff0d7732c8affb390b4e0a966c46 /src/shared
parent2339fc936a1f0b1c60cc8a3446a1dbf994c6aaf3 (diff)
util: don't fail recursive bind mounting if we cannot read the mount flags from an obstructed mounted
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/util.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/shared/util.c b/src/shared/util.c
index f01022ed0b..409ccc7eed 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -6980,10 +6980,10 @@ int bind_remount_recursive(const char *prefix, bool ro) {
if (mount(cleaned, cleaned, NULL, MS_BIND|MS_REC, NULL) < 0)
return -errno;
- r = get_mount_flags(prefix, &orig_flags);
- if (r < 0)
- return r;
+ orig_flags = 0;
+ (void) get_mount_flags(cleaned, &orig_flags);
orig_flags &= ~MS_RDONLY;
+
if (mount(NULL, prefix, NULL, orig_flags|MS_BIND|MS_REMOUNT|(ro ? MS_RDONLY : 0), NULL) < 0)
return -errno;
@@ -7004,10 +7004,13 @@ int bind_remount_recursive(const char *prefix, bool ro) {
if (r < 0)
return r;
- r = get_mount_flags(x, &orig_flags);
- if (r < 0)
- return r;
+ /* Try to reuse the original flag set, but
+ * don't care for errors, in case of
+ * obstructed mounts */
+ orig_flags = 0;
+ (void) get_mount_flags(x, &orig_flags);
orig_flags &= ~MS_RDONLY;
+
if (mount(NULL, x, NULL, orig_flags|MS_BIND|MS_REMOUNT|(ro ? MS_RDONLY : 0), NULL) < 0) {
/* Deal with mount points that are