[GFS2] Remove all_list from lock_dlm
I discovered that we had a list onto which every lock_dlm lock was being put. Its only function was to discover whether we'd got any locks left after umount. Since there was already a counter for that purpose as well, I removed the list. The saving is sizeof(struct list_head) per glock - well worth having. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
parent
b2cad26cfc
commit
31fcba00fe
3 changed files with 1 additions and 30 deletions
|
@ -58,9 +58,6 @@ static void gdlm_delete_lp(struct gdlm_lock *lp)
|
||||||
spin_lock(&ls->async_lock);
|
spin_lock(&ls->async_lock);
|
||||||
if (!list_empty(&lp->delay_list))
|
if (!list_empty(&lp->delay_list))
|
||||||
list_del_init(&lp->delay_list);
|
list_del_init(&lp->delay_list);
|
||||||
gdlm_assert(!list_empty(&lp->all_list), "%x,%llx", lp->lockname.ln_type,
|
|
||||||
(unsigned long long)lp->lockname.ln_number);
|
|
||||||
list_del_init(&lp->all_list);
|
|
||||||
ls->all_locks_count--;
|
ls->all_locks_count--;
|
||||||
spin_unlock(&ls->async_lock);
|
spin_unlock(&ls->async_lock);
|
||||||
|
|
||||||
|
@ -397,7 +394,6 @@ static int gdlm_create_lp(struct gdlm_ls *ls, struct lm_lockname *name,
|
||||||
INIT_LIST_HEAD(&lp->delay_list);
|
INIT_LIST_HEAD(&lp->delay_list);
|
||||||
|
|
||||||
spin_lock(&ls->async_lock);
|
spin_lock(&ls->async_lock);
|
||||||
list_add(&lp->all_list, &ls->all_locks);
|
|
||||||
ls->all_locks_count++;
|
ls->all_locks_count++;
|
||||||
spin_unlock(&ls->async_lock);
|
spin_unlock(&ls->async_lock);
|
||||||
|
|
||||||
|
@ -710,22 +706,3 @@ void gdlm_submit_delayed(struct gdlm_ls *ls)
|
||||||
wake_up(&ls->thread_wait);
|
wake_up(&ls->thread_wait);
|
||||||
}
|
}
|
||||||
|
|
||||||
int gdlm_release_all_locks(struct gdlm_ls *ls)
|
|
||||||
{
|
|
||||||
struct gdlm_lock *lp, *safe;
|
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
spin_lock(&ls->async_lock);
|
|
||||||
list_for_each_entry_safe(lp, safe, &ls->all_locks, all_list) {
|
|
||||||
list_del_init(&lp->all_list);
|
|
||||||
|
|
||||||
if (lp->lvb && lp->lvb != junk_lvb)
|
|
||||||
kfree(lp->lvb);
|
|
||||||
kfree(lp);
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
spin_unlock(&ls->async_lock);
|
|
||||||
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,6 @@ struct gdlm_ls {
|
||||||
spinlock_t async_lock;
|
spinlock_t async_lock;
|
||||||
struct list_head delayed;
|
struct list_head delayed;
|
||||||
struct list_head submit;
|
struct list_head submit;
|
||||||
struct list_head all_locks;
|
|
||||||
u32 all_locks_count;
|
u32 all_locks_count;
|
||||||
wait_queue_head_t wait_control;
|
wait_queue_head_t wait_control;
|
||||||
struct task_struct *thread;
|
struct task_struct *thread;
|
||||||
|
@ -112,7 +111,6 @@ struct gdlm_lock {
|
||||||
unsigned long flags; /* lock_dlm flags LFL_ */
|
unsigned long flags; /* lock_dlm flags LFL_ */
|
||||||
|
|
||||||
struct list_head delay_list; /* delayed */
|
struct list_head delay_list; /* delayed */
|
||||||
struct list_head all_list; /* all locks for the fs */
|
|
||||||
struct gdlm_lock *hold_null; /* NL lock for hold_lvb */
|
struct gdlm_lock *hold_null; /* NL lock for hold_lvb */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,6 @@ static struct gdlm_ls *init_gdlm(lm_callback_t cb, struct gfs2_sbd *sdp,
|
||||||
spin_lock_init(&ls->async_lock);
|
spin_lock_init(&ls->async_lock);
|
||||||
INIT_LIST_HEAD(&ls->delayed);
|
INIT_LIST_HEAD(&ls->delayed);
|
||||||
INIT_LIST_HEAD(&ls->submit);
|
INIT_LIST_HEAD(&ls->submit);
|
||||||
INIT_LIST_HEAD(&ls->all_locks);
|
|
||||||
init_waitqueue_head(&ls->thread_wait);
|
init_waitqueue_head(&ls->thread_wait);
|
||||||
init_waitqueue_head(&ls->wait_control);
|
init_waitqueue_head(&ls->wait_control);
|
||||||
ls->jid = -1;
|
ls->jid = -1;
|
||||||
|
@ -173,7 +172,6 @@ static int gdlm_mount(char *table_name, char *host_data,
|
||||||
static void gdlm_unmount(void *lockspace)
|
static void gdlm_unmount(void *lockspace)
|
||||||
{
|
{
|
||||||
struct gdlm_ls *ls = lockspace;
|
struct gdlm_ls *ls = lockspace;
|
||||||
int rv;
|
|
||||||
|
|
||||||
log_debug("unmount flags %lx", ls->flags);
|
log_debug("unmount flags %lx", ls->flags);
|
||||||
|
|
||||||
|
@ -187,9 +185,7 @@ static void gdlm_unmount(void *lockspace)
|
||||||
gdlm_kobject_release(ls);
|
gdlm_kobject_release(ls);
|
||||||
dlm_release_lockspace(ls->dlm_lockspace, 2);
|
dlm_release_lockspace(ls->dlm_lockspace, 2);
|
||||||
gdlm_release_threads(ls);
|
gdlm_release_threads(ls);
|
||||||
rv = gdlm_release_all_locks(ls);
|
BUG_ON(ls->all_locks_count);
|
||||||
if (rv)
|
|
||||||
log_info("gdlm_unmount: %d stray locks freed", rv);
|
|
||||||
out:
|
out:
|
||||||
kfree(ls);
|
kfree(ls);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue