diff options
author | Ravishankar N <ravishankar@redhat.com> | 2019-04-09 09:44:33 +0530 |
---|---|---|
committer | Ravishankar N <ravishankar@redhat.com> | 2019-05-15 04:16:52 +0000 |
commit | 9f225fa2c419b3ecd17ac49bef6d727e1fc55fde (patch) | |
tree | 31adeaef9424012ce760b64773ba7288ece71e91 /xlators/cluster/afr/src/afr.h | |
parent | a1fa0379b7ae059a9fbce737cd477407ab082c05 (diff) |
afr: thin-arbiter lock release fixes
- pass fop state instead of afr local to
afr_ta_dom_lock_check_and_release()
- avoid afr_lock_release_synctask() being called simultaneosuly from
notify code path and transaction (post-op) code path due to races.
- Check if the post-op on TA is valid based on event_gen checks.
- Invalidate in-memory information when we get TA child down.
Note: Thi patch addresses some pending review comments of commit
053b1309dc8fbc05fcde5223e734da9f694cf5cc
(https://review.gluster.org/#/c/glusterfs/+/20095/)
fixes: bz#1709130
Change-Id: I2ccd7e1b53362f9f3fed8680aecb23b5011eb18c
Signed-off-by: Ravishankar N <ravishankar@redhat.com>
(cherry picked from commit 9ab2747da78061882f6734df4b265bce11adaef1)
Diffstat (limited to 'xlators/cluster/afr/src/afr.h')
-rw-r--r-- | xlators/cluster/afr/src/afr.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/xlators/cluster/afr/src/afr.h b/xlators/cluster/afr/src/afr.h index 6f91c9172f1..88e327bb00e 100644 --- a/xlators/cluster/afr/src/afr.h +++ b/xlators/cluster/afr/src/afr.h @@ -126,6 +126,7 @@ typedef enum { *on BAD brick - Success*/ TA_INFO_IN_MEMORY_FAILED, /*Bad brick info is in memory and fop failed *on GOOD brick - Failed*/ + TA_SUCCESS, /*FOP succeeded on both data bricks.*/ } afr_ta_fop_state_t; struct afr_nfsd { @@ -148,6 +149,7 @@ typedef struct _afr_private { uuid_t ta_gfid; unsigned char ta_child_up; int ta_bad_child_index; + int ta_event_gen; off_t ta_notify_dom_lock_offset; gf_boolean_t release_ta_notify_dom_lock; unsigned int ta_in_mem_txn_count; @@ -887,6 +889,7 @@ typedef struct _afr_local { struct list_head ta_onwireq; afr_ta_fop_state_t fop_state; int ta_failed_subvol; + int ta_event_gen; gf_boolean_t is_new_entry; } afr_local_t; @@ -1326,6 +1329,9 @@ afr_ta_has_quorum(afr_private_t *priv, afr_local_t *local); void afr_ta_lock_release_synctask(xlator_t *this); +void +afr_ta_locked_priv_invalidate(afr_private_t *priv); + gf_boolean_t afr_lookup_has_quorum(call_frame_t *frame, xlator_t *this, unsigned char *subvols); |