Bug 418189

Summary: Plasma freeze when systemd automount NFS shares are not mounted
Product: [Frameworks and Libraries] frameworks-activities-stats Reporter: Xavier Brochard <xavier>
Component: generalAssignee: Ivan Čukić <ivan.cukic>
Status: RESOLVED FIXED    
Severity: major CC: meven.car, nate, plasma-bugs-null, postix
Priority: NOR    
Version First Reported In: 5.67.0   
Target Milestone: ---   
Platform: Neon   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description Xavier Brochard 2020-02-25 17:09:11 UTC
SUMMARY
Plasma freeze when systemd automount NFS shares are not mounted

STEPS TO REPRODUCE
1. create NFS share on a second computer
2. add it in fstab with systemd automount option
3. turn on your computer
4. don't need to access the NFS share, but if you access it just umount it and shutdown the second computer

OBSERVED RESULT
After a while clicking on Kickoff freeze the whole plasmashell (except mouse) and nothing can be done. Turning on the second cmputer solve the problem.

EXPECTED RESULT
Nothing... Plasma shouldn't freeze

SOFTWARE/OS VERSIONS
Operating System: KDE neon 5.18
KDE Plasma Version: 5.18.1
KDE Frameworks Version: 5.67.0
Qt Version: 5.14.1
Kernel Version: 5.3.0-40-generic
OS Type: 64-bit
Processors: 4 × Intel® Core™ i3-4170 CPU @ 3.70GHz
Memory: 7.7 Gio

ADDITIONAL INFORMATION
Same behaviour on Debian Sid with Plasma 5.17
Comment 1 David Edmundson 2020-02-26 00:40:13 UTC
Use of kernel level network mounted shares is not officially supported because problems like this are unavoidable.  Use of KIO will not have the same effect.

However we have been trying to identify the issues anyway and see if we can use workarounds.


Please trigger the freeze and then run 

sudo gdb --pid `pidof plasmashell` 

wait for it to attach

then type "bt" to get the result and paste that
Comment 2 Xavier Brochard 2020-02-26 09:33:05 UTC
I got similar problems with a classical NFS share that was previously mounted (not even in the same session) and is now unmounted or server is shutdown : Plasma looks like frozen (I guess it is just very slow).
Comment 3 Bug Janitor Service 2020-03-12 04:33:15 UTC
Dear Bug Submitter,

This bug has been in NEEDSINFO status with no change for at least
15 days. Please provide the requested information as soon as
possible and set the bug status as REPORTED. Due to regular bug
tracker maintenance, if the bug is still in NEEDSINFO status with
no change in 30 days the bug will be closed as RESOLVED > WORKSFORME
due to lack of needed information.

For more information about our bug triaging procedures please read the
wiki located here:
https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging

If you have already provided the requested information, please
mark the bug as REPORTED so that the KDE team knows that the bug is
ready to be confirmed.

Thank you for helping us make KDE software even better for everyone!
Comment 4 Xavier Brochard 2020-03-12 08:22:30 UTC
I can't reproduce the bug since march updates. Still investigating.
Comment 5 Bug Janitor Service 2020-03-27 04:33:11 UTC
Dear Bug Submitter,

This bug has been in NEEDSINFO status with no change for at least
15 days. Please provide the requested information as soon as
possible and set the bug status as REPORTED. Due to regular bug
tracker maintenance, if the bug is still in NEEDSINFO status with
no change in 30 days the bug will be closed as RESOLVED > WORKSFORME
due to lack of needed information.

For more information about our bug triaging procedures please read the
wiki located here:
https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging

If you have already provided the requested information, please
mark the bug as REPORTED so that the KDE team knows that the bug is
ready to be confirmed.

Thank you for helping us make KDE software even better for everyone!
Comment 6 Xavier Brochard 2020-03-31 01:10:43 UTC
Attaching GDB to plasmashell produce no output (All plasma related dbg packages installed):
-----
Attaching to process 1434
bt
-----

As I wondered in the past if it could come from Baloo indexing I attached GDB to baloo_file and then baloorunner. Here is the outputs, in case :

