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