summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/ec/src/ec-common.c
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/cluster/ec/src/ec-common.c')
-rw-r--r--xlators/cluster/ec/src/ec-common.c21
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 {