From cb060af5ea56427e1fd63ced5f9c9edd3ae61f76 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Tue, 11 Feb 2020 14:27:19 -0500 Subject: [PATCH 7/9] gnu: 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 f65e942ebc..8e55797549 100644 --- a/gnu/build/linux-boot.scm +++ b/gnu/build/linux-boot.scm @@ -490,7 +490,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-options takes precedence over the 'options' field of the ;; root record. diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm index 6dc0e6814e..2c3c159d04 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? @@ -565,4 +566,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.23.0