提交 31fcba00 编写于 作者: S Steven Whitehouse

[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: NSteven Whitehouse <swhiteho@redhat.com>
上级 b2cad26c
...@@ -58,9 +58,6 @@ static void gdlm_delete_lp(struct gdlm_lock *lp) ...@@ -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, ...@@ -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) ...@@ -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 { ...@@ -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 { ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册