From: Luca Boccassi Date: Tue, 14 Jul 2020 14:07:21 +0000 (+0100) Subject: dm-util: use CRYPT_DEACTIVATE_DEFERRED instead of ioctl X-Git-Tag: v246-rc2~20^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=536879480a5ec4d4be10941aa837791ddd68edc2;p=thirdparty%2Fsystemd.git dm-util: use CRYPT_DEACTIVATE_DEFERRED instead of ioctl --- diff --git a/src/home/homework-luks.c b/src/home/homework-luks.c index 99cab0929e5..ba47688b0f1 100644 --- a/src/home/homework-luks.c +++ b/src/home/homework-luks.c @@ -1295,7 +1295,7 @@ int home_activate_luks( loop_device_relinquish(setup.loop); - r = dm_deferred_remove(setup.dm_name); + r = crypt_deactivate_by_name(NULL, setup.dm_name, CRYPT_DEACTIVATE_DEFERRED); if (r < 0) log_warning_errno(r, "Failed to relinquish DM device, ignoring: %m"); diff --git a/src/shared/dissect-image.c b/src/shared/dissect-image.c index fdf4d481f65..3641412dd1f 100644 --- a/src/shared/dissect-image.c +++ b/src/shared/dissect-image.c @@ -1437,7 +1437,7 @@ int decrypted_image_relinquish(DecryptedImage *d) { if (p->relinquished) continue; - r = dm_deferred_remove(p->name); + r = crypt_deactivate_by_name(NULL, p->name, CRYPT_DEACTIVATE_DEFERRED); if (r < 0) return log_debug_errno(r, "Failed to mark %s for auto-removal: %m", p->name); diff --git a/src/shared/dm-util.c b/src/shared/dm-util.c index d817e5b0e5e..9ffa4270273 100644 --- a/src/shared/dm-util.c +++ b/src/shared/dm-util.c @@ -5,37 +5,3 @@ #include "dm-util.h" #include "fd-util.h" #include "string-util.h" - -int dm_deferred_remove(const char *name) { - - struct dm_ioctl dm = { - .version = { - DM_VERSION_MAJOR, - DM_VERSION_MINOR, - DM_VERSION_PATCHLEVEL - }, - .data_size = sizeof(dm), - .flags = DM_DEFERRED_REMOVE, - }; - - _cleanup_close_ int fd = -1; - - assert(name); - - /* Unfortunately, libcryptsetup doesn't provide a proper API for this, hence call the ioctl() - * directly. */ - - if (strlen(name) >= sizeof(dm.name)) - return -ENODEV; /* A device with a name longer than this cannot possibly exist */ - - fd = open("/dev/mapper/control", O_RDWR|O_CLOEXEC); - if (fd < 0) - return -errno; - - strncpy_exact(dm.name, name, sizeof(dm.name)); - - if (ioctl(fd, DM_DEV_REMOVE, &dm)) - return -errno; - - return 0; -} diff --git a/src/shared/dm-util.h b/src/shared/dm-util.h index 6c78bfe75b7..3bae3d43cb8 100644 --- a/src/shared/dm-util.h +++ b/src/shared/dm-util.h @@ -1,4 +1,2 @@ /* SPDX-License-Identifier: LGPL-2.1+ */ #pragma once - -int dm_deferred_remove(const char *name);