summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2025-07-06 16:31:00 +0200
committerLudovic Courtès <ludo@gnu.org>2025-07-18 00:57:25 +0200
commit62bf9a7cc79d24e7edc2b56d6dde6e77eebc537e (patch)
tree7b741e39aa7321e51c8c5d041d1111ee5418ff2e
parent951e39718a00cf3f91e8c8d4b4b5661715a27416 (diff)
mapped-devices: Add ‘arguments’ field.
Fixes <https://issues.guix.gnu.org/70826>. This allows users to specify extra arguments specific to the underlying mapped device type. * gnu/system/mapped-devices.scm (<mapped-device>)[arguments]: New field. (device-mapping-service-type): Honor it. * guix/scripts/system.scm (check-mapped-devices): Likewise. * gnu/system/linux-initrd.scm (raw-initrd): Likewise. * doc/guix.texi (Mapped Devices): Document it. Reported-by: 45mg <45mg.writes@gmail.com> Change-Id: Idef5a3e68535c412f13bae9a92c81c49053d4f4a
-rw-r--r--doc/guix.texi4
-rw-r--r--gnu/system/linux-initrd.scm3
-rw-r--r--gnu/system/mapped-devices.scm14
-rw-r--r--guix/scripts/system.scm5
4 files changed, 19 insertions, 7 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 2e1b9378d1..b83579ed6d 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -18637,6 +18637,10 @@ there are several. The format is identical to @var{target}.
@item type
This must be a @code{mapped-device-kind} object, which specifies how
@var{source} is mapped to @var{target}.
+
+@item arguments
+This is a list of arguments specific to @var{type} that are passed to
+its @code{open}, @code{close}, and @code{check} procedures.
@end table
@end deftp
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm
index 72da8e55d3..17c2e6f6bf 100644
--- a/gnu/system/linux-initrd.scm
+++ b/gnu/system/linux-initrd.scm
@@ -229,7 +229,8 @@ upon error."
(targets (mapped-device-targets md))
(type (mapped-device-type md))
(open (mapped-device-kind-open type)))
- (open source targets)))
+ (apply open source targets
+ (mapped-device-arguments md))))
mapped-devices))
(define file-system-scan-commands
diff --git a/gnu/system/mapped-devices.scm b/gnu/system/mapped-devices.scm
index 667a495570..c09a0f1ef1 100644
--- a/gnu/system/mapped-devices.scm
+++ b/gnu/system/mapped-devices.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014-2022, 2024 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014-2022, 2024-2025 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2017, 2018 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2024 Tomas Volf <~@wolfsden.cz>
@@ -51,6 +51,7 @@
mapped-device-target
mapped-device-targets
mapped-device-type
+ mapped-device-arguments
mapped-device-location
mapped-device-kind
@@ -83,6 +84,8 @@
(source mapped-device-source) ;string | list of strings
(targets mapped-device-targets) ;list of strings
(type mapped-device-type) ;<mapped-device-kind>
+ (arguments mapped-device-arguments ;list passed to open/close/check
+ (default '()))
(location mapped-device-location
(default (current-source-location)) (innate)))
@@ -128,13 +131,16 @@ specifications to 'targets'."
'device-mapping
(match-lambda
(($ <mapped-device> source targets
- ($ <mapped-device-type> open close modules))
+ ($ <mapped-device-type> open close modules)
+ arguments)
(shepherd-service
(provision (list (symbol-append 'device-mapping- (string->symbol (string-join targets "-")))))
(requirement '(udev))
(documentation "Map a device node using Linux's device mapper.")
- (start #~(lambda () #$(open source targets)))
- (stop #~(lambda _ (not #$(close source targets))))
+ (start #~(lambda ()
+ #$(apply open source targets arguments)))
+ (stop #~(lambda _
+ (not #$(apply close source targets arguments))))
(modules (append %default-modules modules))
(respawn? #f))))
(description "Map a device node using Linux's device mapper.")))
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index 23eb215561..8a56f1cc63 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -680,9 +680,10 @@ procedure of its type."
(mapped-device-type md))))
;; We expect CHECK to raise an exception with a detailed
;; '&message' if something goes wrong.
- (check md
+ (apply check md
#:needed-for-boot? (needed-for-boot? md)
- #:initrd-modules initrd-modules)))
+ #:initrd-modules initrd-modules
+ (mapped-device-arguments md))))
(operating-system-mapped-devices os)))
(define (check-initrd-modules os)