service: implement FsckPassNo= option

This commit is contained in:
Lennart Poettering 2010-10-20 14:22:23 +02:00
parent dcdf86bbb0
commit 2ba545f1a0
3 changed files with 55 additions and 0 deletions

View File

@ -638,6 +638,33 @@
refers to.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>FsckPassNo=</varname></term>
<listitem><para>Set the fsck passno
priority to use to order this service
in relation to other file system
checking services. This option is only
necessary to fix ordering in relation
to fsck jobs automatically created for
all <filename>/etc/fstab</filename>
entries with a value in the fs_passno
column > 0. As such it should only be
used as option for fsck
services. Almost always it is a better
choice to add explicit ordering
directives via
<varname>After=</varname> or
<varname>Before=</varname>,
instead. For more details see
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>. If
used, pass an integer value in the
same range as
<filename>/etc/fstab</filename>'s
fs_passno column. See
<citerefentry><refentrytitle>fstab</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for details.</para></listitem>
</varlistentry>
</variablelist>
</refsect1>

View File

@ -1002,6 +1002,32 @@ static int config_parse_sysv_priority(
}
#endif
static int config_parse_fsck_passno(
const char *filename,
unsigned line,
const char *section,
const char *lvalue,
const char *rvalue,
void *data,
void *userdata) {
int *passno = data;
int r, i;
assert(filename);
assert(lvalue);
assert(rvalue);
assert(data);
if ((r = safe_atoi(rvalue, &i)) < 0 || i < 0) {
log_error("[%s:%u] Failed to parse fsck pass number, ignoring: %s", filename, line, rvalue);
return 0;
}
*passno = (int) i;
return 0;
}
static DEFINE_CONFIG_PARSE_ENUM(config_parse_kill_mode, kill_mode, KillMode, "Failed to parse kill mode");
static int config_parse_kill_signal(
@ -1781,6 +1807,7 @@ static int load_from_path(Unit *u, const char *path) {
{ "BusName", config_parse_string_printf, &u->service.bus_name, "Service" },
{ "NotifyAccess", config_parse_notify_access, &u->service.notify_access, "Service" },
{ "Sockets", config_parse_service_sockets, &u->service, "Service" },
{ "FsckPassNo", config_parse_fsck_passno, &u->service.fsck_passno, "Service" },
EXEC_CONTEXT_CONFIG_ITEMS(u->service.exec_context, "Service"),
{ "ListenStream", config_parse_listen, &u->socket, "Socket" },

View File

@ -15,3 +15,4 @@ Before=local-fs.target shutdown.target remount-rootfs.service quotacheck.service
Type=oneshot
RemainAfterExit=no
ExecStart=@rootlibexecdir@/systemd-fsck
FsckPassNo=1