diff options
| author | Yaniv Kaul <ykaul@redhat.com> | 2019-09-19 20:52:46 +0300 | 
|---|---|---|
| committer | Pranith Kumar Karampuri <pkarampu@redhat.com> | 2019-10-07 07:31:57 +0000 | 
| commit | b3df5abbb7ab4d0f5015da9e4d5ecea79eed9b98 (patch) | |
| tree | a2829e6ff72f9eece4c8d3a531e5db72f5857d7e | |
| parent | f2404405432cfc7c2369de02f79eee000b9aee13 (diff) | |
afr: replace afr_frame_return() when possible with direct call
If you are already under lock, just decrement the call count
directly instead of removing the lock, re-taking the lock
and decrementing.
Implements https://github.com/gluster/glusterfs/issues/728
updates: bz#1193929
Signed-off-by: Yaniv Kaul <ykaul@redhat.com>
Change-Id: I3fa20b4651fbdb826655c5a03baeed46e99b5487
| -rw-r--r-- | xlators/cluster/afr/src/afr-common.c | 13 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-dir-read.c | 3 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-dir-write.c | 2 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-inode-write.c | 3 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-open.c | 3 | 
5 files changed, 9 insertions, 15 deletions
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c index 0e5a15092bf..b9cd6884181 100644 --- a/xlators/cluster/afr/src/afr-common.c +++ b/xlators/cluster/afr/src/afr-common.c @@ -3589,11 +3589,10 @@ afr_flush_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,          } else {              local->op_errno = op_errno;          } +        call_count = --local->call_count;      }      UNLOCK(&frame->lock); -    call_count = afr_frame_return(frame); -      if (call_count == 0)          AFR_STACK_UNWIND(flush, frame, local->op_ret, local->op_errno,                           local->xdata_rsp); @@ -3729,11 +3728,10 @@ afr_fsyncdir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,          } else {              local->op_errno = op_errno;          } +        call_count = --local->call_count;      }      UNLOCK(&frame->lock); -    call_count = afr_frame_return(frame); -      if (call_count == 0)          AFR_STACK_UNWIND(fsyncdir, frame, local->op_ret, local->op_errno,                           local->xdata_rsp); @@ -4350,10 +4348,10 @@ afr_statfs_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,      int call_count = 0;      struct statvfs *buf = NULL; +    local = frame->local; +      LOCK(&frame->lock);      { -        local = frame->local; -          if (op_ret != 0) {              local->op_errno = op_errno;              goto unlock; @@ -4379,10 +4377,9 @@ afr_statfs_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,          }      }  unlock: +    call_count = --local->call_count;      UNLOCK(&frame->lock); -    call_count = afr_frame_return(frame); -      if (call_count == 0)          AFR_STACK_UNWIND(statfs, frame, local->op_ret, local->op_errno,                           &local->cont.statfs.buf, local->xdata_rsp); diff --git a/xlators/cluster/afr/src/afr-dir-read.c b/xlators/cluster/afr/src/afr-dir-read.c index f9fd48893ff..74f71fdc76a 100644 --- a/xlators/cluster/afr/src/afr-dir-read.c +++ b/xlators/cluster/afr/src/afr-dir-read.c @@ -53,11 +53,10 @@ afr_opendir_cbk(call_frame_t *frame, void *cookie, xlator_t *this,              if (!local->xdata_rsp && xdata)                  local->xdata_rsp = dict_ref(xdata);          } +        call_count = --local->call_count;      }      UNLOCK(&frame->lock); -    call_count = afr_frame_return(frame); -      if (call_count == 0) {          afr_handle_replies_quorum(frame, this);          AFR_STACK_UNWIND(opendir, frame, local->op_ret, local->op_errno, diff --git a/xlators/cluster/afr/src/afr-dir-write.c b/xlators/cluster/afr/src/afr-dir-write.c index 82a72fddd67..e96b7d0798e 100644 --- a/xlators/cluster/afr/src/afr-dir-write.c +++ b/xlators/cluster/afr/src/afr-dir-write.c @@ -229,9 +229,9 @@ __afr_dir_write_cbk(call_frame_t *frame, void *cookie, xlator_t *this,          __afr_dir_write_fill(frame, this, child_index, op_ret, op_errno, buf,                               preparent, postparent, preparent2, postparent2,                               xdata); +        call_count = --local->call_count;      }      UNLOCK(&frame->lock); -    call_count = afr_frame_return(frame);      if (call_count == 0) {          __afr_dir_write_finalize(frame, this); diff --git a/xlators/cluster/afr/src/afr-inode-write.c b/xlators/cluster/afr/src/afr-inode-write.c index 8e9de3e12a6..9acb4d0e053 100644 --- a/xlators/cluster/afr/src/afr-inode-write.c +++ b/xlators/cluster/afr/src/afr-inode-write.c @@ -174,11 +174,10 @@ __afr_inode_write_cbk(call_frame_t *frame, void *cookie, xlator_t *this,      {          __afr_inode_write_fill(frame, this, child_index, op_ret, op_errno,                                 prebuf, postbuf, xattr, xdata); +        call_count = --local->call_count;      }      UNLOCK(&frame->lock); -    call_count = afr_frame_return(frame); -      if (call_count == 0) {          __afr_inode_write_finalize(frame, this); diff --git a/xlators/cluster/afr/src/afr-open.c b/xlators/cluster/afr/src/afr-open.c index 1747a079fa6..d262c35f1a2 100644 --- a/xlators/cluster/afr/src/afr-open.c +++ b/xlators/cluster/afr/src/afr-open.c @@ -78,11 +78,10 @@ afr_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret,              if (!local->xdata_rsp && xdata)                  local->xdata_rsp = dict_ref(xdata);          } +        call_count = --local->call_count;      }      UNLOCK(&frame->lock); -    call_count = afr_frame_return(frame); -      if (call_count == 0) {          afr_handle_replies_quorum(frame, this);          if (local->op_ret == -1) {  | 
