diff options
| -rw-r--r-- | xlators/performance/io-cache/src/io-cache.c | 7 | ||||
| -rw-r--r-- | xlators/performance/io-cache/src/page.c | 20 | 
2 files changed, 21 insertions, 6 deletions
diff --git a/xlators/performance/io-cache/src/io-cache.c b/xlators/performance/io-cache/src/io-cache.c index 1614166d973..173985c2dc4 100644 --- a/xlators/performance/io-cache/src/io-cache.c +++ b/xlators/performance/io-cache/src/io-cache.c @@ -412,6 +412,7 @@ ioc_cache_validate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,           * fd_ref on fd, safe to unref validate frame's private copy           */          fd_unref (local->fd); +        dict_unref(local->xattr_req);          STACK_DESTROY (frame->root); @@ -496,11 +497,14 @@ ioc_cache_validate (call_frame_t *frame, ioc_inode_t *ioc_inode, fd_t *fd,          validate_local->fd = fd_ref (fd);          validate_local->inode = ioc_inode; +        if (local && local->xattr_req) +                validate_local->xattr_req = dict_ref(local->xattr_req);          validate_frame->local = validate_local;          STACK_WIND (validate_frame, ioc_cache_validate_cbk,                      FIRST_CHILD (frame->this), -                    FIRST_CHILD (frame->this)->fops->fstat, fd, NULL); +                    FIRST_CHILD (frame->this)->fops->fstat, fd, +                    validate_local->xattr_req);  out:          return ret; @@ -1175,6 +1179,7 @@ ioc_readv (call_frame_t *frame, xlator_t *this, fd_t *fd,          local->offset = offset;          local->size = size;          local->inode = ioc_inode; +        local->xattr_req = dict_ref(xdata);          gf_msg_trace (this->name, 0,                        "NEW REQ (%p) offset " diff --git a/xlators/performance/io-cache/src/page.c b/xlators/performance/io-cache/src/page.c index 50f5e190e21..ae208766813 100644 --- a/xlators/performance/io-cache/src/page.c +++ b/xlators/performance/io-cache/src/page.c @@ -558,6 +558,9 @@ unlock:          fd_unref (local->fd); +        if (local->xattr_req) +                dict_unref(local->xattr_req); +          STACK_DESTROY (frame->root);          return 0;  } @@ -582,6 +585,7 @@ ioc_page_fault (ioc_inode_t *ioc_inode, call_frame_t *frame, fd_t *fd,          int32_t       op_ret      = -1, op_errno = -1;          ioc_waitq_t  *waitq       = NULL;          ioc_page_t   *page        = NULL; +        ioc_local_t *local = NULL;          GF_ASSERT (ioc_inode);          if (frame == NULL) { @@ -601,6 +605,7 @@ ioc_page_fault (ioc_inode_t *ioc_inode, call_frame_t *frame, fd_t *fd,                  goto err;          } +        local = frame->local;          fault_local = mem_get0 (THIS->local_pool);          if (fault_local == NULL) {                  op_ret = -1; @@ -622,13 +627,16 @@ ioc_page_fault (ioc_inode_t *ioc_inode, call_frame_t *frame, fd_t *fd,          fault_local->pending_size = table->page_size;          fault_local->inode = ioc_inode; +        if (local && local->xattr_req) +                fault_local->xattr_req = dict_ref(local->xattr_req); +          gf_msg_trace (frame->this->name, 0,                        "stack winding page fault for offset = %"PRId64" with "                        "frame %p", offset, fault_frame);          STACK_WIND (fault_frame, ioc_fault_cbk, FIRST_CHILD(fault_frame->this),                      FIRST_CHILD(fault_frame->this)->fops->readv, fd, -                    table->page_size, offset, 0, NULL); +                    table->page_size, offset, 0, fault_local->xattr_req);          return;  err: @@ -895,10 +903,12 @@ unwind:                  vector = NULL;          } -        pthread_mutex_destroy (&local->local_lock); -        if (local) -                mem_put (local); - +        if (local) { +                if (local->xattr_req) +                        dict_unref(local->xattr_req); +                pthread_mutex_destroy(&local->local_lock); +                mem_put(local); +        }          return;  }  | 
