From: Lennart Poettering Date: Wed, 7 Jan 2015 00:32:13 +0000 (+0100) Subject: util: don't fail recursive bind mounting if we cannot read the mount flags from an... X-Git-Tag: v219~665 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=a7e07206021c6484a8d33c6ee156ecfb5b90534c;hp=2339fc936a1f0b1c60cc8a3446a1dbf994c6aaf3;ds=sidebyside util: don't fail recursive bind mounting if we cannot read the mount flags from an obstructed mounted --- diff --git a/src/shared/util.c b/src/shared/util.c index f01022ed0..409ccc7ee 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