diff options
author | Ludovic Courtès <ludo@gnu.org> | 2015-07-17 19:24:15 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2015-07-17 19:24:15 +0200 |
commit | e51710d1efd406890285907876ad20ec787394b3 (patch) | |
tree | 4aa1a9f5cbc11851651037be1580c56c0a69b871 | |
parent | 97121c2a2189c0880cfb4c9a7eb8efd3b6e1c16e (diff) |
file-systems: Add a 'dependencies' field to <file-system>.
* gnu/system/file-systems.scm (<file-system>)[dependencies]: New field.
* gnu/system.scm (other-file-system-services)[requirements]: Honor
'file-system-dependencies'.
* doc/guix.texi (File Systems): Document it.
-rw-r--r-- | doc/guix.texi | 8 | ||||
-rw-r--r-- | gnu/system.scm | 14 | ||||
-rw-r--r-- | gnu/system/file-systems.scm | 6 |
3 files changed, 23 insertions, 5 deletions
diff --git a/doc/guix.texi b/doc/guix.texi index 2f8c52c8b6..0d24b12f8c 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -5027,6 +5027,14 @@ errors before being mounted. @item @code{create-mount-point?} (default: @code{#f}) When true, the mount point is created if it does not exist yet. +@item @code{dependencies} (default: @code{'()}) +This is a list of @code{<file-system>} objects representing file systems +that must be mounted before (and unmounted after) this one. + +As an example, consider a hierarchy of mounts: @file{/sys/fs/cgroup} is +a dependency of @file{/sys/fs/cgroup/cpu} and +@file{/sys/fs/cgroup/memory}. + @end table @end deftp diff --git a/gnu/system.scm b/gnu/system.scm index ed37c320f7..cf9ee123c7 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -228,10 +228,16 @@ as 'needed-for-boot'." (operating-system-mapped-devices os))) (define (requirements fs) - (map (lambda (md) - (symbol-append 'device-mapping- - (string->symbol (mapped-device-target md)))) - (device-mappings fs))) + ;; XXX: Fiddling with dmd service names is not nice. + (append (map (lambda (fs) + (symbol-append 'file-system- + (string->symbol + (file-system-mount-point fs)))) + (file-system-dependencies fs)) + (map (lambda (md) + (symbol-append 'device-mapping- + (string->symbol (mapped-device-target md)))) + (device-mappings fs)))) (sequence %store-monad (map (lambda (fs) diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm index 0f3e6fbcaa..a3230dce48 100644 --- a/gnu/system/file-systems.scm +++ b/gnu/system/file-systems.scm @@ -37,6 +37,7 @@ file-system-options file-system-check? file-system-create-mount-point? + file-system-dependencies file-system->spec string->uuid @@ -97,7 +98,10 @@ (check? file-system-check? ; Boolean (default #t)) (create-mount-point? file-system-create-mount-point? ; Boolean - (default #f))) + (default #f)) + (dependencies file-system-dependencies ; list of strings (mount + ; points depended on) + (default '()))) (define-inlinable (file-system-needed-for-boot? fs) "Return true if FS has the 'needed-for-boot?' flag set, or if it's the root |