backport to buster
[hcoop/debian/openafs.git] / src / util / work_queue.h
CommitLineData
805e021f
CE
1/*
2 * Copyright 2008-2010, Sine Nomine Associates and others.
3 * All Rights Reserved.
4 *
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
8 */
9
10#ifndef AFS_UTIL_WORK_QUEUE_H
11#define AFS_UTIL_WORK_QUEUE_H 1
12
13#include "work_queue_types.h"
14
15/**
16 * public interfaces for package work_queue.
17 */
18/** @defgroup afs_work_queue Volume Package Work Queue */
19/*@{*/
20
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 */
25
26extern void afs_wq_opts_init(struct afs_work_queue_opts *);
27extern void afs_wq_opts_calc_thresh(struct afs_work_queue_opts *, int);
28extern int afs_wq_create(struct afs_work_queue **,
29 void * rock,
30 struct afs_work_queue_opts *);
31extern int afs_wq_destroy(struct afs_work_queue *);
32
33extern int afs_wq_shutdown(struct afs_work_queue *);
34
35extern int afs_wq_node_alloc(struct afs_work_queue_node **);
36extern int afs_wq_node_get(struct afs_work_queue_node *);
37extern int afs_wq_node_put(struct afs_work_queue_node *);
38extern 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);
41extern int afs_wq_node_set_detached(struct afs_work_queue_node *);
42extern int afs_wq_node_dep_add(struct afs_work_queue_node *,
43 struct afs_work_queue_node *);
44extern int afs_wq_node_dep_del(struct afs_work_queue_node *,
45 struct afs_work_queue_node *);
46extern int afs_wq_node_block(struct afs_work_queue_node *);
47extern int afs_wq_node_unblock(struct afs_work_queue_node *);
48extern void afs_wq_add_opts_init(struct afs_work_queue_add_opts *);
49extern int afs_wq_add(struct afs_work_queue *,
50 struct afs_work_queue_node *,
51 struct afs_work_queue_add_opts *);
52extern int afs_wq_del(struct afs_work_queue_node *);
53
54extern int afs_wq_do(struct afs_work_queue *,
55 void * rock);
56extern int afs_wq_do_nowait(struct afs_work_queue *,
57 void * rock);
58
59extern int afs_wq_wait_all(struct afs_work_queue *);
60extern int afs_wq_node_wait(struct afs_work_queue_node *,
61 int * retcode);
62
63/*@}*/
64#endif /* AFS_UTIL_WORK_QUEUE_H */