Bug 465011 - plasmashell freezes for some time after accessing an NFSv4 share with crossmounts
Summary: plasmashell freezes for some time after accessing an NFSv4 share with crossmo...
Status: RESOLVED DUPLICATE of bug 451876
Alias: None
Product: plasmashell
Classification: Plasma
Component: generic-performance (show other bugs)
Version: 5.26.5
Platform: Gentoo Packages Linux
: NOR normal
Target Milestone: 1.0
Assignee: Plasma Bugs List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-01-29 21:31 UTC by Till Schäfer
Modified: 2023-06-06 21:14 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Till Schäfer 2023-01-29 21:31:12 UTC
I have a NFSv4 (4.2, krb5i) share mounted on my system via fstab which points to a directory with several different mounted filesystems (about 10). Whenever I access that directory the first time, crossmount causes each filesystem to be mounted separately on the client. In this situation plasma will freeze for about a minute until I can continue my work. After a minute or so I get some notifications form Plasma Desktop Worksapce "filesystem is not responding" for each crossmount.

The interesting thing is, that I can continue to work on that crossmounts from terminal. E.g. an 'ls' on that NFS share returns after a very short time, but causes plasma to freezes for much longer. While plasma is frozen I can access the shares content on the terminal without any hassle. However, KDE applikations like krusader, dolphin, or the file open dialog are also blocking.

I have attached wireshark to my network interface, and there is no package loss or something like that happening. I can see many plasma related requests to the NFS server, e.g. querying for the existence of some special files or folders in the crossmounts like '.directory'. Then the network requests just stop when plasma freezes and continue after some time without anything in between. 

My guess is, that plasma somehow tries to gather information about new mounts and does so in a blocking fashion.  While plasma was frozen, I have attached a debugger and did a stack trace (see below)  which points to KFilePlacesModelPrivate::deviceAdded and then KBookmark related stuff. 

/etc/export of server:
/srv/nfs/ 192.168.2.0/25(async,rw,no_subtree_check,crossmnt,sec=krb5:krb5i:krb5p,fsid=root)

fstab of client:
nfs.some.domain:/data                        /data/server/dfs        nfs4    _netdev,rw,vers=4.2,acl,sec=krb5i,noatime       0 0

Accessing that share causes the subsequent mount of subshares (crossmnt). 

