summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/dht/src/dht-helper.c
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/cluster/dht/src/dht-helper.c')
-rw-r--r--xlators/cluster/dht/src/dht-helper.c23
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;