diff options
| author | Pranith Kumar K <pkarampu@redhat.com> | 2013-02-06 12:34:17 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2013-02-06 09:25:42 -0800 | 
| commit | 3a141cda38cd6908dc3f1103a02eb38007552e87 (patch) | |
| tree | 948a1044b637b4be870c7aa0e6b75fe066da0eb6 /xlators/cluster | |
| parent | e0a331c4bea8713a67a0f8c5dc4bac1e6f81f358 (diff) | |
cluster/afr: Avoid priv->eager_lock value update race
Change-Id: I7049c0c64e36a9dfa4cc0e0b34de7ec111d2f6c1
BUG: 908302
Signed-off-by: Pranith Kumar K <pkarampu@redhat.com>
Reviewed-on: http://review.gluster.org/4076
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'xlators/cluster')
| -rw-r--r-- | xlators/cluster/afr/src/afr-common.c | 1 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-lk-common.c | 2 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-transaction.c | 6 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr.h | 1 | 
4 files changed, 6 insertions, 4 deletions
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c index 424a6997..80134640 100644 --- a/xlators/cluster/afr/src/afr-common.c +++ b/xlators/cluster/afr/src/afr-common.c @@ -4024,6 +4024,7 @@ afr_transaction_local_init (afr_local_t *local, xlator_t *this)                                                             AFR_NUM_CHANGE_LOGS);          if (!local->transaction.txn_changelog)                  goto out; +        local->transaction.eager_lock_on = priv->eager_lock;          ret = 0;  out:          return ret; diff --git a/xlators/cluster/afr/src/afr-lk-common.c b/xlators/cluster/afr/src/afr-lk-common.c index 542b2959..75df3bb3 100644 --- a/xlators/cluster/afr/src/afr-lk-common.c +++ b/xlators/cluster/afr/src/afr-lk-common.c @@ -1554,7 +1554,7 @@ afr_nonblocking_inodelk (call_frame_t *frame, xlator_t *this)                                  continue;                          flock_use = &flock; -                        if (!priv->eager_lock) { +                        if (!local->transaction.eager_lock_on) {                                  goto wind;                          } diff --git a/xlators/cluster/afr/src/afr-transaction.c b/xlators/cluster/afr/src/afr-transaction.c index c0316f86..a8b31787 100644 --- a/xlators/cluster/afr/src/afr-transaction.c +++ b/xlators/cluster/afr/src/afr-transaction.c @@ -1291,10 +1291,10 @@ afr_set_delayed_post_op (call_frame_t *frame, xlator_t *this)  	if (!priv->post_op_delay_secs)  		return; -        if (!priv->eager_lock) +        local = frame->local; +        if (!local->transaction.eager_lock_on)                  return; -	local = frame->local;  	if (!local)  		return; @@ -1477,7 +1477,7 @@ afr_transaction (call_frame_t *frame, xlator_t *this, afr_transaction_type type)          local->transaction.resume = afr_transaction_resume;          local->transaction.type   = type; -        if (local->fd && priv->eager_lock && +        if (local->fd && local->transaction.eager_lock_on &&              local->transaction.type == AFR_DATA_TRANSACTION)                  afr_set_lk_owner (frame, this, local->fd);          else diff --git a/xlators/cluster/afr/src/afr.h b/xlators/cluster/afr/src/afr.h index 9405ff29..cc0d0107 100644 --- a/xlators/cluster/afr/src/afr.h +++ b/xlators/cluster/afr/src/afr.h @@ -655,6 +655,7 @@ typedef struct _afr_local {          struct {                  off_t start, len; +                gf_boolean_t    eager_lock_on;                  int *eager_lock;                  char *basename;  | 
