Loading fs/orangefs/devorangefs-req.c +8 −9 Original line number Diff line number Diff line Loading @@ -432,7 +432,6 @@ static ssize_t orangefs_devreq_writev(struct file *file, return -EIO; } } else { /* Change downcall status */ gossip_err("writev: could not vmalloc for trailer!\n"); dev_req_release(buffer); put_op(op); Loading @@ -453,7 +452,7 @@ static ssize_t orangefs_devreq_writev(struct file *file, */ if (op->upcall.type == ORANGEFS_VFS_OP_FILE_IO) { int timed_out = 0; DECLARE_WAITQUEUE(wait_entry, current); DEFINE_WAIT(wait_entry); /* * tell the vfs op waiting on a waitqueue Loading @@ -463,14 +462,14 @@ static ssize_t orangefs_devreq_writev(struct file *file, set_op_state_serviced(op); spin_unlock(&op->lock); add_wait_queue_exclusive(&op->io_completion_waitq, &wait_entry); wake_up_interruptible(&op->waitq); while (1) { set_current_state(TASK_INTERRUPTIBLE); spin_lock(&op->lock); prepare_to_wait_exclusive( &op->io_completion_waitq, &wait_entry, TASK_INTERRUPTIBLE); if (op->io_completed) { spin_unlock(&op->lock); break; Loading @@ -497,9 +496,9 @@ static ssize_t orangefs_devreq_writev(struct file *file, break; } set_current_state(TASK_RUNNING); remove_wait_queue(&op->io_completion_waitq, &wait_entry); spin_lock(&op->lock); finish_wait(&op->io_completion_waitq, &wait_entry); spin_unlock(&op->lock); /* NOTE: for I/O operations we handle releasing the op * object except in the case of timeout. the reason we Loading fs/orangefs/orangefs-bufmap.c +7 −8 Original line number Diff line number Diff line Loading @@ -333,19 +333,17 @@ static int wait_for_a_slot(struct slot_args *slargs, int *buffer_index) { int ret = -1; int i = 0; DECLARE_WAITQUEUE(my_wait, current); add_wait_queue_exclusive(slargs->slot_wq, &my_wait); DEFINE_WAIT(wait_entry); while (1) { set_current_state(TASK_INTERRUPTIBLE); /* * check for available desc, slot_lock is the appropriate * index_lock */ spin_lock(slargs->slot_lock); prepare_to_wait_exclusive(slargs->slot_wq, &wait_entry, TASK_INTERRUPTIBLE); for (i = 0; i < slargs->slot_count; i++) if (slargs->slot_array[i] == 0) { slargs->slot_array[i] = 1; Loading Loading @@ -383,8 +381,9 @@ static int wait_for_a_slot(struct slot_args *slargs, int *buffer_index) break; } set_current_state(TASK_RUNNING); remove_wait_queue(slargs->slot_wq, &my_wait); spin_lock(slargs->slot_lock); finish_wait(slargs->slot_wq, &wait_entry); spin_unlock(slargs->slot_lock); return ret; } Loading fs/orangefs/waitqueue.c +11 −26 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -204,11 +204,11 @@ int service_operation(struct orangefs_kernel_op_s *op, * 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. Loading @@ -225,8 +225,7 @@ int service_operation(struct orangefs_kernel_op_s *op, 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) { Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -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", Loading Loading @@ -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 Loading
fs/orangefs/devorangefs-req.c +8 −9 Original line number Diff line number Diff line Loading @@ -432,7 +432,6 @@ static ssize_t orangefs_devreq_writev(struct file *file, return -EIO; } } else { /* Change downcall status */ gossip_err("writev: could not vmalloc for trailer!\n"); dev_req_release(buffer); put_op(op); Loading @@ -453,7 +452,7 @@ static ssize_t orangefs_devreq_writev(struct file *file, */ if (op->upcall.type == ORANGEFS_VFS_OP_FILE_IO) { int timed_out = 0; DECLARE_WAITQUEUE(wait_entry, current); DEFINE_WAIT(wait_entry); /* * tell the vfs op waiting on a waitqueue Loading @@ -463,14 +462,14 @@ static ssize_t orangefs_devreq_writev(struct file *file, set_op_state_serviced(op); spin_unlock(&op->lock); add_wait_queue_exclusive(&op->io_completion_waitq, &wait_entry); wake_up_interruptible(&op->waitq); while (1) { set_current_state(TASK_INTERRUPTIBLE); spin_lock(&op->lock); prepare_to_wait_exclusive( &op->io_completion_waitq, &wait_entry, TASK_INTERRUPTIBLE); if (op->io_completed) { spin_unlock(&op->lock); break; Loading @@ -497,9 +496,9 @@ static ssize_t orangefs_devreq_writev(struct file *file, break; } set_current_state(TASK_RUNNING); remove_wait_queue(&op->io_completion_waitq, &wait_entry); spin_lock(&op->lock); finish_wait(&op->io_completion_waitq, &wait_entry); spin_unlock(&op->lock); /* NOTE: for I/O operations we handle releasing the op * object except in the case of timeout. the reason we Loading
fs/orangefs/orangefs-bufmap.c +7 −8 Original line number Diff line number Diff line Loading @@ -333,19 +333,17 @@ static int wait_for_a_slot(struct slot_args *slargs, int *buffer_index) { int ret = -1; int i = 0; DECLARE_WAITQUEUE(my_wait, current); add_wait_queue_exclusive(slargs->slot_wq, &my_wait); DEFINE_WAIT(wait_entry); while (1) { set_current_state(TASK_INTERRUPTIBLE); /* * check for available desc, slot_lock is the appropriate * index_lock */ spin_lock(slargs->slot_lock); prepare_to_wait_exclusive(slargs->slot_wq, &wait_entry, TASK_INTERRUPTIBLE); for (i = 0; i < slargs->slot_count; i++) if (slargs->slot_array[i] == 0) { slargs->slot_array[i] = 1; Loading Loading @@ -383,8 +381,9 @@ static int wait_for_a_slot(struct slot_args *slargs, int *buffer_index) break; } set_current_state(TASK_RUNNING); remove_wait_queue(slargs->slot_wq, &my_wait); spin_lock(slargs->slot_lock); finish_wait(slargs->slot_wq, &wait_entry); spin_unlock(slargs->slot_lock); return ret; } Loading
fs/orangefs/waitqueue.c +11 −26 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -204,11 +204,11 @@ int service_operation(struct orangefs_kernel_op_s *op, * 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. Loading @@ -225,8 +225,7 @@ int service_operation(struct orangefs_kernel_op_s *op, 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) { Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -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", Loading Loading @@ -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