mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-23 17:34:00 +03:00
mount: add new LazyUnmount= setting for mount units, mapping to umount(8)'s "-l" switch (#3827)
This commit is contained in:
parent
6431c7e216
commit
e520950a03
@ -351,6 +351,19 @@
|
||||
off.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>LazyUnmount=</varname></term>
|
||||
|
||||
<listitem><para>Takes a boolean argument. If true, detach the
|
||||
filesystem from the filesystem hierarchy at time of the unmount
|
||||
operation, and clean up all references to the filesystem as
|
||||
soon as they are not busy anymore.
|
||||
This corresponds with
|
||||
<citerefentry project='man-pages'><refentrytitle>umount</refentrytitle><manvolnum>8</manvolnum></citerefentry>'s
|
||||
<parameter>-l</parameter> switch. Defaults to
|
||||
off.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>DirectoryMode=</varname></term>
|
||||
<listitem><para>Directories of mount points (and any parent
|
||||
|
@ -116,6 +116,7 @@ const sd_bus_vtable bus_mount_vtable[] = {
|
||||
SD_BUS_PROPERTY("ControlPID", "u", bus_property_get_pid, offsetof(Mount, control_pid), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
SD_BUS_PROPERTY("DirectoryMode", "u", bus_property_get_mode, offsetof(Mount, directory_mode), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
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("Result", "s", property_get_result, offsetof(Mount, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
SD_BUS_PROPERTY("UID", "u", NULL, offsetof(Unit, ref_uid), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
SD_BUS_PROPERTY("GID", "u", NULL, offsetof(Unit, ref_gid), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
|
@ -355,6 +355,7 @@ Mount.Type, config_parse_string, 0,
|
||||
Mount.TimeoutSec, config_parse_sec, 0, offsetof(Mount, timeout_usec)
|
||||
Mount.DirectoryMode, config_parse_mode, 0, offsetof(Mount, directory_mode)
|
||||
Mount.SloppyOptions, config_parse_bool, 0, offsetof(Mount, sloppy_options)
|
||||
Mount.LazyUnmount, config_parse_bool, 0, offsetof(Mount, lazy_unmount)
|
||||
EXEC_CONTEXT_CONFIG_ITEMS(Mount)m4_dnl
|
||||
CGROUP_CONTEXT_CONFIG_ITEMS(Mount)m4_dnl
|
||||
KILL_CONTEXT_CONFIG_ITEMS(Mount)m4_dnl
|
||||
|
@ -677,7 +677,8 @@ static void mount_dump(Unit *u, FILE *f, const char *prefix) {
|
||||
"%sOptions: %s\n"
|
||||
"%sFrom /proc/self/mountinfo: %s\n"
|
||||
"%sFrom fragment: %s\n"
|
||||
"%sDirectoryMode: %04o\n",
|
||||
"%sDirectoryMode: %04o\n"
|
||||
"%sLazyUnmount: %s\n",
|
||||
prefix, mount_state_to_string(m->state),
|
||||
prefix, mount_result_to_string(m->result),
|
||||
prefix, m->where,
|
||||
@ -686,7 +687,8 @@ static void mount_dump(Unit *u, FILE *f, const char *prefix) {
|
||||
prefix, p ? strna(p->options) : "n/a",
|
||||
prefix, yes_no(m->from_proc_self_mountinfo),
|
||||
prefix, yes_no(m->from_fragment),
|
||||
prefix, m->directory_mode);
|
||||
prefix, m->directory_mode,
|
||||
prefix, yes_no(m->lazy_unmount));
|
||||
|
||||
if (m->control_pid > 0)
|
||||
fprintf(f,
|
||||
@ -846,6 +848,8 @@ static void mount_enter_unmounting(Mount *m) {
|
||||
m->control_command = m->exec_command + MOUNT_EXEC_UNMOUNT;
|
||||
|
||||
r = exec_command_set(m->control_command, UMOUNT_PATH, m->where, NULL);
|
||||
if (r >= 0 && m->lazy_unmount)
|
||||
r = exec_command_append(m->control_command, "-l", NULL);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
|
@ -71,6 +71,8 @@ struct Mount {
|
||||
|
||||
bool sloppy_options;
|
||||
|
||||
bool lazy_unmount;
|
||||
|
||||
MountResult result;
|
||||
MountResult reload_result;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user