https://bugs.kde.org/show_bug.cgi?id=465011

            Bug ID: 465011
           Summary: plasmashell freezes for some time after accessing an
                    NFSv4 share with crossmounts
    Classification: Plasma
           Product: plasmashell
           Version: 5.26.5
          Platform: Gentoo Packages
                OS: Linux
            Status: REPORTED
          Severity: normal
          Priority: NOR
         Component: general
          Assignee: plasma-b...@kde.org
          Reporter: till2.schae...@uni-dortmund.de
                CC: k...@davidedmundson.co.uk
  Target Milestone: 1.0

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

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to