nfs.some.domain:/data on /data/server/dfs type nfs4 (rw,noatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5i,clientaddr=192.168.2.72,local_lock=none,addr=192.168.2.20,_netdev)
nfs.some.domain:/userfiles/till on /data/server/userfiles type nfs4 (rw,noatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5i,clientaddr=192.168.2.72,local_lock=none,addr=192.168.2.20,_netdev)
nfs.some.domain:/till_data on /home/till/data type nfs4 (rw,noatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5i,clientaddr=192.168.2.72,local_lock=none,addr=192.168.2.20,_netdev)
nfs.some.domain:/data/ebooks on /home/till/ebooks type nfs4 (rw,noatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5i,clientaddr=192.168.2.72,local_lock=none,addr=192.168.2.20,_netdev)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=2453388k,nr_inodes=613347,mode=700,uid=1000,gid=1000)
portal on /run/user/1000/doc type fuse.portal (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
nfs.some.domain:/data/movie on /data/server/dfs/movie type nfs4 (rw,noatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5i,clientaddr=192.168.2.72,local_lock=none,addr=192.168.2.20)
nfs.some.domain:/data/backup on /data/server/dfs/backup type nfs4 (rw,noatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5i,clientaddr=192.168.2.72,local_lock=none,addr=192.168.2.20)
nfs.some.domain:/data/bilder on /data/server/dfs/bilder type nfs4 (rw,noatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5i,clientaddr=192.168.2.72,local_lock=none,addr=192.168.2.20)
nfs.some.domain:/data/download on /data/server/dfs/download type nfs4 (rw,noatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5i,clientaddr=192.168.2.72,local_lock=none,addr=192.168.2.20)
nfs.some.domain:/data/ebooks on /data/server/dfs/ebooks type nfs4 (rw,noatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5i,clientaddr=192.168.2.72,local_lock=none,addr=192.168.2.20)
nfs.some.domain:/data/familie on /data/server/dfs/familie type nfs4 (rw,noatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5i,clientaddr=192.168.2.72,local_lock=none,addr=192.168.2.20)
nfs.some.domain:/data/musik on /data/server/dfs/musik type nfs4 (rw,noatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5i,clientaddr=192.168.2.72,local_lock=none,addr=192.168.2.20)
nfs.some.domain:/data/scan on /data/server/dfs/scan type nfs4 (rw,noatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5i,clientaddr=192.168.2.72,local_lock=none,addr=192.168.2.20)
nfs.some.domain:/data/software on /data/server/dfs/software type nfs4 (rw,noatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5i,clientaddr=192.168.2.72,local_lock=none,addr=192.168.2.20)
nfs.some.domain:/data/wg on /data/server/dfs/wg type nfs4 (rw,noatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5i,clientaddr=192.168.2.72,local_lock=none,addr=192.168.2.20)


Stacktrace of plasmashell:
(gdb) bt
#0  0x00007f5c4b66a64b in QDomNode::operator=(QDomNode const&) (this=0x7fff37801bd8, n=...)
    at /usr/lib/gcc/x86_64-pc-linux-gnu/11/include/g++-v11/bits/atomic_base.h:392
#1  0x00007f5c46c7cc6b in KBookmark::operator=(KBookmark&&) (this=0x7fff37801bd8)
    at /var/tmp/portage/kde-frameworks/kbookmarks-5.102.0/work/kbookmarks-5.102.0/src/kbookmark.h:27
#2  KBookmarkGroup::indexOf(KBookmark const&) const (this=this@entry=0x7fff37801c20, child=...)
    at /var/tmp/portage/kde-frameworks/kbookmarks-5.102.0/work/kbookmarks-5.102.0/src/kbookmark.cpp:139
#3  0x00007f5c46c7db6e in KBookmark::address() const (this=this@entry=0x7fff37801cc0)
    at /var/tmp/portage/kde-frameworks/kbookmarks-5.102.0/work/kbookmarks-5.102.0/src/kbookmark.cpp:491
#4  0x00007f5c46d67dde in KFilePlacesModelPrivate::loadBookmarkList() (this=this@entry=0x55e89e0ee9e0)
    at /var/tmp/portage/kde-frameworks/kio-5.102.0/work/kio-5.102.0/src/filewidgets/kfileplacesmodel.cpp:924
#5  0x00007f5c46d6815d in KFilePlacesModelPrivate::reloadBookmarks() (this=this@entry=0x55e89e0ee9e0)
    at /var/tmp/portage/kde-frameworks/kio-5.102.0/work/kio-5.102.0/src/filewidgets/kfileplacesmodel.cpp:808
#6  0x00007f5c46d69d65 in KFilePlacesModelPrivate::deviceAdded(QString const&) (udi=..., this=0x55e89e0ee9e0)
    at /var/tmp/portage/kde-frameworks/kio-5.102.0/work/kio-5.102.0/src/filewidgets/kfileplacesmodel.cpp:783
#7  operator() (device=..., __closure=<optimized out>)
    at /var/tmp/portage/kde-frameworks/kio-5.102.0/work/kio-5.102.0/src/filewidgets/kfileplacesmodel.cpp:761
#8  QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<const QString&>, void, KFilePlacesModelPrivate::initDeviceList()::<lambda(const QString&)> >::call (arg=<optimized out>, f=<optimized out>) at /usr/include/qt5/QtCore/qobjectdefs_impl.h:146
#9  QtPrivate::Functor<KFilePlacesModelPrivate::initDeviceList()::<lambda(const QString&)>, 1>::call<QtPrivate::List<QString const&>, void> (arg=<optimized out>, f=<optimized out>) at /usr/include/qt5/QtCore/qobjectdefs_impl.h:256
#10 QtPrivate::QFunctorSlotObject<KFilePlacesModelPrivate::initDeviceList()::<lambda(const QString&)>, 1, QtPrivate::List<const QString&>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *)
    (which=<optimized out>, this_=<optimized out>, r=<optimized out>, a=<optimized out>, ret=<optimized out>)
    at /usr/include/qt5/QtCore/qobjectdefs_impl.h:443
#11 0x00007f5c4c6a7756 in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7fff37801f30, r=0x55e89e0ef260, this=0x55e89df61e30)
    at /var/tmp/portage/dev-qt/qtcore-5.15.8-r2/work/qtbase-everywhere-src-5.15.8/include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#12 doActivate<false>(QObject*, int, void**) (sender=0x55e89e0ff640, signal_index=3, argv=0x7fff37801f30)
    at /var/tmp/portage/dev-qt/qtcore-5.15.8-r2/work/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qobject.cpp:3923
#13 0x00007f5c4c6a156f in QMetaObject::activate(QObject*, QMetaObject const*, int, void**)
    (sender=<optimized out>, m=m@entry=0x7f5c4e51fc80 <Solid::DeviceNotifier::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fff37801f30)
    at /var/tmp/portage/dev-qt/qtcore-5.15.8-r2/work/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qobject.cpp:3983
#14 0x00007f5c4e488e92 in Solid::DeviceNotifier::deviceAdded(QString const&) (this=<optimized out>, _t1=<optimized out>)
    at /var/tmp/portage/kde-frameworks/solid-5.102.0/work/solid-5.102.0_build/src/solid/KF5Solid_autogen/include/moc_devicenotifier.cpp:144
#15 0x00007f5c4c6a779c in doActivate<false>(QObject*, int, void**) (sender=0x55e89df7fab0, signal_index=3, argv=0x7fff37802030)
    at /var/tmp/portage/dev-qt/qtcore-5.15.8-r2/work/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qobject.cpp:3935
#16 0x00007f5c4c6a156f in QMetaObject::activate(QObject*, QMetaObject const*, int, void**)
    (sender=sender@entry=0x55e89df7fab0, m=m@entry=0x7f5c4e51f4a0 <Solid::Ifaces::DeviceManager::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fff37802030)
    at /var/tmp/portage/dev-qt/qtcore-5.15.8-r2/work/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qobject.cpp:3983
#17 0x00007f5c4e475562 in Solid::Ifaces::DeviceManager::deviceAdded(QString const&) (this=this@entry=0x55e89df7fab0, _t1=...)
    at /var/tmp/portage/kde-frameworks/solid-5.102.0/work/solid-5.102.0_build/src/solid/KF5Solid_autogen/3PYKXLVNWF/moc_devicemanager.cpp:144
#18 0x00007f5c4e4db9a0 in Solid::Backends::Fstab::FstabManager::_k_updateDeviceList() (this=this@entry=0x55e89df7fab0)
    at /var/tmp/portage/kde-frameworks/solid-5.102.0/work/solid-5.102.0/src/solid/devices/backends/fstab/fstabmanager.cpp:117
#19 0x00007f5c4e4dbf64 in Solid::Backends::Fstab::FstabManager::onMtabChanged() (this=0x55e89df7fab0)
    at /var/tmp/portage/kde-frameworks/solid-5.102.0/work/solid-5.102.0/src/solid/devices/backends/fstab/fstabmanager.cpp:132
#20 0x00007f5c4c6a7756 in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7fff378021d0, r=0x55e89df7fab0, this=0x55e89f49f2f0)
    at /var/tmp/portage/dev-qt/qtcore-5.15.8-r2/work/qtbase-everywhere-src-5.15.8/include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#21 doActivate<false>(QObject*, int, void**)
=3, argv=0x7fff378021d0) at /var/tmp/portage/dev-qt/qtcore-5.15.8-r2/work/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qobject.cpp:3923
#22 0x00007f5c4c6a7756 in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7fff37802300, r=0x7f5c4e522180 <Solid::Backends::Fstab::(anonymous namespace)::Q_QGS_globalFstabWatcher::innerFunction()::holder>, this=0x55e89e028ee0) at /var/tmp/portage/dev-qt/qtcore-5.15.8-r2/work/qtbase-everywhere-src-5.15.8/include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#23 doActivate<false>(QObject*, int, void**) (sender=0x55e89e99ddc0, signal_index=3, argv=0x7fff37802300) at /var/tmp/portage/dev-qt/qtcore-5.15.8-r2/work/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qobject.cpp:3923
#24 0x00007f5c4c6a156f in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=sender@entry=0x55e89e99ddc0, m=m@entry=0x7f5c4c9491c0 <QSocketNotifier::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fff37802300) at /var/tmp/portage/dev-qt/qtcore-5.15.8-r2/work/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qobject.cpp:3983
#25 0x00007f5c4c6ab1dd in QSocketNotifier::activated(QSocketDescriptor, QSocketNotifier::Type, QSocketNotifier::QPrivateSignal) (this=this@entry=0x55e89e99ddc0, _t1=..., _t2=<optimized out>, _t3=...) at .moc/moc_qsocketnotifier.cpp:178
#26 0x00007f5c4c6ab9db in QSocketNotifier::event(QEvent*) (this=0x55e89e99ddc0, e=0x7fff37802410) at /var/tmp/portage/dev-qt/qtcore-5.15.8-r2/work/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qsocketnotifier.cpp:302
#27 0x00007f5c4d32208e in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=<optimized out>, receiver=0x55e89e99ddc0, e=0x7fff37802410) at /var/tmp/portage/dev-qt/qtwidgets-5.15.8-r1/work/qtbase-everywhere-src-5.15.8/src/widgets/kernel/qapplication.cpp:3640
#28 0x00007f5c4c6746b8 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x55e89e99ddc0, event=0x7fff37802410) at /var/tmp/portage/dev-qt/qtcore-5.15.8-r2/work/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qcoreapplication.cpp:1064
#29 0x00007f5c4c6c7f1e in socketNotifierSourceDispatch(GSource*, GSourceFunc, gpointer) (source=0x55e89d550ac0) at /var/tmp/portage/dev-qt/qtcore-5.15.8-r2/work/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qeventdispatcher_glib.cpp:107
#30 0x00007f5c4a8565ab in g_main_dispatch (context=0x7f5c40005010) at ../glib-2.74.4/glib/gmain.c:3454
#31 g_main_context_dispatch (context=0x7f5c40005010) at ../glib-2.74.4/glib/gmain.c:4172
#32 0x00007f5c4a856858 in g_main_context_iterate (context=context@entry=0x7f5c40005010, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib-2.74.4/glib/gmain.c:4248
#33 0x00007f5c4a85690f in g_main_context_iteration (context=0x7f5c40005010, may_block=1) at ../glib-2.74.4/glib/gmain.c:4313
#34 0x00007f5c4c6c74e8 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x55e89d5588e0, flags=...) at /var/tmp/portage/dev-qt/qtcore-5.15.8-r2/work/qtbase-everywhere-src-5.15.8/src/corelib/kernel/qeventdispatcher_glib.cpp:423
#35 0x00007f5c4c673123 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7fff37802620, flags=..., flags@entry=...) at /var/tmp/portage/dev-qt/qtcore-5.15.8-r2/work/qtbase-everywhere-src-5.15.8/include/QtCore/../../src/corelib/global/qflags.h:69
#36 0x00007f5c4c67b1f0 in QCoreApplication::exec() () at /var/tmp/portage/dev-qt/qtcore-5.15.8-r2/work/qtbase-everywhere-src-5.15.8/include/QtCore/../../src/corelib/global/qflags.h:121
#37 0x00007f5c4ca5dd7c in QGuiApplication::exec() () at /var/tmp/portage/dev-qt/qtgui-5.15.8-r2/work/qtbase-everywhere-src-5.15.8/src/gui/kernel/qguiapplication.cpp:1870
#38 0x00007f5c4d322005 in QApplication::exec() () at /var/tmp/portage/dev-qt/qtwidgets-5.15.8-r1/work/qtbase-everywhere-src-5.15.8/src/widgets/kernel/qapplication.cpp:2832
#39 0x000055e89b8248a7 in main(int, char**) (argc=<optimized out>, argv=<optimized out>) at /var/tmp/portage/kde-plasma/plasma-workspace-5.26.5-r1/work/plasma-workspace-5.26.5/shell/main.cpp:233


