MCPcopy Create free account
hub / github.com/F-Stack/f-stack / bqueue_enqueue_impl

Function bqueue_enqueue_impl

freebsd/contrib/openzfs/module/zfs/bqueue.c:80–98  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

78}
79
80static void
81bqueue_enqueue_impl(bqueue_t *q, void *data, uint64_t item_size,
82 boolean_t flush)
83{
84 ASSERT3U(item_size, >, 0);
85 ASSERT3U(item_size, <=, q->bq_maxsize);
86 mutex_enter(&q->bq_lock);
87 obj2node(q, data)->bqn_size = item_size;
88 while (q->bq_size + item_size > q->bq_maxsize) {
89 cv_wait_sig(&q->bq_add_cv, &q->bq_lock);
90 }
91 q->bq_size += item_size;
92 list_insert_tail(&q->bq_list, data);
93 if (q->bq_size >= q->bq_maxsize / q->bq_fill_fraction)
94 cv_signal(&q->bq_pop_cv);
95 if (flush)
96 cv_broadcast(&q->bq_pop_cv);
97 mutex_exit(&q->bq_lock);
98}
99
100/*
101 * Add data to q, consuming size units of capacity. If there is insufficient

Callers 2

bqueue_enqueueFunction · 0.85
bqueue_enqueue_flushFunction · 0.85

Calls 7

mutex_enterFunction · 0.85
obj2nodeFunction · 0.85
cv_broadcastFunction · 0.85
mutex_exitFunction · 0.85
cv_wait_sigFunction · 0.50
list_insert_tailFunction · 0.50
cv_signalFunction · 0.50

Tested by

no test coverage detected