baloo_file
--------
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
0x00007fed7de01bf9 in __GI___poll (fds=0x5573e17ba390, nfds=5, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
29      ../sysdeps/unix/sysv/linux/poll.c: Aucun fichier ou dossier de ce type.
(gdb) bt
#0  0x00007fed7de01bf9 in __GI___poll (fds=0x5573e17ba390, nfds=5, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007fed7a70a5c9 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007fed7a70a6dc in g_main_context_iteration () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007fed7eb060bc in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007fed7eaa563a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#5  0x00007fed7eaaedb0 in QCoreApplication::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x00005573df5bca3c in main (argc=<optimized out>, argv=<optimized out>) at ./src/file/main.cpp:103
--------

baloorunner
---------
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
0x00007f8643dcdbf9 in __GI___poll (fds=0x7f8630005cd0, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
29      ../sysdeps/unix/sysv/linux/poll.c: Aucun fichier ou dossier de ce type.
(gdb) bt
#0  0x00007f8643dcdbf9 in __GI___poll (fds=0x7f8630005cd0, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007f863ee695c9 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007f863ee696dc in g_main_context_iteration () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007f86447340bc in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007f86446d363a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#5  0x00007f86446dcdb0 in QCoreApplication::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x000055f6dd1d768f in main (argc=<optimized out>, argv=<optimized out>) at ./runners/baloo/baloosearchrunner.cpp:55
------------
Comment 7 Xavier Brochard 2020-03-31 01:11:48 UTC
see BT
Comment 8 Xavier Brochard 2020-03-31 01:14:33 UTC
GDB attached to plasmashell doesn't respond either and nothing can be done to quit except hard killing the GDB process.
Comment 9 Xavier Brochard 2020-04-02 23:44:53 UTC
I manage to have a GDB output on plasmashell process. GDB was very very slow in Konsole. Launched it on a tty.
/home/Partage is the mount point for the NFS share. It was not mounted as it use systemd automount like below (from /etc/fstab) :
--------------
192.168.1.1:/srv/exports/partage        /home/Partage   nfs     defaults,noauto,user,x-systemd.automount        0       0
-------------

GDB output :
----------------
Attaching to process 3445
[New LWP 3456]
[New LWP 3460]
[New LWP 3504]
[New LWP 3549]
[New LWP 3550]
[New LWP 3632]
[New LWP 3651]
[New LWP 3669]
[New LWP 3698]
[New LWP 3806]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
0x00007f0d6db22815 in __GI___lxstat (vers=<optimized out>, name=0x558345a33698 "/home/Partage/devoirs", buf=0x7ffc4f2ad4f0)
    at ../sysdeps/unix/sysv/linux/wordsize-64/lxstat.c:35
35      ../sysdeps/unix/sysv/linux/wordsize-64/lxstat.c: Aucun fichier ou dossier de ce type.
(gdb) bt
#0  0x00007f0d6db22815 in __GI___lxstat (vers=<optimized out>, name=0x558345a33698 "/home/Partage/devoirs", buf=0x7ffc4f2ad4f0)
    at ../sysdeps/unix/sysv/linux/wordsize-64/lxstat.c:35
#1  0x00007f0d6e3beca5 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007f0d6e3bc36f in QFSFileEngine::fileFlags(QFlags<QAbstractFileEngine::FileFlag>) const () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#3  0x00007f0d6e34daaf in QFile::exists() const () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007f0d2ab83193 in ?? () from /usr/lib/x86_64-linux-gnu/libKF5ActivitiesStats.so.1
#5  0x00007f0d2ab839d1 in ?? () from /usr/lib/x86_64-linux-gnu/libKF5ActivitiesStats.so.1
#6  0x00007f0d2ab83eaf in ?? () from /usr/lib/x86_64-linux-gnu/libKF5ActivitiesStats.so.1
#7  0x00007f0d2ab84474 in ?? () from /usr/lib/x86_64-linux-gnu/libKF5ActivitiesStats.so.1
#8  0x00007f0d2ab78162 in KActivities::Stats::ResultModel::ResultModel(KActivities::Stats::Query, QObject*) () from /usr/lib/x86_64-linux-gnu/libKF5ActivitiesStats.so.1
#9  0x00007f0d2adfc88f in RecentUsageModel::refresh (this=<optimized out>, this=<optimized out>, this=<optimized out>, this=<optimized out>)
    at ./applets/kicker/plugin/recentusagemodel.cpp:524
#10 0x00007f0d2ade8b64 in QQmlPrivate::QQmlElement<RecentUsageModel>::QQmlElement (this=0x5583459c7100) at /usr/include/x86_64-linux-gnu/qt5/QtQml/qqmlprivate.h:106
#11 QQmlPrivate::createInto<RecentUsageModel> (memory=0x5583459c7100) at /usr/include/x86_64-linux-gnu/qt5/QtQml/qqmlprivate.h:127
#12 0x00007f0d71d69350 in QQmlType::create(QObject**, void**, unsigned long) const () from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#13 0x00007f0d71dc17e9 in QQmlObjectCreator::createInstance(int, QObject*, bool) () from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#14 0x00007f0d71dc0204 in QQmlObjectCreator::setPropertyBinding(QQmlPropertyData const*, QV4::CompiledData::Binding const*) ()
   from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#15 0x00007f0d71dc0923 in QQmlObjectCreator::setupBindings(bool) () from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#16 0x00007f0d71dc144b in QQmlObjectCreator::populateInstance(int, QObject*, QObject*, QQmlPropertyData const*) () from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#17 0x00007f0d71dc1ea8 in QQmlObjectCreator::createInstance(int, QObject*, bool) () from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#18 0x00007f0d71dc2b70 in QQmlObjectCreator::create(int, QObject*, QQmlInstantiationInterrupt*) () from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#19 0x00007f0d71d4b535 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#20 0x00007f0d71d4bd9c in QQmlEnginePrivate::incubate(QQmlIncubator&, QQmlContextData*) () from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#21 0x00007f0d71d486e7 in QQmlComponent::create(QQmlIncubator&, QQmlContext*, QQmlContext*) () from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#22 0x00007f0d7242e0f4 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Quick.so.5
#23 0x00007f0d7242e280 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Quick.so.5
#24 0x00007f0d7242f32f in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Quick.so.5
#25 0x00007f0d7242f493 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Quick.so.5
#26 0x00007f0d71d30012 in QQmlVMEMetaObject::metaCall(QObject*, QMetaObject::Call, int, void**) () from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#27 0x00007f0d71d44bf2 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#28 0x00007f0d71d42707 in QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&, QVariant const&, QQmlContextData*, QFlags<QQmlPropertyData::WriteFlag>) ()
   from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#29 0x00007f0d71c77b43 in QV4::QObjectWrapper::setProperty(QV4::ExecutionEngine*, QObject*, QQmlPropertyData*, QV4::Value const&) ()
   from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#30 0x00007f0d71c78a5e in QV4::QObjectWrapper::setQmlProperty(QV4::ExecutionEngine*, QQmlContextData*, QObject*, QV4::String*, QV4::QObjectWrapper::RevisionMode, QV4::Value const&) () from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#31 0x00007f0d71c78bab in QV4::QObjectWrapper::virtualPut(QV4::Managed*, QV4::PropertyKey, QV4::Value const&, QV4::Value*) () from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#32 0x00007f0d71bf9d58 in QV4::Lookup::setterFallback(QV4::Lookup*, QV4::ExecutionEngine*, QV4::Value&, QV4::Value const&) () from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#33 0x00007f0d1b947f06 in ?? ()
#34 0x0000000000000000 in ?? ()
---------------------------------------
Comment 10 David Edmundson 2020-04-02 23:59:19 UTC
kactivites-stats :/

Filling in the missing bit of the backtrace from the info we have:

frame 4 will be 

src/resultmodel.cpp:508:                if (item.resource().startsWith(QLatin1Char('/')) && !QFile(item.resource()).exists()) {

It has a check to see if we're on a local file system, but obviously that doesn't work if we have things lying.

Maybe we can add Meven's new KMountPoint::isSlow() on the file path first.
Comment 11 Xavier Brochard 2020-04-03 13:19:59 UTC
Some additional informations to the backtrace :
It was not the first backtrace, which I couldn't copy, but a second one launched three minutes latter. 
The first BT showed a file open on the NFS share. But that file was not opened, as the computer was just started and the NFS server was off. The file was briefly opened (in Gwenview) several hours before and the computer was restarted at least two times since that.

The user can't umount the NFS share, while he mounted him.
Comment 12 Xavier Brochard 2020-04-15 09:44:13 UTC
Similar behaviour with Calligrawords : 
if NFS folder doesn't respond, Calligrawords takes a long time to launch, then the window is empty unless the NFS is reachable.
The Calligrawords recent document list contains only 3 docs, none of them coming from NFS.
Comment 13 Xavier Brochard 2021-09-06 07:42:51 UTC
No more Plasma freeze since Plasma 5.20. Can be closed.
Comment 14 Nate Graham 2021-09-06 23:13:29 UTC
Yay!