diff options
Diffstat (limited to 'xlators/performance')
| -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 10d0869a57a..1056d29e272 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;          }  | 
