diff options
| -rw-r--r-- | xlators/cluster/ec/src/ec-common.c | 16 | ||||
| -rw-r--r-- | xlators/cluster/ec/src/ec-data.c | 3 | ||||
| -rw-r--r-- | xlators/cluster/ec/src/ec-data.h | 2 | 
3 files changed, 11 insertions, 10 deletions
diff --git a/xlators/cluster/ec/src/ec-common.c b/xlators/cluster/ec/src/ec-common.c index b65f79faa55..a7d6da4038f 100644 --- a/xlators/cluster/ec/src/ec-common.c +++ b/xlators/cluster/ec/src/ec-common.c @@ -905,11 +905,11 @@ ec_prepare_update_cbk (call_frame_t *frame, void *cookie,      LOCK(&lock->loc.inode->lock); -    list_for_each_entry(tmp, &lock->owners, owner_list) { -        if ((tmp->flags & EC_FLAG_WAITING_SIZE) != 0) { -            tmp->flags ^= EC_FLAG_WAITING_SIZE; +    list_for_each_entry(link, &lock->owners, owner_list) { +        if ((link->fop->flags & EC_FLAG_WAITING_SIZE) != 0) { +            link->fop->flags ^= EC_FLAG_WAITING_SIZE; -            list_add_tail(&tmp->cbk_list, &list); +            list_add_tail(&link->fop->cbk_list, &list);          }      } @@ -1337,7 +1337,7 @@ ec_lock_wake_shared(ec_lock_t *lock, struct list_head *list)          list_move_tail(&link->wait_list, list); -        list_add_tail(&fop->owner_list, &lock->owners); +        list_add_tail(&link->owner_list, &lock->owners);          ec_lock_update_fd(lock, fop);      } @@ -1523,7 +1523,7 @@ ec_lock_assign_owner(ec_lock_link_t *link)          }      } -    list_add_tail(&fop->owner_list, &lock->owners); +    list_add_tail(&link->owner_list, &lock->owners);      assigned = _gf_true; @@ -1557,8 +1557,8 @@ ec_lock_next_owner(ec_lock_link_t *link, ec_cbk_data_t *cbk,      ec_trace("LOCK_DONE", fop, "lock=%p", lock); -    GF_ASSERT(!list_empty(&fop->owner_list)); -    list_del_init(&fop->owner_list); +    GF_ASSERT(!list_empty(&link->owner_list)); +    list_del_init(&link->owner_list);      lock->release |= release;      if ((fop->error == 0) && (cbk != NULL) && (cbk->op_ret >= 0)) { diff --git a/xlators/cluster/ec/src/ec-data.c b/xlators/cluster/ec/src/ec-data.c index 721b104245f..ba47eebda3a 100644 --- a/xlators/cluster/ec/src/ec-data.c +++ b/xlators/cluster/ec/src/ec-data.c @@ -135,12 +135,13 @@ ec_fop_data_t * ec_fop_data_allocate(call_frame_t * frame, xlator_t * this,          return NULL;      } -    INIT_LIST_HEAD(&fop->owner_list);      INIT_LIST_HEAD(&fop->cbk_list);      INIT_LIST_HEAD(&fop->healer);      INIT_LIST_HEAD(&fop->answer_list);      INIT_LIST_HEAD(&fop->pending_list); +    INIT_LIST_HEAD(&fop->locks[0].owner_list);      INIT_LIST_HEAD(&fop->locks[0].wait_list); +    INIT_LIST_HEAD(&fop->locks[1].owner_list);      INIT_LIST_HEAD(&fop->locks[1].wait_list);      fop->xl = this; diff --git a/xlators/cluster/ec/src/ec-data.h b/xlators/cluster/ec/src/ec-data.h index c37bc95cde8..cc5c05aa838 100644 --- a/xlators/cluster/ec/src/ec-data.h +++ b/xlators/cluster/ec/src/ec-data.h @@ -167,6 +167,7 @@ struct _ec_lock_link  {      ec_lock_t        *lock;      ec_fop_data_t    *fop; +    struct list_head  owner_list;      struct list_head  wait_list;      gf_boolean_t      update[2];      loc_t            *base; @@ -187,7 +188,6 @@ struct _ec_fop_data      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   owner_list;   /* member of lock owner list */      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 */  | 
