diff options
author | Patrick Caulfield <pcaulfie@redhat.com> | 2006-04-25 14:49:01 -0400 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2006-04-25 14:49:01 -0400 |
commit | 714dc65c34385afbc21342f5bee8d0d25027ac9a (patch) | |
tree | 152697e333a34e4ce7502291527a8afe28996274 /fs/dlm | |
parent | 96c2c0083d76ca80d546a53089c86e74fbfbe791 (diff) |
[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: Patrick Caulfield <pcaulfie@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/dlm')
-rw-r--r-- | fs/dlm/device.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/fs/dlm/device.c b/fs/dlm/device.c index 99d8b6b07fba..5da4b2ed988d 100644 --- a/fs/dlm/device.c +++ b/fs/dlm/device.c @@ -79,7 +79,7 @@ struct lock_info { struct list_head li_ownerqueue; struct file_info *li_file; struct dlm_lksb __user *li_user_lksb; - struct semaphore li_firstlock; + struct completion li_firstcomp; }; /* A queued AST no less */ @@ -376,8 +376,7 @@ static void ast_routine(void *param) li->li_lksb.sb_status != 0) { /* Wait till dlm_lock() has finished */ - down(&li->li_firstlock); - up(&li->li_firstlock); + wait_for_completion(&li->li_firstcomp); spin_lock(&li->li_file->fi_li_lock); list_del(&li->li_ownerqueue); @@ -808,10 +807,10 @@ static int do_user_lock(struct file_info *fi, uint8_t cmd, li->li_castaddr = kparams->castaddr; 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 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); add_lockinfo(li); @@ -839,10 +838,10 @@ static int do_user_lock(struct file_info *fi, uint8_t cmd, if (!li) 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 when the initial lock fails */ - init_MUTEX_LOCKED(&li->li_firstlock); + init_completion(&li->li_firstcomp); set_bit(LI_FLAG_FIRSTLOCK, &li->li_flags); } @@ -892,7 +891,7 @@ static int do_user_lock(struct file_info *fi, uint8_t cmd, if (add_lockinfo(li)) printk(KERN_WARNING "Add lockinfo failed\n"); - up(&li->li_firstlock); + complete(&li->li_firstcomp); } /* 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, /* Wait until dlm_lock() has completed */ if (!test_bit(LI_FLAG_ONLIST, &li->li_flags)) { - down(&li->li_firstlock); - up(&li->li_firstlock); + wait_for_completion(&li->li_firstcomp); } /* dlm_unlock() passes a 0 for castaddr which means don't overwrite |