>From 2cc5b27defbd2b9fd75c70482ac2ecf045b880e3 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Tue, 11 Feb 2020 14:27:19 -0500 Subject: [PATCH 7/8] linux-boot: Filter out file system independent options. This fixes an issue where options such as "defaults", which are understood by the command line program "mount", are not understood by the system call of the same name, which is used in the initial RAM disk. * gnu/system/file-systems.scm (%file-system-independent-mount-options): New variable. (file-system-independent-mount-option?): New predicate. * gnu/build/linux-boot.scm (boot-system): Use the above predicate to filter out system independent mount options. --- gnu/build/linux-boot.scm | 3 ++- gnu/system/file-systems.scm | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/gnu/build/linux-boot.scm b/gnu/build/linux-boot.scm index 063daa4ca4..f77eeecbe3 100644 --- a/gnu/build/linux-boot.scm +++ b/gnu/build/linux-boot.scm @@ -493,7 +493,8 @@ upon error." (or (and=> root-fs file-system-flags) '()))) (root-fs-options (if root-fs - (file-system-options root-fs) + (remove file-system-independent-mount-option? + (file-system-options root-fs)) '())) ;; --root takes precedence over the 'device' field of the root diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm index c205feae70..4f0c5ad99e 100644 --- a/gnu/system/file-systems.scm +++ b/gnu/system/file-systems.scm @@ -46,6 +46,7 @@ file-system-location file-system-type-predicate + file-system-independent-mount-option? file-system-label file-system-label? @@ -567,4 +568,20 @@ system has the given TYPE." (lambda (fs) (string=? (file-system-type fs) type))) +(define %file-system-independent-mount-options + ;; Taken from 'man 8 mount'. + '("async" "atime" "auto" "noatime" "noauto" "context" "defaults" "dev" "nodev" + "diratime" "nodiratime" "dirsync" "exec" "noexec" "group" "iversion" + "noiversion" "mand" "nomand" "_netdev" "nofail" "relatime" "norelatime" + "strictatime" "nostrictatime" "lazytime" "nolazytime" "suid" "nosuid" + "silent" "loud" "owner" "remount" "ro" "rw" "sync" "user" "nouser" "users")) + +(define (file-system-independent-mount-option? option) + "Predicate to check if a option is file system independent." + (let ((option-name (if (pair? option) + (car option) + option))) + (or (string-prefix-ci? "x-" option-name) + (member option-name %file-system-independent-mount-options)))) + ;;; file-systems.scm ends here -- 2.25.0