diff options
author | Martin Hundebøll <martin@geanix.com> | 2020-05-01 10:20:17 +0200 |
---|---|---|
committer | Martin Hundebøll <martin@geanix.com> | 2020-05-01 13:23:30 +0200 |
commit | c600357ba608b42849c8d56aa75c24c849d6387e (patch) | |
tree | 17d5428c396b22e866b36b34ef00a3fff68e960f /src/core | |
parent | 6eb35fd695679452a7321e0f7ae513e8d0c5926b (diff) | |
download | systemd-c600357ba608b42849c8d56aa75c24c849d6387e.tar.gz |
mount: add ReadWriteOnly property to fail on read-only mounts
Systems where a mount point is expected to be read-write needs a way to
fail mount units that fallback as read-only.
Add a property to allow setting the -w option when calling mount(8).
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/dbus-mount.c | 4 | ||||
-rw-r--r-- | src/core/load-fragment-gperf.gperf.m4 | 1 | ||||
-rw-r--r-- | src/core/mount.c | 6 | ||||
-rw-r--r-- | src/core/mount.h | 2 |
4 files changed, 13 insertions, 0 deletions
diff --git a/src/core/dbus-mount.c b/src/core/dbus-mount.c index b6d61627eb..3ab5ecc425 100644 --- a/src/core/dbus-mount.c +++ b/src/core/dbus-mount.c @@ -51,6 +51,7 @@ const sd_bus_vtable bus_mount_vtable[] = { SD_BUS_PROPERTY("SloppyOptions", "b", bus_property_get_bool, offsetof(Mount, sloppy_options), SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("LazyUnmount", "b", bus_property_get_bool, offsetof(Mount, lazy_unmount), SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("ForceUnmount", "b", bus_property_get_bool, offsetof(Mount, force_unmount), SD_BUS_VTABLE_PROPERTY_CONST), + SD_BUS_PROPERTY("ReadWriteOnly", "b", bus_property_get_bool, offsetof(Mount, read_write_only), SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("Result", "s", property_get_result, offsetof(Mount, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE), SD_BUS_PROPERTY("UID", "u", bus_property_get_uid, offsetof(Unit, ref_uid), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE), SD_BUS_PROPERTY("GID", "u", bus_property_get_gid, offsetof(Unit, ref_gid), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE), @@ -102,6 +103,9 @@ static int bus_mount_set_transient_property( if (streq(name, "ForceUnmount")) return bus_set_transient_bool(u, name, &m->force_unmount, message, flags, error); + if (streq(name, "ReadWriteOnly")) + return bus_set_transient_bool(u, name, &m->read_write_only, message, flags, error); + return 0; } diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4 index 165b9ca9c1..5fd58b379b 100644 --- a/src/core/load-fragment-gperf.gperf.m4 +++ b/src/core/load-fragment-gperf.gperf.m4 @@ -429,6 +429,7 @@ Mount.DirectoryMode, config_parse_mode, 0, Mount.SloppyOptions, config_parse_bool, 0, offsetof(Mount, sloppy_options) Mount.LazyUnmount, config_parse_bool, 0, offsetof(Mount, lazy_unmount) Mount.ForceUnmount, config_parse_bool, 0, offsetof(Mount, force_unmount) +Mount.ReadWriteOnly, config_parse_bool, 0, offsetof(Mount, read_write_only) EXEC_CONTEXT_CONFIG_ITEMS(Mount)m4_dnl CGROUP_CONTEXT_CONFIG_ITEMS(Mount)m4_dnl KILL_CONTEXT_CONFIG_ITEMS(Mount)m4_dnl diff --git a/src/core/mount.c b/src/core/mount.c index 1c4aefd734..70c5ba0c24 100644 --- a/src/core/mount.c +++ b/src/core/mount.c @@ -752,6 +752,7 @@ static void mount_dump(Unit *u, FILE *f, const char *prefix) { "%sSloppyOptions: %s\n" "%sLazyUnmount: %s\n" "%sForceUnmount: %s\n" + "%sReadWriteOnly: %s\n" "%sTimeoutSec: %s\n", prefix, mount_state_to_string(m->state), prefix, mount_result_to_string(m->result), @@ -767,6 +768,7 @@ static void mount_dump(Unit *u, FILE *f, const char *prefix) { prefix, yes_no(m->sloppy_options), prefix, yes_no(m->lazy_unmount), prefix, yes_no(m->force_unmount), + prefix, yes_no(m->read_write_only), prefix, format_timespan(buf, sizeof(buf), m->timeout_usec, USEC_PER_SEC)); if (m->control_pid > 0) @@ -998,6 +1000,8 @@ static void mount_enter_mounting(Mount *m) { r = exec_command_set(m->control_command, MOUNT_PATH, p->what, m->where, NULL); if (r >= 0 && m->sloppy_options) r = exec_command_append(m->control_command, "-s", NULL); + if (r >= 0 && m->read_write_only) + r = exec_command_append(m->control_command, "-w", NULL); if (r >= 0 && p->fstype) r = exec_command_append(m->control_command, "-t", p->fstype, NULL); if (r >= 0 && !isempty(opts)) @@ -1058,6 +1062,8 @@ static void mount_enter_remounting(Mount *m) { "-o", o, NULL); if (r >= 0 && m->sloppy_options) r = exec_command_append(m->control_command, "-s", NULL); + if (r >= 0 && m->read_write_only) + r = exec_command_append(m->control_command, "-w", NULL); if (r >= 0 && p->fstype) r = exec_command_append(m->control_command, "-t", p->fstype, NULL); } else diff --git a/src/core/mount.h b/src/core/mount.h index 07fa05f3ca..a1bc2d71a6 100644 --- a/src/core/mount.h +++ b/src/core/mount.h @@ -59,6 +59,8 @@ struct Mount { bool lazy_unmount; bool force_unmount; + bool read_write_only; + MountResult result; MountResult reload_result; MountResult clean_result; |