]> err.no Git - util-linux/commitdiff
fsck: honor nofail option in fsck
authorLudwig Nussel <ludwig.nussel@suse.de>
Fri, 27 Nov 2009 09:15:53 +0000 (10:15 +0100)
committerKarel Zak <kzak@redhat.com>
Tue, 1 Dec 2009 11:15:10 +0000 (12:15 +0100)
analog to mount gracefully ignoring non existing devices if the "nofail"
option is specified in fstab, also have fsck -A skip them. This way it's
possible to have devices optionally not available during boot but still
have them fsck'd if they are there.

Signed-off-by: Ludwig Nussel <ludwig.nussel@suse.de>
fsck/fsck.c

index e11bbe9bdb1e475634d426ff8a20f6ea09c72a5a..66c027c7eb2602acc0fba938718a4bc5797698b1 100644 (file)
@@ -847,6 +847,22 @@ static int fs_match(struct fs_info *fs, struct fs_type_compile *cmp)
        return (cmp->negate ? !ret : ret);
 }
 
+/*
+ * Check if a device exists
+ */
+static int device_exists(const char *device)
+{
+       struct stat st;
+
+       if (stat(device, &st) == -1)
+               return 0;
+
+       if (!S_ISBLK(st.st_mode))
+               return 0;
+
+       return 1;
+}
+
 /* Check if we should ignore this filesystem. */
 static int ignore(struct fs_info *fs)
 {
@@ -869,6 +885,15 @@ static int ignore(struct fs_info *fs)
                return 1;
        }
 
+       /*
+        * ignore devices that don't exist and have the "nofail" mount option
+        */
+       if (!device_exists(fs->device) && opt_in_list("nofail", fs->opts)) {
+               if (verbose)
+                       printf(_("%s: skipping nonexistent device\n"), fs->device);
+               return 1;
+       }
+
        interpret_type(fs);
 
        /*