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
Nfs-ganesha-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs-ganesha-devel

Reply via email to