mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
Orangefs: Don't wait the old-fashioned way.
Get rid of add_wait_queue, set_current_state, etc, and use the wait_event() model. Signed-off-by: Mike Marshall <hubcap@omnibond.com>
This commit is contained in:
parent
97f100277c
commit
ce6c414e17
3 changed files with 26 additions and 43 deletions
|
@ -62,7 +62,7 @@ int service_operation(struct orangefs_kernel_op_s *op,
|
|||
/* irqflags and wait_entry are only used IF the client-core aborts */
|
||||
unsigned long irqflags;
|
||||
|
||||
DECLARE_WAITQUEUE(wait_entry, current);
|
||||
DEFINE_WAIT(wait_entry);
|
||||
|
||||
op->upcall.tgid = current->tgid;
|
||||
op->upcall.pid = current->pid;
|
||||
|
@ -204,11 +204,11 @@ retry_servicing:
|
|||
* memory system can be initialized.
|
||||
*/
|
||||
spin_lock_irqsave(&op->lock, irqflags);
|
||||
add_wait_queue(&orangefs_bufmap_init_waitq, &wait_entry);
|
||||
prepare_to_wait(&orangefs_bufmap_init_waitq,
|
||||
&wait_entry,
|
||||
TASK_INTERRUPTIBLE);
|
||||
spin_unlock_irqrestore(&op->lock, irqflags);
|
||||
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
|
||||
/*
|
||||
* Wait for orangefs_bufmap_initialize() to wake me up
|
||||
* within the allotted time.
|
||||
|
@ -225,8 +225,7 @@ retry_servicing:
|
|||
get_bufmap_init());
|
||||
|
||||
spin_lock_irqsave(&op->lock, irqflags);
|
||||
remove_wait_queue(&orangefs_bufmap_init_waitq,
|
||||
&wait_entry);
|
||||
finish_wait(&orangefs_bufmap_init_waitq, &wait_entry);
|
||||
spin_unlock_irqrestore(&op->lock, irqflags);
|
||||
|
||||
if (get_bufmap_init() == 0) {
|
||||
|
@ -342,16 +341,11 @@ void orangefs_clean_up_interrupted_operation(struct orangefs_kernel_op_s *op)
|
|||
int wait_for_matching_downcall(struct orangefs_kernel_op_s *op)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
DECLARE_WAITQUEUE(wait_entry, current);
|
||||
|
||||
spin_lock(&op->lock);
|
||||
add_wait_queue(&op->waitq, &wait_entry);
|
||||
spin_unlock(&op->lock);
|
||||
DEFINE_WAIT(wait_entry);
|
||||
|
||||
while (1) {
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
|
||||
spin_lock(&op->lock);
|
||||
prepare_to_wait(&op->waitq, &wait_entry, TASK_INTERRUPTIBLE);
|
||||
if (op_state_serviced(op)) {
|
||||
spin_unlock(&op->lock);
|
||||
ret = 0;
|
||||
|
@ -434,10 +428,8 @@ int wait_for_matching_downcall(struct orangefs_kernel_op_s *op)
|
|||
break;
|
||||
}
|
||||
|
||||
set_current_state(TASK_RUNNING);
|
||||
|
||||
spin_lock(&op->lock);
|
||||
remove_wait_queue(&op->waitq, &wait_entry);
|
||||
finish_wait(&op->waitq, &wait_entry);
|
||||
spin_unlock(&op->lock);
|
||||
|
||||
return ret;
|
||||
|
@ -455,16 +447,11 @@ int wait_for_matching_downcall(struct orangefs_kernel_op_s *op)
|
|||
int wait_for_cancellation_downcall(struct orangefs_kernel_op_s *op)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
DECLARE_WAITQUEUE(wait_entry, current);
|
||||
|
||||
spin_lock(&op->lock);
|
||||
add_wait_queue(&op->waitq, &wait_entry);
|
||||
spin_unlock(&op->lock);
|
||||
DEFINE_WAIT(wait_entry);
|
||||
|
||||
while (1) {
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
|
||||
spin_lock(&op->lock);
|
||||
prepare_to_wait(&op->waitq, &wait_entry, TASK_INTERRUPTIBLE);
|
||||
if (op_state_serviced(op)) {
|
||||
gossip_debug(GOSSIP_WAIT_DEBUG,
|
||||
"%s:op-state is SERVICED.\n",
|
||||
|
@ -514,10 +501,8 @@ int wait_for_cancellation_downcall(struct orangefs_kernel_op_s *op)
|
|||
break;
|
||||
}
|
||||
|
||||
set_current_state(TASK_RUNNING);
|
||||
|
||||
spin_lock(&op->lock);
|
||||
remove_wait_queue(&op->waitq, &wait_entry);
|
||||
finish_wait(&op->waitq, &wait_entry);
|
||||
spin_unlock(&op->lock);
|
||||
|
||||
gossip_debug(GOSSIP_WAIT_DEBUG,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue