diff --git a/src/corelib/io/qstorageinfo_linux.cpp b/src/corelib/io/qstorageinfo_linux.cpp index c5cc9c60520..a08e53daa16 100644 --- a/src/corelib/io/qstorageinfo_linux.cpp +++ b/src/corelib/io/qstorageinfo_linux.cpp @@ -276,14 +276,21 @@ QList QStorageInfoPrivate::mountedVolumes() }; QList volumes; - for (MountInfo &info : infos) { + volumes.reserve(infos.size()); + for (auto it = infos.begin(); it != infos.end(); ++it) { + MountInfo &info = *it; + // Scan the later lines to see if any is a parent to this + auto isParent = [&info](const MountInfo &maybeParent) { + return isParentOf(maybeParent.mountPoint, info.mountPoint); + }; + if (std::find_if(it + 1, infos.end(), isParent) != infos.end()) + continue; + const auto infoStDev = info.stDev; QStorageInfoPrivate d(std::move(info)); d.retrieveVolumeInfo(); if (d.bytesTotal <= 0 && d.rootPath != u'/') continue; - if (infoStDev != deviceIdForPath(d.rootPath)) - continue; // probably something mounted over this mountpoint d.name = labelForDevice(d, infoStDev); volumes.emplace_back(QStorageInfo(*new QStorageInfoPrivate(std::move(d)))); }