Daniel Gryniewicz has uploaded this change for review.

View Change

MDCACHE - Don't return dead entries from hashtable

When the refcount of an entry goes to zero, it's removed from the LRU
under the lane lock, and then the lane lock is dropped, and the entry is
cleaned up. This includes removing it from the hash table.

However, there is a window during which mdcache_find_keyed_reason() or
mdcache_new_entry() can find it from the hash table, and increment it's
refcount to 1. This causes it's refcount to go to zero again, recursing
into cih_remove_checked(), causing an assert.

Fix the hash table to not return an entry if it's refcount is zero.

Change-Id: I9a922a1fb54561f04d71cc83c0bcd3289ec854ae
Signed-off-by: Daniel Gryniewicz <dang@redhat.com>
---
M src/FSAL/Stackable_FSALs/FSAL_MDCACHE/mdcache_hash.h
1 file changed, 6 insertions(+), 0 deletions(-)

git pull ssh://review.gerrithub.io:29418/ffilz/nfs-ganesha refs/changes/66/441566/1

To view, visit change 441566. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: ffilz/nfs-ganesha
Gerrit-Branch: next
Gerrit-Change-Id: I9a922a1fb54561f04d71cc83c0bcd3289ec854ae
Gerrit-Change-Number: 441566
Gerrit-PatchSet: 1
Gerrit-Owner: Daniel Gryniewicz <dang@redhat.com>
Gerrit-MessageType: newchange