xref: /titanic_52/usr/src/uts/common/fs/zfs/sys/bqueue.h (revision a2cdcdd260232b58202b11a9bfc0103c9449ed52)
1*a2cdcdd2SPaul Dagnelie /*
2*a2cdcdd2SPaul Dagnelie  * CDDL HEADER START
3*a2cdcdd2SPaul Dagnelie  *
4*a2cdcdd2SPaul Dagnelie  * This file and its contents are supplied under the terms of the
5*a2cdcdd2SPaul Dagnelie  * Common Development and Distribution License ("CDDL"), version 1.0.
6*a2cdcdd2SPaul Dagnelie  * You may only use this file in accordance with the terms of version
7*a2cdcdd2SPaul Dagnelie  * 1.0 of the CDDL.
8*a2cdcdd2SPaul Dagnelie  *
9*a2cdcdd2SPaul Dagnelie  * A full copy of the text of the CDDL should have accompanied this
10*a2cdcdd2SPaul Dagnelie  * source.  A copy of the CDDL is also available via the Internet at
11*a2cdcdd2SPaul Dagnelie  * http://www.illumos.org/license/CDDL.
12*a2cdcdd2SPaul Dagnelie  *
13*a2cdcdd2SPaul Dagnelie  * CDDL HEADER END
14*a2cdcdd2SPaul Dagnelie  */
15*a2cdcdd2SPaul Dagnelie /*
16*a2cdcdd2SPaul Dagnelie  * Copyright (c) 2014 by Delphix. All rights reserved.
17*a2cdcdd2SPaul Dagnelie  */
18*a2cdcdd2SPaul Dagnelie 
19*a2cdcdd2SPaul Dagnelie #ifndef	_BQUEUE_H
20*a2cdcdd2SPaul Dagnelie #define	_BQUEUE_H
21*a2cdcdd2SPaul Dagnelie 
22*a2cdcdd2SPaul Dagnelie #ifdef	__cplusplus
23*a2cdcdd2SPaul Dagnelie extern "C" {
24*a2cdcdd2SPaul Dagnelie #endif
25*a2cdcdd2SPaul Dagnelie 
26*a2cdcdd2SPaul Dagnelie #include	<sys/zfs_context.h>
27*a2cdcdd2SPaul Dagnelie 
28*a2cdcdd2SPaul Dagnelie typedef struct bqueue {
29*a2cdcdd2SPaul Dagnelie 	list_t bq_list;
30*a2cdcdd2SPaul Dagnelie 	kmutex_t bq_lock;
31*a2cdcdd2SPaul Dagnelie 	kcondvar_t bq_add_cv;
32*a2cdcdd2SPaul Dagnelie 	kcondvar_t bq_pop_cv;
33*a2cdcdd2SPaul Dagnelie 	uint64_t bq_size;
34*a2cdcdd2SPaul Dagnelie 	uint64_t bq_maxsize;
35*a2cdcdd2SPaul Dagnelie 	size_t bq_node_offset;
36*a2cdcdd2SPaul Dagnelie } bqueue_t;
37*a2cdcdd2SPaul Dagnelie 
38*a2cdcdd2SPaul Dagnelie typedef struct bqueue_node {
39*a2cdcdd2SPaul Dagnelie 	list_node_t bqn_node;
40*a2cdcdd2SPaul Dagnelie 	uint64_t bqn_size;
41*a2cdcdd2SPaul Dagnelie } bqueue_node_t;
42*a2cdcdd2SPaul Dagnelie 
43*a2cdcdd2SPaul Dagnelie 
44*a2cdcdd2SPaul Dagnelie int bqueue_init(bqueue_t *, uint64_t, size_t);
45*a2cdcdd2SPaul Dagnelie void bqueue_destroy(bqueue_t *);
46*a2cdcdd2SPaul Dagnelie void bqueue_enqueue(bqueue_t *, void *, uint64_t);
47*a2cdcdd2SPaul Dagnelie void *bqueue_dequeue(bqueue_t *);
48*a2cdcdd2SPaul Dagnelie boolean_t bqueue_empty(bqueue_t *);
49*a2cdcdd2SPaul Dagnelie 
50*a2cdcdd2SPaul Dagnelie #ifdef	__cplusplus
51*a2cdcdd2SPaul Dagnelie }
52*a2cdcdd2SPaul Dagnelie #endif
53*a2cdcdd2SPaul Dagnelie 
54*a2cdcdd2SPaul Dagnelie #endif	/* _BQUEUE_H */
55