[systemd-devel] [PATCH] fstab-generator: do not check btrfs and xfs
Zbigniew Jędrzejewski-Szmek
zbyszek at in.waw.pl
Sat Jun 28 10:49:07 PDT 2014
fsck.btrfs and fsck.xfs are documented to return immediately, so there is
little sense in running them. Avoids some user confusion and a few lines
in the logs.
https://bugzilla.redhat.com/show_bug.cgi?id=1098799
---
man/systemd-fsck at .service.xml | 15 ++++++++-------
src/fstab-generator/fstab-generator.c | 23 ++++++++++++++++++++++-
2 files changed, 30 insertions(+), 8 deletions(-)
diff --git a/man/systemd-fsck at .service.xml b/man/systemd-fsck at .service.xml
index ee66f3712d..1e9975f426 100644
--- a/man/systemd-fsck at .service.xml
+++ b/man/systemd-fsck at .service.xml
@@ -69,14 +69,15 @@
all other file systems and for the root file system in
the initramfs.</para>
- <para>Those services are started at boot if
- <option>passno</option> in
+ <para>Those services are started at boot for the root
+ file system or when <option>passno</option> in
<filename>/etc/fstab</filename> for the file system is
- set to a value greater than zero. The file system
- check for root is performed before the other file
- systems. Other file systems may be checked in
- parallel, except when they are one the same rotating
- disk.</para>
+ set to a value greater than zero, except for file
+ system types like btrfs and xfs which are checked by
+ the kernel. The check for root is performed before the
+ other file systems. Other file systems may be checked
+ in parallel, except when they are one the same
+ rotating disk.</para>
<para><filename>systemd-fsck</filename> does not know
any details about specific filesystems, and simply
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
index 1256a1ce53..4dad82d425 100644
--- a/src/fstab-generator/fstab-generator.c
+++ b/src/fstab-generator/fstab-generator.c
@@ -165,6 +165,14 @@ static bool mount_in_initrd(struct mntent *me) {
streq(me->mnt_dir, "/usr");
}
+static bool mount_skip_fsck(const char *fstype) {
+ static const char table[] =
+ "btrfs\0"
+ "xfs\0";
+
+ return fstype && nulstr_contains(table, fstype);
+}
+
static int add_mount(
const char *what,
const char *where,
@@ -377,6 +385,7 @@ static int parse_fstab(bool initrd) {
else {
bool noauto, nofail, automount;
const char *post;
+ int check;
noauto = !!hasmntopt(me, "noauto");
nofail = !!hasmntopt(me, "nofail");
@@ -393,6 +402,13 @@ static int parse_fstab(bool initrd) {
else
post = SPECIAL_LOCAL_FS_TARGET;
+ check = me->mnt_passno;
+ if (check && mount_skip_fsck(me->mnt_type)) {
+ log_warning("No need to check %s, type %s. Ignoring fstab passno.",
+ what, me->mnt_type);
+ check = 0;
+ }
+
k = add_mount(what,
where,
me->mnt_type,
@@ -415,6 +431,7 @@ static int parse_fstab(bool initrd) {
static int add_root_mount(void) {
_cleanup_free_ char *what = NULL;
const char *opts;
+ int check;
if (isempty(arg_root_what)) {
log_debug("Could not find a root= entry on the kernel commandline.");
@@ -436,12 +453,16 @@ static int add_root_mount(void) {
else
opts = arg_root_options;
+ check = mount_skip_fsck(arg_root_fstype);
+ if (!check)
+ log_debug("Skipping fsck for root.");
+
log_debug("Found entry what=%s where=/sysroot type=%s", what, strna(arg_root_fstype));
return add_mount(what,
"/sysroot",
arg_root_fstype,
opts,
- 1,
+ check,
false,
false,
false,
--
2.0.0
More information about the systemd-devel
mailing list