[PATCH] NLM: cleanup for blocked locks.
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 22 Jun 2005 17:16:31 +0000 (17:16 +0000)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 22 Jun 2005 20:07:41 +0000 (16:07 -0400)
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/lockd/clntlock.c

index ef7103b8c5bd2951245a1a1f6c4639eba445efa4..44adb84183b6b4e3c56300e8142c8cd49c472582 100644 (file)
@@ -31,7 +31,7 @@ static int                    reclaimer(void *ptr);
  * This is the representation of a blocked client lock.
  */
 struct nlm_wait {
-       struct nlm_wait *       b_next;         /* linked list */
+       struct list_head        b_list;         /* linked list */
        wait_queue_head_t       b_wait;         /* where to wait on */
        struct nlm_host *       b_host;
        struct file_lock *      b_lock;         /* local file lock */
@@ -39,7 +39,7 @@ struct nlm_wait {
        u32                     b_status;       /* grant callback status */
 };
 
-static struct nlm_wait *       nlm_blocked;
+static LIST_HEAD(nlm_blocked);
 
 /*
  * Block on a lock
@@ -55,8 +55,7 @@ nlmclnt_block(struct nlm_host *host, struct file_lock *fl, u32 *statp)
        block.b_lock   = fl;
        init_waitqueue_head(&block.b_wait);
        block.b_status = NLM_LCK_BLOCKED;
-       block.b_next   = nlm_blocked;
-       nlm_blocked    = &block;
+       list_add(&block.b_list, &nlm_blocked);
 
        /* Remember pseudo nsm state */
        pstate = host->h_state;
@@ -71,12 +70,7 @@ nlmclnt_block(struct nlm_host *host, struct file_lock *fl, u32 *statp)
         */
        sleep_on_timeout(&block.b_wait, 30*HZ);
 
-       for (head = &nlm_blocked; *head; head = &(*head)->b_next) {
-               if (*head == &block) {
-                       *head = block.b_next;
-                       break;
-               }
-       }
+       list_del(&block.b_list);
 
        if (!signalled()) {
                *statp = block.b_status;
@@ -105,7 +99,7 @@ nlmclnt_grant(struct nlm_lock *lock)
         * Look up blocked request based on arguments. 
         * Warning: must not use cookie to match it!
         */
-       for (block = nlm_blocked; block; block = block->b_next) {
+       list_for_each_entry(block, &nlm_blocked, b_list) {
                if (nlm_compare_locks(block->b_lock, &lock->fl))
                        break;
        }
@@ -230,7 +224,7 @@ restart:
        host->h_reclaiming = 0;
 
        /* Now, wake up all processes that sleep on a blocked lock */
-       for (block = nlm_blocked; block; block = block->b_next) {
+       list_for_each_entry(block, &nlm_blocked, b_list) {
                if (block->b_host == host) {
                        block->b_status = NLM_LCK_DENIED_GRACE_PERIOD;
                        wake_up(&block->b_wait);