diff -urN kde4libs-orig-4.5.90/solid/solid/backends/udisks/udisksdevice.cpp kde4libs-4.5.90/solid/solid/backends/udisks/udisksdevice.cpp --- kde4libs-orig-4.5.90/solid/solid/backends/udisks/udisksdevice.cpp 2010-12-01 22:23:26.000000000 +0000 +++ kde4libs-4.5.90/solid/solid/backends/udisks/udisksdevice.cpp 2011-01-02 01:40:19.739033002 +0000 @@ -158,7 +158,8 @@ return m_udi.endsWith(":media"); } else { return property("DeviceIsPartition").toBool() - || property("IdUsage").toString()=="filesystem"; + || property("IdUsage").toString()=="filesystem" + || property("IdUsage").toString()=="crypto"; } case Solid::DeviceInterface::StorageAccess: @@ -714,7 +715,7 @@ bool UDisksDevice::isDeviceBlacklisted() const { - return property("DevicePresentationHide").toBool() || property("DevicePresentationNopolicy").toBool() || + return property("DevicePresentationHide").toBool() || property("DeviceMountPaths").toStringList().contains("/boot") || property("IdLabel").toString() == "System Reserved" || property("IdUsage").toString().isEmpty(); diff -urN kde4libs-orig-4.5.90/solid/solid/backends/udisks/udisksstorageaccess.cpp kde4libs-4.5.90/solid/solid/backends/udisks/udisksstorageaccess.cpp --- kde4libs-orig-4.5.90/solid/solid/backends/udisks/udisksstorageaccess.cpp 2010-12-22 09:56:05.000000000 +0000 +++ kde4libs-4.5.90/solid/solid/backends/udisks/udisksstorageaccess.cpp 2011-01-01 21:52:23.839033000 +0000 @@ -149,8 +149,12 @@ } else if (m_teardownInProgress) { - if (isLuksDevice()) //unlocked device, lock it - callCryptoTeardown(); + if (isLuksDevice()) + { + callCryptoTeardown(); //unlocked device, lock it + } else if (m_device->property("DeviceIsLuksCleartext").toBool()) { + callCryptoTeardown(true); // Lock crypted parent + } m_teardownInProgress = false; m_device->broadcastActionDone("teardown"); @@ -333,10 +337,12 @@ SLOT(slotDBusError(const QDBusError &))); } -bool UDisksStorageAccess::callCryptoTeardown() +bool UDisksStorageAccess::callCryptoTeardown(bool actOnParent) { QDBusConnection c = QDBusConnection::systemBus(); - QDBusMessage msg = QDBusMessage::createMethodCall(UD_DBUS_SERVICE, m_device->udi(), UD_DBUS_INTERFACE_DISKS_DEVICE, "LuksLock"); + QDBusMessage msg = QDBusMessage::createMethodCall(UD_DBUS_SERVICE, + actOnParent?(m_device->property("LuksCleartextSlave").value().path()):m_device->udi(), + UD_DBUS_INTERFACE_DISKS_DEVICE, "LuksLock"); msg << QStringList(); // options, unused now return c.callWithCallback(msg, this, diff -urN kde4libs-orig-4.5.90/solid/solid/backends/udisks/udisksstorageaccess.h kde4libs-4.5.90/solid/solid/backends/udisks/udisksstorageaccess.h --- kde4libs-orig-4.5.90/solid/solid/backends/udisks/udisksstorageaccess.h 2010-11-05 10:48:34.000000000 +0000 +++ kde4libs-4.5.90/solid/solid/backends/udisks/udisksstorageaccess.h 2011-01-01 21:25:12.209033002 +0000 @@ -82,7 +82,7 @@ bool requestPassphrase(); void callCryptoSetup( const QString & passphrase ); - bool callCryptoTeardown(); + bool callCryptoTeardown( bool actOnParent=false ); QString generateReturnObjectPath();