From 5cd586c09e381a530da9abdb86e5cff3e2bc6caa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Tempel?= Date: Thu, 3 Aug 2017 21:44:15 +0200 Subject: init: add cryptdiscards option When enabled allows the use of discard (TRIM) requests for the device. See cryptsetup(1) for more information. --- initramfs-init.in | 7 +++++-- nlplug-findfs.c | 8 +++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/initramfs-init.in b/initramfs-init.in index 9568a59..be7b1c3 100755 --- a/initramfs-init.in +++ b/initramfs-init.in @@ -263,8 +263,8 @@ setup_nbd() { set -- $(cat /proc/cmdline) myopts="alpine_dev autodetect autoraid chart cryptroot cryptdm cryptheader cryptoffset - debug_init dma init_args keep_apk_new modules ovl_dev pkgs quiet root_size root - usbdelay ip alpine_repo apkovl alpine_start splash blacklist + cryptdiscards debug_init dma init_args keep_apk_new modules ovl_dev pkgs quiet + root_size root usbdelay ip alpine_repo apkovl alpine_start splash blacklist overlaytmpfs rootfstype rootflags nbd resume" for opt; do @@ -355,6 +355,9 @@ eend 0 if [ -n "$KOPT_cryptroot" ]; then cryptopts="-c ${KOPT_cryptroot}" + if [ "$KOPT_cryptdiscards" = "yes" ]; then + cryptopts="$cryptopts -D" + fi if [ -n "$KOPT_cryptdm" ]; then cryptopts="$cryptopts -m ${KOPT_cryptdm}" fi diff --git a/nlplug-findfs.c b/nlplug-findfs.c index f23d0dd..be525cc 100644 --- a/nlplug-findfs.c +++ b/nlplug-findfs.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -317,6 +318,7 @@ struct cryptconf { size_t payload_offset; pthread_t tid; pthread_mutex_t mutex; + uint32_t flags; }; struct ueventconf { @@ -605,7 +607,8 @@ static void *cryptsetup_thread(void *data) pthread_mutex_lock(&c->crypt.mutex); r = crypt_activate_by_passphrase(cd, c->crypt.data.name, CRYPT_ANY_SLOT, - pass, strlen(pass), 0); + pass, strlen(pass), + c->crypt.flags); pthread_mutex_unlock(&c->crypt.mutex); memset(pass, 0, sizeof(pass)); /* wipe pass after use */ @@ -1240,6 +1243,9 @@ int main(int argc, char *argv[]) case 'n': not_found_is_ok = 1; break; + case 'D': + conf.crypt.flags |= CRYPT_ACTIVATE_ALLOW_DISCARDS; + break; case 'd': dodebug = 1; break; -- cgit v1.2.3