Daniel,
prev_chunk->dirents is an empty list. The num_entries say 112, but the next and prev suggest an empty list. I did not find any code that decrements num_entries as dirents are removed. Only a reset back to zero if the whole
list is emptied.
***** Code snippet for 1 and core: mdcache_get_chunk. ****
if (prev_chunk) {
chunk->reload_ck = glist_last_entry(&prev_chunk->dirents,
mdcache_dir_entry_t,
>>>>Line 914
chunk_list)->ck;
/* unref prev_chunk as we had got a ref on prev_chunk
* at the beginning of this function
*/
mdcache_lru_unref_chunk(prev_chunk);
}
else {
chunk->reload_ck = whence;
}
Note: This core had a ref_count of 1 for the prev_chunk. A different core had a ref_count of 1 for prev_chunk
******* core *****
(gdb) info locals
lru = 0x0
chunk = 0x75320370
__func__ = "mdcache_get_chunk"
(gdb) info args
parent = 0x2f837f60
prev_chunk = 0x2f70dc50
whence = 18525227
(gdb) print *chunk
$2 = {chunks = {next = 0x2f838200, prev = 0x40ab5700}, dirents = {next = 0x75320380, prev = 0x75320380}, parent = 0x2f837f60,
chunk_lru = {q = {next = 0x0, prev = 0x0}, qid = LRU_ENTRY_NONE, refcnt = 0, flags = 0, lane = 0, cf = 0}, reload_ck = 0,
next_ck = 0, num_entries = 0}
(gdb) print *prev_chunk
$3 = {chunks = {next = 0x39a24aa0, prev = 0x55ed7f00}, dirents = {next = 0x2f70dc60, prev = 0x2f70dc60}, parent = 0x0,
chunk_lru = {q = {next = 0x0, prev = 0x0}, qid = LRU_ENTRY_L1, refcnt = 1, flags = 0, lane = 0, cf = 0}, reload_ck = 0,
next_ck = 0, num_entries = 112}
(gdb) bt
#0
mdcache_get_chunk (parent=0x2f837f60, prev_chunk=0x2f70dc50, whence=18525227)
at /src/src/FSAL/Stackable_FSALs/FSAL_MDCACHE/mdcache_lru.c:914
#1
0x0000000000541da9 in mdcache_populate_dir_chunk (directory=0x2f837f60, whence=18525227, dirent=0x7f0edeea3940,
prev_chunk=0x2f70dc50, eod_met=0x7f0edeea393f) at /src/src/FSAL/Stackable_FSALs/FSAL_MDCACHE/mdcache_helpers.c:2554
#2
0x00000000005437cd in mdcache_readdir_chunked (directory=0x2f837f60, whence=18525227, dir_state=0x7f0edeea3af0,
cb=0x4325fd <populate_dirent>, attrmask=0, eod_met=0x7f0edeea3feb)
at /src/src/FSAL/Stackable_FSALs/FSAL_MDCACHE/mdcache_helpers.c:2985
#3
0x0000000000531b60 in mdcache_readdir (dir_hdl=0x2f837f98, whence=0x7f0edeea3ad0, dir_state=0x7f0edeea3af0,
cb=0x4325fd <populate_dirent>, attrmask=0, eod_met=0x7f0edeea3feb)
at /src/src/FSAL/Stackable_FSALs/FSAL_MDCACHE/mdcache_handle.c:559
#4
0x0000000000432f24 in fsal_readdir (directory=0x2f837f98, cookie=18525227, nbfound=0x7f0edeea3fec, eod_met=0x7f0edeea3feb,
attrmask=0, cb=0x491f59 <nfs3_readdir_callback>, opaque=0x7f0edeea3fa0) at /src/src/FSAL/fsal_helper.c:1164
#5
0x0000000000491d41 in nfs3_readdir (arg=0x7534a418, req=0x75349d10, res=0x75289cf0)
at /src/src/Protocols/NFS/nfs3_readdir.c:289
#6
0x0000000000457e26 in nfs_rpc_process_request (reqdata=0x75349d10) at /src/src/MainNFSD/nfs_worker_thread.c:1328
#7
0x00000000004585e5 in nfs_rpc_valid_NFS (req=0x75349d10) at /src/src/MainNFSD/nfs_worker_thread.c:1548
#8
0x00007f0ee83c4034 in svc_vc_decode (req=0x75349d10) at /src/src/libntirpc/src/svc_vc.c:829
#9
0x000000000044afd5 in nfs_rpc_decode_request (xprt=0x1453b20, xdrs=0x75363020)
at /src/src/MainNFSD/nfs_rpc_dispatcher_thread.c:1345
#10 0x00007f0ee83c3f45 in svc_vc_recv (xprt=0x1453b20) at /src/src/libntirpc/src/svc_vc.c:802
#11 0x00007f0ee83c0689 in svc_rqst_xprt_task (wpe=0x1453d38) at /src/src/libntirpc/src/svc_rqst.c:769
#12 0x00007f0ee83c0ae6 in svc_rqst_epoll_events (sr_rec=0x1434020, n_events=1) at /src/src/libntirpc/src/svc_rqst.c:941
#13 0x00007f0ee83c0d7b in svc_rqst_epoll_loop (sr_rec=0x1434020) at /src/src/libntirpc/src/svc_rqst.c:1014
#14 0x00007f0ee83c0e2e in svc_rqst_run_task (wpe=0x1434020) at /src/src/libntirpc/src/svc_rqst.c:1050
#15 0x00007f0ee83c97f6 in work_pool_thread (arg=0x144d470) at /src/src/libntirpc/src/work_pool.c:181
#16 0x00007f0ee73e7de5 in start_thread () from /lib64/libpthread.so.0
#17 0x00007f0ee6ceef1d in clone () from /lib64/libc.so.6