Hi Frank
I think Malahal already talked to you about the above.
Just to describe the situation in detail I provide the call-stack
#0 0x00007f895e2755d7 in raise () from /lib64/libc.so.6
#1 0x00007f895e276cc8 in abort () from /lib64/libc.so.6
#2 0x00000000004e72a0 in cache_inode_lookup_impl (parent=0x1b32030,
name=0x7f876c06c671 "regression-framework", entry=0x7f893371f700) at
/usr/src/debug/nfs-ganesha-2.3.2-ibm38-0.1.1-Source/cache_inode/cache_inode_lookup.c:202
#3 0x00000000004e160d in cache_inode_remove (entry=0x1b32030,
name=0x7f876c06c671 "regression-framework") at
/usr/src/debug/nfs-ganesha-2.3.2-ibm38-0.1.1-Source/cache_inode/cache_inode_remove.c:92
#4 0x0000000000486c9f in cleanup_pseudofs_node (pseudopath=0x7f876c06c660
"/gpfs/ma17/titan/regression-framework", entry=0x1b32850) at
/usr/src/debug/nfs-ganesha-2.3.2-ibm38-0.1.1-Source/Protocols/NFS/nfs4_pseudo.c:118
#5 0x0000000000489420 in pseudo_unmount_export (export=0x1b2b4d8) at
/usr/src/debug/nfs-ganesha-2.3.2-ibm38-0.1.1-Source/Protocols/NFS/nfs4_pseudo.c:616
#6 0x000000000051d450 in clean_up_export (export=0x1b2b4d8) at
/usr/src/debug/nfs-ganesha-2.3.2-ibm38-0.1.1-Source/support/exports.c:1863
#7 0x000000000051d7e4 in kill_export_root_entry (entry=0x1ab5f00) at
/usr/src/debug/nfs-ganesha-2.3.2-ibm38-0.1.1-Source/support/exports.c:1917
#8 0x00000000004fbdb1 in cache_inode_lru_unref (entry=0x1ab5f00, flags=0) at
/usr/src/debug/nfs-ganesha-2.3.2-ibm38-0.1.1-Source/cache_inode/cache_inode_lru.c:1472
#9 0x00000000004e00d1 in cache_inode_put (entry=0x1ab5f00) at
/usr/src/debug/nfs-ganesha-2.3.2-ibm38-0.1.1-Source/include/cache_inode_lru.h:178
#10 0x00000000004e094e in cache_inode_getattr (entry=0x1b32850,
opaque=0x7f893371fb80, cb=0x47b01d <nfs4_readdir_callback>,
cb_state=CB_ORIGINAL) at
/usr/src/debug/nfs-ganesha-2.3.2-ibm38-0.1.1-Source/cache_inode/cache_inode_getattr.c:151
#11 0x00000000004e4927 in cache_inode_readdir (directory=0x1b32030, cookie=0,
nbfound=0x7f893371fcbc, eod_met=0x7f893371fcd7, attrmask=122822, cb=0x47b01d
<nfs4_readdir_callback>, opaque=0x7f893371fc60) at /usr/src
my suggestion to circumvent the deadlock situation is to wrap the call
to cache_inode_getattr() in an unlock / lock sandwich.
E.g.
PTHREAD_RWLOCK_unlock(&directory->content_lock);
tmp_status = cache_inode_getattr(entry, &cb_parms, cb,
CB_ORIGINAL);
PTHREAD_RWLOCK_wrlock(&directory->content_lock);
as I don't think the directories content_lock must be held while processing an
entry.
What do you think ?
Cheers Swen
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Nfs-ganesha-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/nfs-ganesha-devel