diff --git a/src/linux/udisks2api.cpp b/src/linux/udisks2api.cpp index 52c2ced..3752f4a 100644 --- a/src/linux/udisks2api.cpp +++ b/src/linux/udisks2api.cpp @@ -250,12 +250,24 @@ void UDisks2Api::ejectDrive(const QString &device) if (devpath.isEmpty()) return; - _unmountDrive(devpath); - ::sync(); - QDBusInterface blockdevice("org.freedesktop.UDisks2", devpath, "org.freedesktop.UDisks2.Block", QDBusConnection::systemBus()); + + bool hintAuto = blockdevice.property("HintAuto").toBool(); + if (hintAuto) + { + qDebug() << "Deactivating auto-mount for" << device; + blockdevice.setProperty("HintAuto", false); + } + + /* Force kernel to rescan partitions now. Otherwise it may still be doing it + while we are ejecting, resulting in read IO errors in dmesg */ + QVariantMap rescanOptions; + blockdevice.call("Rescan", rescanOptions); + + _unmountDrive(devpath); QString drivepath = blockdevice.property("Drive").value().path(); + if (!drivepath.isEmpty() && drivepath != "/") { QDBusInterface drive("org.freedesktop.UDisks2", drivepath,