Daniel Gryniewicz has uploaded this change for review.

View Change

MDCACHE - Allow readdir_plus to reload entire chunks

When the handle cache is full, there may be dirents (even a lot of them)
that are cached that have no corresponding entry in the handle cache.
When a readdir() hits a chunk of these, it must to a lookup() and a
getattrs() on each one, causing many round-trips to the cluster, raising
latency of readdir() considerably.

However, if a FSAL has readdir_plus, it can get multiple dirents and
their associated entries and attributes in one (or a few) round-trips to
the cluster. If this is the case, remove the empty chunk, and reload
it from the FSAL.

In addition, to make sure that entries in a chunk are not reaped while
that chunk is being used for readdir(), take a ref on each entry until
it's passed up to the caller.

Change-Id: Ibefd1ca782c7d616efde8cdf7335881df5a95c6e
Signed-off-by: Daniel Gryniewicz <dang@redhat.com>
---
M src/FSAL/Stackable_FSALs/FSAL_MDCACHE/mdcache_helpers.c
M src/FSAL/Stackable_FSALs/FSAL_MDCACHE/mdcache_int.h
M src/include/gsh_lttng/mdcache.h
3 files changed, 98 insertions(+), 19 deletions(-)

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

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

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