From 16529b69f7b1ab33e2b92f99cc3bef17d6f20a25 Mon Sep 17 00:00:00 2001 From: Mathieu Trudel-Lapierre Date: Mon, 27 Sep 2010 14:52:26 +0200 Subject: [PATCH] =?utf8?q?Bug=2030332=20=E2=80=94=20udisks=20does=20not=20?= =?utf8?q?tear=20down=20LUKS=20devices=20when=20the=20slave=20is=20forcibl?= =?utf8?q?y=20removed?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit In the event of the forced removal of a crypto device, use the luks_holder property since it is still available to figure out which underlying cleartext LUKS device to teardown, instead of scanning through all available devices (because the cleartext device already has had its properties cleaned up). Signed-off-by: Martin Pitt --- src/device.c | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/src/device.c b/src/device.c index 0bb6ec5..3602f0f 100644 --- a/src/device.c +++ b/src/device.c @@ -11772,32 +11772,25 @@ force_removal (Device *device, } } - if (device->priv->id_usage != NULL && strcmp (device->priv->id_usage, "crypto") == 0) + if (device->priv->id_usage != NULL && device->priv->luks_holder != NULL && strcmp (device->priv->id_usage, "crypto") == 0) { - GList *devices; - GList *l; + Device *d; /* look for cleartext device */ - devices = daemon_local_get_all_devices (device->priv->daemon); - for (l = devices; l != NULL; l = l->next) + d = daemon_local_find_by_object_path (device->priv->daemon, device->priv->luks_holder); + if (strcmp (d->priv->object_path, device->priv->luks_holder) == 0) { - Device *d = DEVICE (l->data); - if (d->priv->device_is_luks_cleartext && d->priv->luks_cleartext_slave != NULL - && strcmp (d->priv->luks_cleartext_slave, device->priv->object_path) == 0) + /* Check whether it is set up by us */ + if (d->priv->dm_name != NULL && g_str_has_prefix (d->priv->dm_name, "udisks-luks-uuid-")) { - /* Check whether it is set up by us */ - if (d->priv->dm_name != NULL && g_str_has_prefix (d->priv->dm_name, "udisks-luks-uuid-")) - { - - g_print ("**** NOTE: Force luks teardown device %s (cleartext %s)\n", - device->priv->device_file, - d->priv->device_file); + g_print ("**** NOTE: Force luks teardown device %s (cleartext %s)\n", + device->priv->device_file, + d->priv->device_file); - /* Gotcha */ - force_luks_teardown (device, d, callback, user_data); - goto pending; - } + /* Gotcha */ + force_luks_teardown (device, d, callback, user_data); + goto pending; } } } -- 2.7.4