diff options
Diffstat (limited to 'xlators/cluster/dht/src/dht-helper.c')
-rw-r--r-- | xlators/cluster/dht/src/dht-helper.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/xlators/cluster/dht/src/dht-helper.c b/xlators/cluster/dht/src/dht-helper.c index c25646c3c5d..f6b3362da4f 100644 --- a/xlators/cluster/dht/src/dht-helper.c +++ b/xlators/cluster/dht/src/dht-helper.c @@ -1370,6 +1370,22 @@ out: return ret; } +void +dht_set_lkowner (dht_lock_t **lk_array, int count, gf_lkowner_t *lkowner) +{ + int i = 0; + + if (!lk_array || !lkowner) + goto out; + + for (i = 0; i < count; i++) { + lk_array[i]->lk_owner = *lkowner; + } + +out: + return; +} + int dht_subvol_status (dht_conf_t *conf, xlator_t *subvol) { @@ -1415,7 +1431,7 @@ dht_inodelk_cleanup_cbk (call_frame_t *frame, void *cookie, return 0; } -static inline int32_t +inline int32_t dht_lock_count (dht_lock_t **lk_array, int lk_count) { int i = 0, locked = 0; @@ -1553,6 +1569,7 @@ dht_unlock_inodelk (call_frame_t *frame, dht_lock_t **lk_array, int lk_count, if (!local->lock.locks[i]->locked) continue; + lock_frame->root->lk_owner = local->lock.locks[i]->lk_owner; STACK_WIND_COOKIE (lock_frame, dht_unlock_inodelk_cbk, (void *)(long)i, local->lock.locks[i]->xl, @@ -1642,6 +1659,8 @@ dht_nonblocking_inodelk (call_frame_t *frame, dht_lock_t **lk_array, goto out; } + dht_set_lkowner (lk_array, lk_count, &lock_frame->root->lk_owner); + local = lock_frame->local; local->main_frame = frame; @@ -1780,6 +1799,8 @@ dht_blocking_inodelk (call_frame_t *frame, dht_lock_t **lk_array, goto out; } + dht_set_lkowner (lk_array, lk_count, &lock_frame->root->lk_owner); + local = lock_frame->local; local->main_frame = frame; |