Operating System: Gentoo Linux 2.9
KDE Plasma Version: 5.26.5
KDE Frameworks Version: 5.102.0
Qt Version: 5.15.8
Kernel Version: 5.15.88-gentoo (64-bit)
Graphics Platform: X11
Processors: 8 × Intel® Core™ i7-4790K CPU @ 4.00GHz
Memory: 23.4 GiB of RAM
Graphics Processor: NVIDIA GeForce GTX 970/PCIe/SSE2
Manufacturer: Gigabyte Technology Co., Ltd.
Product Name: Z97X-UD5H
Comment 1 Nate Graham 2023-02-06 18:17:46 UTC
Can you talk a bit about why you have this share manually mounted with fstab? Doing so is known to cause issues like this, and the recommend method of access is to simply navigate to the share in Dolphin or the file dialogs via its network URL or the network browser. If you want to be able to access the share quickly, you can make a bookmark or shortcut to that location. No need to manually mount using fstab.

Is there a reason why this doesn't work?
Comment 2 Till Schäfer 2023-02-07 10:42:46 UTC
There are several reasons: 
* I do not use dolphin for file browsing, instead I often just work on the terminal in the first place or use Krusader
* I have several resources that should be accessible by cron jobs, shell scripts that are not related to GUI / Plasma. 
* I want to access that share also from terminal via SSH, when I log in from remote without actually starting plasma 
* I have non-KDE GUI software, which needs access to the shares, e.g., some Eclipse workspaces are located there.
* I want to have a unified path where certain resources are accessible across multiple machines

I would like to add a point that makes this behaviour even more problematic to me:
* after some idle time, the effect re-occurs even if the crossmnt file systems are already mounted. Thus accessing the share again causes plasma to freeze again. 

In my opinion the fstab is a pretty standard way of mounting file systems. Accessing a share (even when only done in  terminal) should never freeze the complete plasma workspace.
Comment 3 Nate Graham 2023-02-11 01:26:37 UTC
Thanks for the info.
Comment 4 Till Schäfer 2023-06-06 21:14:00 UTC
The problematic behaviour was fixed after I have deleted bloated user-places.xbel (which was spammed by kde connect see Bug 466416). Thus I report this as a duplicate of the more specific Bug 451876.

*** This bug has been marked as a duplicate of bug 451876 ***