diff options
author | Xavier Hernandez <xhernandez@datalab.es> | 2015-05-14 20:07:10 +0200 |
---|---|---|
committer | Pranith Kumar Karampuri <pkarampu@redhat.com> | 2015-05-20 01:00:01 -0700 |
commit | 61cfcf65f0d4ad70fc8a47395c583d4b5bf1efbe (patch) | |
tree | 9d3134df974f4ab0160008dbd877e317d471d2c7 /xlators/cluster/ec/src/ec-data.h | |
parent | 8f788528e64c4c13e16f7ad2d9f667a3813e08cc (diff) |
cluster/ec: Correctly cleanup delayed locks
When a delayed lock is pending, a graph switch doesn't correctly
terminate it. This means that the update of version and size xattrs
is lost, causing EIO errors.
This patch handles GF_EVENT_PARENT_DOWN event to correctly finish
pending udpdates before completing the graph switch.
Change-Id: I394f3b8d41df8d83cdd36636aeb62330f30a66d5
BUG: 1188145
Signed-off-by: Xavier Hernandez <xhernandez@datalab.es>
Reviewed-on: http://review.gluster.org/10787
Tested-by: NetBSD Build System
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
Diffstat (limited to 'xlators/cluster/ec/src/ec-data.h')
-rw-r--r-- | xlators/cluster/ec/src/ec-data.h | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/xlators/cluster/ec/src/ec-data.h b/xlators/cluster/ec/src/ec-data.h index 9e5c92dd5b8..8a58ffb288b 100644 --- a/xlators/cluster/ec/src/ec-data.h +++ b/xlators/cluster/ec/src/ec-data.h @@ -172,13 +172,14 @@ struct _ec_fop_data int32_t winds; int32_t jobs; int32_t error; - ec_fop_data_t * parent; - xlator_t * xl; - call_frame_t * req_frame; // frame of the calling xlator - call_frame_t * frame; // frame used by this fop - struct list_head cbk_list; // sorted list of groups of answers - struct list_head answer_list; // list of answers - ec_cbk_data_t * answer; // accepted answer + ec_fop_data_t *parent; + xlator_t *xl; + call_frame_t *req_frame; /* frame of the calling xlator */ + call_frame_t *frame; /* frame used by this fop */ + struct list_head cbk_list; /* sorted list of groups of answers */ + struct list_head answer_list; /* list of answers */ + struct list_head pending_list; /* member of ec_t.pending_fops */ + ec_cbk_data_t *answer; /* accepted answer */ int32_t lock_count; int32_t locked; ec_lock_link_t locks[2]; @@ -203,7 +204,7 @@ struct _ec_fop_data ec_handler_f handler; ec_resume_f resume; ec_cbk_t cbks; - void * data; + void *data; ec_heal_t *heal; uint64_t user_size; @@ -211,8 +212,8 @@ struct _ec_fop_data int32_t use_fd; - dict_t * xdata; - dict_t * dict; + dict_t *xdata; + dict_t *dict; int32_t int32; uint32_t uint32; uint64_t size; @@ -222,14 +223,14 @@ struct _ec_fop_data entrylk_type entrylk_type; gf_xattrop_flags_t xattrop_flags; dev_t dev; - inode_t * inode; - fd_t * fd; + inode_t *inode; + fd_t *fd; struct iatt iatt; - char * str[2]; + char *str[2]; loc_t loc[2]; struct gf_flock flock; - struct iovec * vector; - struct iobref * buffers; + struct iovec *vector; + struct iobref *buffers; }; struct _ec_cbk_data |