ocfs2/dlm: Create and destroy the dlm->master_hash
This patch adds code to create and destroy the dlm->master_hash. Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com> Signed-off-by: Mark Fasheh <mfasheh@suse.com>
This commit is contained in:
parent
c2cd4a4433
commit
e2b66ddcce
|
@ -151,6 +151,7 @@ struct dlm_ctxt
|
||||||
unsigned long recovery_map[BITS_TO_LONGS(O2NM_MAX_NODES)];
|
unsigned long recovery_map[BITS_TO_LONGS(O2NM_MAX_NODES)];
|
||||||
struct dlm_recovery_ctxt reco;
|
struct dlm_recovery_ctxt reco;
|
||||||
spinlock_t master_lock;
|
spinlock_t master_lock;
|
||||||
|
struct hlist_head **master_hash;
|
||||||
struct list_head master_list;
|
struct list_head master_list;
|
||||||
struct list_head mle_hb_events;
|
struct list_head mle_hb_events;
|
||||||
|
|
||||||
|
@ -195,6 +196,13 @@ static inline struct hlist_head *dlm_lockres_hash(struct dlm_ctxt *dlm, unsigned
|
||||||
return dlm->lockres_hash[(i / DLM_BUCKETS_PER_PAGE) % DLM_HASH_PAGES] + (i % DLM_BUCKETS_PER_PAGE);
|
return dlm->lockres_hash[(i / DLM_BUCKETS_PER_PAGE) % DLM_HASH_PAGES] + (i % DLM_BUCKETS_PER_PAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline struct hlist_head *dlm_master_hash(struct dlm_ctxt *dlm,
|
||||||
|
unsigned i)
|
||||||
|
{
|
||||||
|
return dlm->master_hash[(i / DLM_BUCKETS_PER_PAGE) % DLM_HASH_PAGES] +
|
||||||
|
(i % DLM_BUCKETS_PER_PAGE);
|
||||||
|
}
|
||||||
|
|
||||||
/* these keventd work queue items are for less-frequently
|
/* these keventd work queue items are for less-frequently
|
||||||
* called functions that cannot be directly called from the
|
* called functions that cannot be directly called from the
|
||||||
* net message handlers for some reason, usually because
|
* net message handlers for some reason, usually because
|
||||||
|
|
|
@ -304,6 +304,9 @@ static void dlm_free_ctxt_mem(struct dlm_ctxt *dlm)
|
||||||
if (dlm->lockres_hash)
|
if (dlm->lockres_hash)
|
||||||
dlm_free_pagevec((void **)dlm->lockres_hash, DLM_HASH_PAGES);
|
dlm_free_pagevec((void **)dlm->lockres_hash, DLM_HASH_PAGES);
|
||||||
|
|
||||||
|
if (dlm->master_hash)
|
||||||
|
dlm_free_pagevec((void **)dlm->master_hash, DLM_HASH_PAGES);
|
||||||
|
|
||||||
if (dlm->name)
|
if (dlm->name)
|
||||||
kfree(dlm->name);
|
kfree(dlm->name);
|
||||||
|
|
||||||
|
@ -1534,12 +1537,27 @@ static struct dlm_ctxt *dlm_alloc_ctxt(const char *domain,
|
||||||
for (i = 0; i < DLM_HASH_BUCKETS; i++)
|
for (i = 0; i < DLM_HASH_BUCKETS; i++)
|
||||||
INIT_HLIST_HEAD(dlm_lockres_hash(dlm, i));
|
INIT_HLIST_HEAD(dlm_lockres_hash(dlm, i));
|
||||||
|
|
||||||
|
dlm->master_hash = (struct hlist_head **)
|
||||||
|
dlm_alloc_pagevec(DLM_HASH_PAGES);
|
||||||
|
if (!dlm->master_hash) {
|
||||||
|
mlog_errno(-ENOMEM);
|
||||||
|
dlm_free_pagevec((void **)dlm->lockres_hash, DLM_HASH_PAGES);
|
||||||
|
kfree(dlm->name);
|
||||||
|
kfree(dlm);
|
||||||
|
dlm = NULL;
|
||||||
|
goto leave;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < DLM_HASH_BUCKETS; i++)
|
||||||
|
INIT_HLIST_HEAD(dlm_master_hash(dlm, i));
|
||||||
|
|
||||||
strcpy(dlm->name, domain);
|
strcpy(dlm->name, domain);
|
||||||
dlm->key = key;
|
dlm->key = key;
|
||||||
dlm->node_num = o2nm_this_node();
|
dlm->node_num = o2nm_this_node();
|
||||||
|
|
||||||
ret = dlm_create_debugfs_subroot(dlm);
|
ret = dlm_create_debugfs_subroot(dlm);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
dlm_free_pagevec((void **)dlm->master_hash, DLM_HASH_PAGES);
|
||||||
dlm_free_pagevec((void **)dlm->lockres_hash, DLM_HASH_PAGES);
|
dlm_free_pagevec((void **)dlm->lockres_hash, DLM_HASH_PAGES);
|
||||||
kfree(dlm->name);
|
kfree(dlm->name);
|
||||||
kfree(dlm);
|
kfree(dlm);
|
||||||
|
|
Loading…
Reference in a new issue