summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-07-17 19:24:15 +0200
committerLudovic Courtès <ludo@gnu.org>2015-07-17 19:24:15 +0200
commite51710d1efd406890285907876ad20ec787394b3 (patch)
tree4aa1a9f5cbc11851651037be1580c56c0a69b871
parent97121c2a2189c0880cfb4c9a7eb8efd3b6e1c16e (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.texi8
-rw-r--r--gnu/system.scm14
-rw-r--r--gnu/system/file-systems.scm6
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