Actions
Bug #46056
closedassertion triggered in LRU::lru_touch in ganesha+libcephfs client
% Done:
0%
Source:
Tags:
Backport:
Regression:
No
Severity:
3 - minor
Reviewed:
Affected Versions:
ceph-qa-suite:
Component(FS):
Ganesha FSAL
Labels (FS):
Pull request ID:
Crash signature (v1):
Crash signature (v2):
Description
Testing a simple vstart setup with these commands. ganesha is configured with 2 exports that are exporting the same filesystem:
ceph nfs export create cephfs "a" $cluster_id "/cephfs" ceph nfs export create cephfs "a" $cluster_id "/cephfs1"
...then, on a nfs client:
mount -o port=$NFS_PORT ip_addr:/cephfs /mnt echo foo > /mnt/foo umount /mnt mount -o port=$NFS_PORT ip_addr:/cephfs1 /mnt echo foo > /mnt/foo
...the last command hangs, because ganesha has crashed. Here's the stack trace:
(gdb) bt #0 0x00007faabdd55a25 in raise () from /lib64/libc.so.6 #1 0x00007faabdd3e895 in abort () from /lib64/libc.so.6 #2 0x00007faab155fc0e in ceph::__ceph_assert_fail (assertion=0x7faaa4719db7 "o->lru == this", file=0x7faaa4719cb0 "/home/jlayton/git/ceph/src/include/lru.h", line=112, func=0x7faaa4719dc8 "bool LRU::lru_touch(LRUObject*)") at /home/jlayton/git/ceph/src/common/assert.cc:75 #3 0x00007faab155fcc1 in ceph::__ceph_assert_fail (ctx=...) at /home/jlayton/git/ceph/src/common/assert.cc:80 #4 0x00007faaa462fefa in LRU::lru_touch (this=0x563286e2c8a8, o=0x7fa9b000aed0) at /home/jlayton/git/ceph/src/include/lru.h:112 #5 0x00007faaa45d7fc2 in Client::touch_dn (this=0x563286e2c6e0, dn=0x7fa9b000aed0) at /home/jlayton/git/ceph/src/client/Client.cc:7552 #6 0x00007faaa45ce6e0 in Client::_lookup (this=0x563286e2c6e0, dir=0x7faa08007db0, dname="foo", mask=341, target=0x7faaa44e8388, perms=...) at /home/jlayton/git/ceph/src/client/Client.cc:6505 #7 0x00007faaa45f3633 in Client::ll_lookupx (this=0x563286e2c6e0, parent=0x7faa08007db0, name=0x7fa9b0007980 "foo", out=0x7faaa44e84b8, stx=0x7faaa44e84c0, want=8191, flags=0, perms=...) at /home/jlayton/git/ceph/src/client/Client.cc:10940 #8 0x00007faaa456e970 in ceph_ll_lookup (cmount=0x563286c65700, parent=0x7faa08007db0, name=0x7fa9b0007980 "foo", out=0x7faaa44e84b8, stx=0x7faaa44e84c0, want=8191, flags=0, perms=0x7fa9b000b7c0) at /home/jlayton/git/ceph/src/libcephfs.cc:1608 #9 0x00007faabe0f5da6 in ceph_fsal_lookup () from /usr/lib64/ganesha/libfsalceph.so #10 0x00007faabe01f699 in mdc_lookup_uncached () from /lib64/libganesha_nfsd.so.3.3 #11 0x00007faabe01fb32 in mdc_lookup () from /lib64/libganesha_nfsd.so.3.3 #12 0x00007faabe010ccf in mdcache_lookup () from /lib64/libganesha_nfsd.so.3.3 #13 0x00007faabdfdeff6 in open4_ex () from /lib64/libganesha_nfsd.so.3.3 #14 0x00007faabdfe11ca in nfs4_op_open () from /lib64/libganesha_nfsd.so.3.3 #15 0x00007faabdfcefb6 in process_one_op () from /lib64/libganesha_nfsd.so.3.3 #16 0x00007faabdfd0188 in nfs4_Compound () from /lib64/libganesha_nfsd.so.3.3 #17 0x00007faabdf52826 in nfs_rpc_process_request () from /lib64/libganesha_nfsd.so.3.3 #18 0x00007faabdcf48df in svc_request () from /lib64/libntirpc.so.3.3 #19 0x00007faabdcf237a in svc_rqst_xprt_task_recv () from /lib64/libntirpc.so.3.3 #20 0x00007faabdcf2eae in svc_rqst_epoll_loop () from /lib64/libntirpc.so.3.3 #21 0x00007faabdcfd69c in work_pool_thread () from /lib64/libntirpc.so.3.3 #22 0x00007faabdeec432 in start_thread () from /lib64/libpthread.so.0 #23 0x00007faabde1a9d3 in clone () from /lib64/libc.so.6
That assertion corresponds to this:
// touch item -- move to head of lru bool lru_touch(LRUObject *o) { if (!o->lru) { lru_insert_top(o); } else { ceph_assert(o->lru == this); // <<< ASSERTION HERE auto list = o->lru_link.get_list(); ceph_assert(list == &top || list == &bottom || list == &pintail); top.push_front(&o->lru_link); adjust(); } return true; }
Actions