Browse Source

SUNRPC: Run rpci->queue_timeout on the rpciod workqueue instead of generic

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Trond Myklebust 19 years ago
parent
commit
24c5d9d7ea
3 changed files with 5 additions and 3 deletions
  1. 1 0
      include/linux/sunrpc/sched.h
  2. 3 2
      net/sunrpc/rpc_pipe.c
  3. 1 1
      net/sunrpc/sched.c

+ 1 - 0
include/linux/sunrpc/sched.h

@@ -276,6 +276,7 @@ void		rpc_show_tasks(void);
 #endif
 #endif
 int		rpc_init_mempool(void);
 int		rpc_init_mempool(void);
 void		rpc_destroy_mempool(void);
 void		rpc_destroy_mempool(void);
+extern struct workqueue_struct *rpciod_workqueue;
 
 
 static inline void rpc_exit(struct rpc_task *task, int status)
 static inline void rpc_exit(struct rpc_task *task, int status)
 {
 {

+ 3 - 2
net/sunrpc/rpc_pipe.c

@@ -91,7 +91,8 @@ rpc_queue_upcall(struct inode *inode, struct rpc_pipe_msg *msg)
 		res = 0;
 		res = 0;
 	} else if (rpci->flags & RPC_PIPE_WAIT_FOR_OPEN) {
 	} else if (rpci->flags & RPC_PIPE_WAIT_FOR_OPEN) {
 		if (list_empty(&rpci->pipe))
 		if (list_empty(&rpci->pipe))
-			schedule_delayed_work(&rpci->queue_timeout,
+			queue_delayed_work(rpciod_workqueue,
+					&rpci->queue_timeout,
 					RPC_UPCALL_TIMEOUT);
 					RPC_UPCALL_TIMEOUT);
 		list_add_tail(&msg->list, &rpci->pipe);
 		list_add_tail(&msg->list, &rpci->pipe);
 		rpci->pipelen += msg->len;
 		rpci->pipelen += msg->len;
@@ -132,7 +133,7 @@ rpc_close_pipes(struct inode *inode)
 		if (ops->release_pipe)
 		if (ops->release_pipe)
 			ops->release_pipe(inode);
 			ops->release_pipe(inode);
 		cancel_delayed_work(&rpci->queue_timeout);
 		cancel_delayed_work(&rpci->queue_timeout);
-		flush_scheduled_work();
+		flush_workqueue(rpciod_workqueue);
 	}
 	}
 	rpc_inode_setowner(inode, NULL);
 	rpc_inode_setowner(inode, NULL);
 	mutex_unlock(&inode->i_mutex);
 	mutex_unlock(&inode->i_mutex);

+ 1 - 1
net/sunrpc/sched.c

@@ -64,7 +64,7 @@ static LIST_HEAD(all_tasks);
  */
  */
 static DECLARE_MUTEX(rpciod_sema);
 static DECLARE_MUTEX(rpciod_sema);
 static unsigned int		rpciod_users;
 static unsigned int		rpciod_users;
-static struct workqueue_struct *rpciod_workqueue;
+struct workqueue_struct *rpciod_workqueue;
 
 
 /*
 /*
  * Spinlock for other critical sections of code.
  * Spinlock for other critical sections of code.