linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / fs / afs / server.c
index e94628c..62b093a 100644 (file)
@@ -123,7 +123,8 @@ int afs_server_lookup(struct afs_cell *cell, const struct in_addr *addr,
  resurrect_server:
        _debug("resurrecting server");
 
-       list_move_tail(&zombie->link, &cell->sv_list);
+       list_del(&zombie->link);
+       list_add_tail(&zombie->link, &cell->sv_list);
        afs_get_server(zombie);
        afs_kafstimod_del_timer(&zombie->timeout);
        spin_unlock(&cell->sv_gylock);
@@ -167,7 +168,8 @@ void afs_put_server(struct afs_server *server)
        }
 
        spin_lock(&cell->sv_gylock);
-       list_move_tail(&server->link, &cell->sv_graveyard);
+       list_del(&server->link);
+       list_add_tail(&server->link, &cell->sv_graveyard);
 
        /* time out in 10 secs */
        afs_kafstimod_add_timer(&server->timeout, 10 * HZ);
@@ -375,6 +377,7 @@ int afs_server_request_callslot(struct afs_server *server,
        else if (list_empty(&server->fs_callq)) {
                /* no one waiting */
                server->fs_conn_cnt[nconn]++;
+               spin_unlock(&server->fs_lock);
        }
        else {
                /* someone's waiting - dequeue them and wake them up */
@@ -392,9 +395,9 @@ int afs_server_request_callslot(struct afs_server *server,
                }
                pcallslot->ready = 1;
                wake_up_process(pcallslot->task);
+               spin_unlock(&server->fs_lock);
        }
 
-       spin_unlock(&server->fs_lock);
        rxrpc_put_connection(callslot->conn);
        callslot->conn = NULL;