提交 714dc65c 编写于 作者: P Patrick Caulfield 提交者: Steven Whitehouse

[DLM] Convert a semaphore to a completion

Convert a semaphore into a completion in device.c.

Cc: David Teigland <teigland@redhat.com>
Cc: Andrew Morton <akpm@osdl.org>
Signed-off-by: NPatrick Caulfield <pcaulfie@redhat.com>
Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
上级 96c2c008
...@@ -79,7 +79,7 @@ struct lock_info { ...@@ -79,7 +79,7 @@ struct lock_info {
struct list_head li_ownerqueue; struct list_head li_ownerqueue;
struct file_info *li_file; struct file_info *li_file;
struct dlm_lksb __user *li_user_lksb; struct dlm_lksb __user *li_user_lksb;
struct semaphore li_firstlock; struct completion li_firstcomp;
}; };
/* A queued AST no less */ /* A queued AST no less */
...@@ -376,8 +376,7 @@ static void ast_routine(void *param) ...@@ -376,8 +376,7 @@ static void ast_routine(void *param)
li->li_lksb.sb_status != 0) { li->li_lksb.sb_status != 0) {
/* Wait till dlm_lock() has finished */ /* Wait till dlm_lock() has finished */
down(&li->li_firstlock); wait_for_completion(&li->li_firstcomp);
up(&li->li_firstlock);
spin_lock(&li->li_file->fi_li_lock); spin_lock(&li->li_file->fi_li_lock);
list_del(&li->li_ownerqueue); list_del(&li->li_ownerqueue);
...@@ -808,10 +807,10 @@ static int do_user_lock(struct file_info *fi, uint8_t cmd, ...@@ -808,10 +807,10 @@ static int do_user_lock(struct file_info *fi, uint8_t cmd,
li->li_castaddr = kparams->castaddr; li->li_castaddr = kparams->castaddr;
li->li_castparam = kparams->castparam; li->li_castparam = kparams->castparam;
/* OK, this isn;t exactly a FIRSTLOCK but it is the /* OK, this isn't exactly a FIRSTLOCK but it is the
first time we've used this lockinfo, and if things first time we've used this lockinfo, and if things
fail we want rid of it */ fail we want rid of it */
init_MUTEX_LOCKED(&li->li_firstlock); init_completion(&li->li_firstcomp);
set_bit(LI_FLAG_FIRSTLOCK, &li->li_flags); set_bit(LI_FLAG_FIRSTLOCK, &li->li_flags);
add_lockinfo(li); add_lockinfo(li);
...@@ -839,10 +838,10 @@ static int do_user_lock(struct file_info *fi, uint8_t cmd, ...@@ -839,10 +838,10 @@ static int do_user_lock(struct file_info *fi, uint8_t cmd,
if (!li) if (!li)
return -ENOMEM; return -ENOMEM;
/* semaphore to allow us to complete our work before /* Allow us to complete our work before
the AST routine runs. In fact we only need (and use) this the AST routine runs. In fact we only need (and use) this
when the initial lock fails */ when the initial lock fails */
init_MUTEX_LOCKED(&li->li_firstlock); init_completion(&li->li_firstcomp);
set_bit(LI_FLAG_FIRSTLOCK, &li->li_flags); set_bit(LI_FLAG_FIRSTLOCK, &li->li_flags);
} }
...@@ -892,7 +891,7 @@ static int do_user_lock(struct file_info *fi, uint8_t cmd, ...@@ -892,7 +891,7 @@ static int do_user_lock(struct file_info *fi, uint8_t cmd,
if (add_lockinfo(li)) if (add_lockinfo(li))
printk(KERN_WARNING "Add lockinfo failed\n"); printk(KERN_WARNING "Add lockinfo failed\n");
up(&li->li_firstlock); complete(&li->li_firstcomp);
} }
/* Return the lockid as the user needs it /now/ */ /* Return the lockid as the user needs it /now/ */
...@@ -936,8 +935,7 @@ static int do_user_unlock(struct file_info *fi, uint8_t cmd, ...@@ -936,8 +935,7 @@ static int do_user_unlock(struct file_info *fi, uint8_t cmd,
/* Wait until dlm_lock() has completed */ /* Wait until dlm_lock() has completed */
if (!test_bit(LI_FLAG_ONLIST, &li->li_flags)) { if (!test_bit(LI_FLAG_ONLIST, &li->li_flags)) {
down(&li->li_firstlock); wait_for_completion(&li->li_firstcomp);
up(&li->li_firstlock);
} }
/* dlm_unlock() passes a 0 for castaddr which means don't overwrite /* dlm_unlock() passes a 0 for castaddr which means don't overwrite
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册