2 * Copyright 2008-2010, Sine Nomine Associates and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
10 #ifndef AFS_UTIL_WORK_QUEUE_H
11 #define AFS_UTIL_WORK_QUEUE_H 1
13 #include "work_queue_types.h"
16 * public interfaces for package work_queue.
18 /** @defgroup afs_work_queue Volume Package Work Queue */
21 /* XXX move these into an et */
22 #define AFS_WQ_ERROR -1 /**< fatal error in work_queue package */
23 #define AFS_WQ_ERROR_RECOVERABLE -2 /**< soft error in work_queue package */
24 #define AFS_WQ_ERROR_RESCHEDULE -3 /**< reschedule work node for execution */
26 extern void afs_wq_opts_init(struct afs_work_queue_opts
*);
27 extern void afs_wq_opts_calc_thresh(struct afs_work_queue_opts
*, int);
28 extern int afs_wq_create(struct afs_work_queue
**,
30 struct afs_work_queue_opts
*);
31 extern int afs_wq_destroy(struct afs_work_queue
*);
33 extern int afs_wq_shutdown(struct afs_work_queue
*);
35 extern int afs_wq_node_alloc(struct afs_work_queue_node
**);
36 extern int afs_wq_node_get(struct afs_work_queue_node
*);
37 extern int afs_wq_node_put(struct afs_work_queue_node
*);
38 extern int afs_wq_node_set_callback(struct afs_work_queue_node
*,
39 afs_wq_callback_func_t
*,
40 void * rock
, afs_wq_callback_dtor_t
*dtor
);
41 extern int afs_wq_node_set_detached(struct afs_work_queue_node
*);
42 extern int afs_wq_node_dep_add(struct afs_work_queue_node
*,
43 struct afs_work_queue_node
*);
44 extern int afs_wq_node_dep_del(struct afs_work_queue_node
*,
45 struct afs_work_queue_node
*);
46 extern int afs_wq_node_block(struct afs_work_queue_node
*);
47 extern int afs_wq_node_unblock(struct afs_work_queue_node
*);
48 extern void afs_wq_add_opts_init(struct afs_work_queue_add_opts
*);
49 extern int afs_wq_add(struct afs_work_queue
*,
50 struct afs_work_queue_node
*,
51 struct afs_work_queue_add_opts
*);
52 extern int afs_wq_del(struct afs_work_queue_node
*);
54 extern int afs_wq_do(struct afs_work_queue
*,
56 extern int afs_wq_do_nowait(struct afs_work_queue
*,
59 extern int afs_wq_wait_all(struct afs_work_queue
*);
60 extern int afs_wq_node_wait(struct afs_work_queue_node
*,
64 #endif /* AFS_UTIL_WORK_QUEUE_H */