diff options
Diffstat (limited to 'xlators/performance/stat-prefetch')
-rw-r--r-- | xlators/performance/stat-prefetch/src/stat-prefetch.c | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/xlators/performance/stat-prefetch/src/stat-prefetch.c b/xlators/performance/stat-prefetch/src/stat-prefetch.c index 10d0869a5..1056d29e2 100644 --- a/xlators/performance/stat-prefetch/src/stat-prefetch.c +++ b/xlators/performance/stat-prefetch/src/stat-prefetch.c @@ -539,23 +539,43 @@ out: } +void +sp_is_empty (dict_t *this, char *key, data_t *value, void *data) +{ + char *ptr = data; + + if (ptr && *ptr) { + *ptr = 0; + } +} + + int32_t sp_lookup (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xattr_req) { - sp_local_t *local = NULL; gf_dirent_t dirent; - int32_t ret = -1, op_ret = -1, op_errno = EINVAL; - sp_cache_t *cache = NULL; - struct stat *postparent = NULL, *buf = NULL; - uint64_t value = 0; - call_frame_t *wind_frame = NULL; - char lookup_behind = 0; + sp_local_t *local = NULL; + int32_t ret = -1, op_ret = -1, op_errno = EINVAL; + sp_cache_t *cache = NULL; + struct stat *postparent = NULL, *buf = NULL; + uint64_t value = 0; + call_frame_t *wind_frame = NULL; + char lookup_behind = 0; + char xattr_req_empty = 1; if (loc == NULL) { goto unwind; } - if (xattr_req || (loc->parent == NULL) || (loc->name == NULL)) { + if ((loc->parent == NULL) || (loc->name == NULL)) { + goto wind; + } + + if (xattr_req != NULL) { + dict_foreach (xattr_req, sp_is_empty, &xattr_req_empty); + } + + if (!xattr_req_empty) { goto wind; } |