diff options
Diffstat (limited to 'xlators/cluster/ec/src/ec-common.c')
| -rw-r--r-- | xlators/cluster/ec/src/ec-common.c | 21 | 
1 files changed, 12 insertions, 9 deletions
diff --git a/xlators/cluster/ec/src/ec-common.c b/xlators/cluster/ec/src/ec-common.c index 2e6759a2803..2b4cec406a9 100644 --- a/xlators/cluster/ec/src/ec-common.c +++ b/xlators/cluster/ec/src/ec-common.c @@ -788,10 +788,10 @@ void ec_lock_prepare_inode(ec_fop_data_t *fop, loc_t *loc, uint32_t flags)      ec_lock_prepare_inode_internal(fop, loc, flags, NULL);  } -void ec_lock_prepare_parent_inode(ec_fop_data_t *fop, loc_t *loc, +void ec_lock_prepare_parent_inode(ec_fop_data_t *fop, loc_t *loc, loc_t *base,                                    uint32_t flags)  { -    loc_t tmp, *base = NULL; +    loc_t tmp;      int32_t err;      if (fop->error != 0) { @@ -806,8 +806,9 @@ void ec_lock_prepare_parent_inode(ec_fop_data_t *fop, loc_t *loc,      }      if ((flags & EC_INODE_SIZE) != 0) { -        base = loc;          flags ^= EC_INODE_SIZE; +    } else { +            base = NULL;      }      ec_lock_prepare_inode_internal(fop, &tmp, flags, base); @@ -1442,20 +1443,21 @@ gf_boolean_t ec_lock_acquire(ec_lock_link_t *link)  {      ec_lock_t *lock;      ec_fop_data_t *fop; +    gf_lkowner_t lk_owner;      lock = link->lock;      fop = link->fop;      if (!lock->acquired) { -        ec_owner_set(fop->frame, lock); +        set_lk_owner_from_ptr(&lk_owner, lock);          ec_trace("LOCK_ACQUIRE", fop, "lock=%p, inode=%p", lock,                   lock->loc.inode);          lock->flock.l_type = F_WRLCK; -        ec_inodelk(fop->frame, fop->xl, -1, EC_MINIMUM_ALL, ec_locked, -                   link, fop->xl->name, &lock->loc, F_SETLKW, &lock->flock, -                   NULL); +        ec_inodelk(fop->frame, fop->xl, &lk_owner, -1, EC_MINIMUM_ALL, +                   ec_locked, link, fop->xl->name, &lock->loc, F_SETLKW, +                   &lock->flock, NULL);          return _gf_false;      } @@ -1760,6 +1762,7 @@ void ec_unlock_lock(ec_lock_link_t *link)  {      ec_lock_t *lock;      ec_fop_data_t *fop; +    gf_lkowner_t lk_owner;      lock = link->lock;      fop = link->fop; @@ -1767,13 +1770,13 @@ void ec_unlock_lock(ec_lock_link_t *link)      ec_clear_inode_info(fop, lock->loc.inode);      if ((lock->mask != 0) && lock->acquired) { -        ec_owner_set(fop->frame, lock); +        set_lk_owner_from_ptr(&lk_owner, lock);          lock->flock.l_type = F_UNLCK;          ec_trace("UNLOCK_INODELK", fop, "lock=%p, inode=%p", lock,                   lock->loc.inode); -        ec_inodelk(fop->frame, fop->xl, lock->mask, EC_MINIMUM_ONE, +        ec_inodelk(fop->frame, fop->xl, &lk_owner, lock->mask, EC_MINIMUM_ONE,                     ec_unlocked, link, fop->xl->name, &lock->loc, F_SETLK,                     &lock->flock, NULL);      } else {  | 
