From: Lennart Poettering Date: Wed, 20 Oct 2010 12:22:23 +0000 (+0200) Subject: service: implement FsckPassNo= option X-Git-Tag: v12~198 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=2ba545f1a098fc5621d4d1f1049af2f40793819a service: implement FsckPassNo= option --- diff --git a/man/systemd.service.xml b/man/systemd.service.xml index 4473c3d94..2db146b71 100644 --- a/man/systemd.service.xml +++ b/man/systemd.service.xml @@ -638,6 +638,33 @@ refers to. + + FsckPassNo= + 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 /etc/fstab + 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 + After= or + Before=, + instead. For more details see + systemd.unit5. If + used, pass an integer value in the + same range as + /etc/fstab's + fs_passno column. See + fstab5 + for details. + + diff --git a/src/load-fragment.c b/src/load-fragment.c index 2b5c8e70d..0502fc45d 100644 --- a/src/load-fragment.c +++ b/src/load-fragment.c @@ -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" }, diff --git a/units/fsck-root.service.in b/units/fsck-root.service.in index 987503a2b..8ddbda91a 100644 --- a/units/fsck-root.service.in +++ b/units/fsck-root.service.in @@ -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