diff options
-rw-r--r-- | xlators/features/leases/src/leases-internal.c | 26 | ||||
-rw-r--r-- | xlators/features/leases/src/leases-mem-types.h | 1 | ||||
-rw-r--r-- | xlators/features/leases/src/leases.h | 6 |
3 files changed, 27 insertions, 6 deletions
diff --git a/xlators/features/leases/src/leases-internal.c b/xlators/features/leases/src/leases-internal.c index a52bf577b75..24e8389cbc6 100644 --- a/xlators/features/leases/src/leases-internal.c +++ b/xlators/features/leases/src/leases-internal.c @@ -826,12 +826,15 @@ void recall_lease_timer_handler (struct gf_tw_timer_list *timer, void *data, unsigned long calltime) { - inode_t *inode = NULL; - lease_inode_t *lease_inode = NULL; - leases_private_t *priv = NULL; + inode_t *inode = NULL; + lease_inode_t *lease_inode = NULL; + leases_private_t *priv = NULL; + lease_timer_data_t *timer_data = NULL; - priv = THIS->private; - inode = (inode_t *)data; + timer_data = data; + + priv = timer_data->this->private; + inode = timer_data->inode; pthread_mutex_lock (&priv->mutex); { lease_inode = new_lease_inode (inode); @@ -859,6 +862,7 @@ __recall_lease (xlator_t *this, lease_inode_ctx_t *lease_ctx) int notify_ret = -1; struct gf_tw_timer_list *timer = NULL; leases_private_t *priv = NULL; + lease_timer_data_t *timer_data = NULL; if (lease_ctx->recall_in_progress) { gf_msg_debug (this->name, 0, "Lease recall is already in " @@ -896,8 +900,18 @@ __recall_lease (xlator_t *this, lease_inode_ctx_t *lease_ctx) if (!timer) { goto out; } + timer_data = GF_CALLOC (1, sizeof (*timer_data), + gf_leases_mt_timer_data_t); + if (!timer_data) { + GF_FREE (timer); + goto out; + } + + timer_data->inode = inode_ref (lease_ctx->inode); + timer_data->this = this; + timer->data = timer_data; + INIT_LIST_HEAD (&timer->entry); - timer->data = inode_ref (lease_ctx->inode); timer->expires = get_recall_lease_timeout (this); timer->function = recall_lease_timer_handler; lease_ctx->timer = timer; diff --git a/xlators/features/leases/src/leases-mem-types.h b/xlators/features/leases/src/leases-mem-types.h index 055da45be5d..d1a59c1db2e 100644 --- a/xlators/features/leases/src/leases-mem-types.h +++ b/xlators/features/leases/src/leases-mem-types.h @@ -22,6 +22,7 @@ enum gf_leases_mem_types_ { gf_leases_mt_lease_inode_ctx_t, gf_leases_mt_lease_id_entry_t, gf_leases_mt_fop_stub_t, + gf_leases_mt_timer_data_t, gf_leases_mt_end }; #endif diff --git a/xlators/features/leases/src/leases.h b/xlators/features/leases/src/leases.h index 16143691075..c779f1a67e7 100644 --- a/xlators/features/leases/src/leases.h +++ b/xlators/features/leases/src/leases.h @@ -213,6 +213,12 @@ struct __fop_stub { }; typedef struct __fop_stub fop_stub_t; +struct __lease_timer_data { + inode_t *inode; + xlator_t *this; +}; +typedef struct __lease_timer_data lease_timer_data_t; + gf_boolean_t is_leases_enabled (xlator_t *this); |