diff options
-rw-r--r-- | xlators/performance/open-behind/src/open-behind.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/xlators/performance/open-behind/src/open-behind.c b/xlators/performance/open-behind/src/open-behind.c index e43fe73bcca..1ab635e93f8 100644 --- a/xlators/performance/open-behind/src/open-behind.c +++ b/xlators/performance/open-behind/src/open-behind.c @@ -333,6 +333,14 @@ ob_stub_dispatch(xlator_t *xl, ob_inode_t *ob_inode, fd_t *fd, return 0; } +static void +ob_open_destroy(call_stub_t *stub, fd_t *fd) +{ + STACK_DESTROY(stub->frame->root); + call_stub_destroy(stub); + fd_unref(fd); +} + static int32_t ob_open_dispatch(xlator_t *xl, ob_inode_t *ob_inode, fd_t *fd, call_stub_t *stub) @@ -355,8 +363,7 @@ ob_open_dispatch(xlator_t *xl, ob_inode_t *ob_inode, fd_t *fd, if (stub != NULL) { if (closed) { - call_stub_destroy(stub); - fd_unref(fd); + ob_open_destroy(stub, fd); } else { call_resume(stub); } @@ -776,8 +783,7 @@ ob_fdclose(xlator_t *this, fd_t *fd) UNLOCK(&fd->inode->lock); if (stub != NULL) { - call_stub_destroy(stub); - fd_unref(fd); + ob_open_destroy(stub, fd); } ob_resume_pending(&list); |