X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fafs%2Fkafsasyncd.c;h=615df2407cb2ec5f166d81e3e4dbe9837c38506c;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=9c88da3be429da9012894931e969516464f3bb16;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/fs/afs/kafsasyncd.c b/fs/afs/kafsasyncd.c index 9c88da3be..615df2407 100644 --- a/fs/afs/kafsasyncd.c +++ b/fs/afs/kafsasyncd.c @@ -20,6 +20,7 @@ #include #include #include +#include #include "cell.h" #include "server.h" #include "volume.h" @@ -39,7 +40,7 @@ static int kafsasyncd(void *arg); static LIST_HEAD(kafsasyncd_async_attnq); static LIST_HEAD(kafsasyncd_async_busyq); -static spinlock_t kafsasyncd_async_lock = SPIN_LOCK_UNLOCKED; +static DEFINE_SPINLOCK(kafsasyncd_async_lock); static void kafsasyncd_null_call_attn_func(struct rxrpc_call *call) { @@ -116,6 +117,8 @@ static int kafsasyncd(void *arg) remove_wait_queue(&kafsasyncd_sleepq, &myself); set_current_state(TASK_RUNNING); + try_to_freeze(); + /* discard pending signals */ afs_discard_my_signals(); @@ -134,8 +137,7 @@ static int kafsasyncd(void *arg) if (!list_empty(&kafsasyncd_async_attnq)) { op = list_entry(kafsasyncd_async_attnq.next, struct afs_async_op, link); - list_del(&op->link); - list_add_tail(&op->link, + list_move_tail(&op->link, &kafsasyncd_async_busyq); } @@ -202,8 +204,7 @@ void afs_kafsasyncd_begin_op(struct afs_async_op *op) init_waitqueue_entry(&op->waiter, kafsasyncd_task); add_wait_queue(&op->call->waitq, &op->waiter); - list_del(&op->link); - list_add_tail(&op->link, &kafsasyncd_async_busyq); + list_move_tail(&op->link, &kafsasyncd_async_busyq); spin_unlock(&kafsasyncd_async_lock); @@ -221,8 +222,7 @@ void afs_kafsasyncd_attend_op(struct afs_async_op *op) spin_lock(&kafsasyncd_async_lock); - list_del(&op->link); - list_add_tail(&op->link, &kafsasyncd_async_attnq); + list_move_tail(&op->link, &kafsasyncd_async_attnq); spin_unlock(&kafsasyncd_async_lock);