Symbol: flusher
drivers/md/dm-vdo/block-map.c
1542
if ((zone->flusher == NULL) && attempt_increment(zone)) {
drivers/md/dm-vdo/block-map.c
1543
zone->flusher = page;
drivers/md/dm-vdo/block-map.c
1588
if (zone->flusher == page) {
drivers/md/dm-vdo/block-map.c
1601
zone->flusher = NULL;
drivers/md/dm-vdo/block-map.c
1606
} else if ((zone->flusher == NULL) && vdo_waitq_has_waiters(&zone->flush_waiters) &&
drivers/md/dm-vdo/block-map.c
1608
zone->flusher = container_of(vdo_waitq_dequeue_waiter(&zone->flush_waiters),
drivers/md/dm-vdo/block-map.c
1610
write_page(zone->flusher, pooled);
drivers/md/dm-vdo/block-map.c
1646
if (zone->flusher == tree_page)
drivers/md/dm-vdo/block-map.c
1672
if ((zone->flusher != tree_page) &&
drivers/md/dm-vdo/block-map.c
2108
if (zone->flusher != tree_page) {
drivers/md/dm-vdo/block-map.c
2344
if (waiting && (zone->flusher == page))
drivers/md/dm-vdo/block-map.h
245
struct tree_page *flusher;
drivers/md/dm-vdo/dm-vdo-target.c
2163
vdo_drain_flusher(vdo->flusher, completion);
drivers/md/dm-vdo/dm-vdo-target.c
2532
vdo_resume_flusher(vdo->flusher, completion);
drivers/md/dm-vdo/flush.c
115
struct flusher *flusher = pool_data;
drivers/md/dm-vdo/flush.c
117
vdo_initialize_completion(&flush->completion, flusher->vdo,
drivers/md/dm-vdo/flush.c
137
int result = vdo_allocate(1, __func__, &vdo->flusher);
drivers/md/dm-vdo/flush.c
142
vdo->flusher->vdo = vdo;
drivers/md/dm-vdo/flush.c
143
vdo->flusher->thread_id = vdo->thread_config.packer_thread;
drivers/md/dm-vdo/flush.c
144
vdo_set_admin_state_code(&vdo->flusher->state, VDO_ADMIN_STATE_NORMAL_OPERATION);
drivers/md/dm-vdo/flush.c
145
vdo_initialize_completion(&vdo->flusher->completion, vdo,
drivers/md/dm-vdo/flush.c
148
spin_lock_init(&vdo->flusher->lock);
drivers/md/dm-vdo/flush.c
149
bio_list_init(&vdo->flusher->waiting_flush_bios);
drivers/md/dm-vdo/flush.c
150
vdo->flusher->flush_pool = mempool_create(1, allocate_flush, free_flush,
drivers/md/dm-vdo/flush.c
151
vdo->flusher);
drivers/md/dm-vdo/flush.c
152
return ((vdo->flusher->flush_pool == NULL) ? -ENOMEM : VDO_SUCCESS);
drivers/md/dm-vdo/flush.c
159
void vdo_free_flusher(struct flusher *flusher)
drivers/md/dm-vdo/flush.c
161
if (flusher == NULL)
drivers/md/dm-vdo/flush.c
164
if (flusher->flush_pool != NULL)
drivers/md/dm-vdo/flush.c
165
mempool_destroy(vdo_forget(flusher->flush_pool));
drivers/md/dm-vdo/flush.c
166
vdo_free(flusher);
drivers/md/dm-vdo/flush.c
176
thread_id_t vdo_get_flusher_thread_id(struct flusher *flusher)
drivers/md/dm-vdo/flush.c
178
return flusher->thread_id;
drivers/md/dm-vdo/flush.c
181
static void notify_flush(struct flusher *flusher);
drivers/md/dm-vdo/flush.c
194
struct flusher *flusher = as_flusher(completion);
drivers/md/dm-vdo/flush.c
196
assert_on_flusher_thread(flusher, __func__);
drivers/md/dm-vdo/flush.c
198
vdo_waitq_enqueue_waiter(&flusher->pending_flushes,
drivers/md/dm-vdo/flush.c
199
vdo_waitq_dequeue_waiter(&flusher->notifiers));
drivers/md/dm-vdo/flush.c
200
vdo_complete_flushes(flusher);
drivers/md/dm-vdo/flush.c
201
if (vdo_waitq_has_waiters(&flusher->notifiers))
drivers/md/dm-vdo/flush.c
202
notify_flush(flusher);
drivers/md/dm-vdo/flush.c
214
struct flusher *flusher = as_flusher(completion);
drivers/md/dm-vdo/flush.c
216
vdo_increment_packer_flush_generation(flusher->vdo->packer);
drivers/md/dm-vdo/flush.c
218
flusher->thread_id);
drivers/md/dm-vdo/flush.c
230
struct flusher *flusher = as_flusher(completion);
drivers/md/dm-vdo/flush.c
231
struct logical_zone *zone = flusher->logical_zone_to_notify;
drivers/md/dm-vdo/flush.c
233
vdo_increment_logical_zone_flush_generation(zone, flusher->notify_generation);
drivers/md/dm-vdo/flush.c
236
flusher->thread_id);
drivers/md/dm-vdo/flush.c
240
flusher->logical_zone_to_notify = zone->next;
drivers/md/dm-vdo/flush.c
242
flusher->logical_zone_to_notify->thread_id);
drivers/md/dm-vdo/flush.c
249
static void notify_flush(struct flusher *flusher)
drivers/md/dm-vdo/flush.c
252
vdo_waiter_as_flush(vdo_waitq_get_first_waiter(&flusher->notifiers));
drivers/md/dm-vdo/flush.c
254
flusher->notify_generation = flush->flush_generation;
drivers/md/dm-vdo/flush.c
255
flusher->logical_zone_to_notify = &flusher->vdo->logical_zones->zones[0];
drivers/md/dm-vdo/flush.c
256
flusher->completion.requeue = true;
drivers/md/dm-vdo/flush.c
257
vdo_launch_completion_callback(&flusher->completion, increment_generation,
drivers/md/dm-vdo/flush.c
258
flusher->logical_zone_to_notify->thread_id);
drivers/md/dm-vdo/flush.c
270
struct flusher *flusher = completion->vdo->flusher;
drivers/md/dm-vdo/flush.c
274
assert_on_flusher_thread(flusher, __func__);
drivers/md/dm-vdo/flush.c
275
result = VDO_ASSERT(vdo_is_state_normal(&flusher->state),
drivers/md/dm-vdo/flush.c
278
vdo_enter_read_only_mode(flusher->vdo, result);
drivers/md/dm-vdo/flush.c
283
flush->flush_generation = flusher->flush_generation++;
drivers/md/dm-vdo/flush.c
284
may_notify = !vdo_waitq_has_waiters(&flusher->notifiers);
drivers/md/dm-vdo/flush.c
285
vdo_waitq_enqueue_waiter(&flusher->notifiers, &flush->waiter);
drivers/md/dm-vdo/flush.c
287
notify_flush(flusher);
drivers/md/dm-vdo/flush.c
294
static void check_for_drain_complete(struct flusher *flusher)
drivers/md/dm-vdo/flush.c
298
if (!vdo_is_state_draining(&flusher->state) ||
drivers/md/dm-vdo/flush.c
299
vdo_waitq_has_waiters(&flusher->pending_flushes))
drivers/md/dm-vdo/flush.c
302
spin_lock(&flusher->lock);
drivers/md/dm-vdo/flush.c
303
drained = bio_list_empty(&flusher->waiting_flush_bios);
drivers/md/dm-vdo/flush.c
304
spin_unlock(&flusher->lock);
drivers/md/dm-vdo/flush.c
307
vdo_finish_draining(&flusher->state);
drivers/md/dm-vdo/flush.c
314
void vdo_complete_flushes(struct flusher *flusher)
drivers/md/dm-vdo/flush.c
319
assert_on_flusher_thread(flusher, __func__);
drivers/md/dm-vdo/flush.c
321
for (zone = &flusher->vdo->logical_zones->zones[0]; zone != NULL; zone = zone->next)
drivers/md/dm-vdo/flush.c
326
while (vdo_waitq_has_waiters(&flusher->pending_flushes)) {
drivers/md/dm-vdo/flush.c
328
vdo_waiter_as_flush(vdo_waitq_get_first_waiter(&flusher->pending_flushes));
drivers/md/dm-vdo/flush.c
334
flusher->first_unacknowledged_generation),
drivers/md/dm-vdo/flush.c
336
(unsigned long long) flusher->first_unacknowledged_generation,
drivers/md/dm-vdo/flush.c
338
vdo_waitq_dequeue_waiter(&flusher->pending_flushes);
drivers/md/dm-vdo/flush.c
340
flusher->first_unacknowledged_generation++;
drivers/md/dm-vdo/flush.c
343
check_for_drain_complete(flusher);
drivers/md/dm-vdo/flush.c
350
void vdo_dump_flusher(const struct flusher *flusher)
drivers/md/dm-vdo/flush.c
354
(unsigned long long) flusher->flush_generation,
drivers/md/dm-vdo/flush.c
355
(unsigned long long) flusher->first_unacknowledged_generation);
drivers/md/dm-vdo/flush.c
357
(vdo_waitq_has_waiters(&flusher->notifiers) ? "not empty" : "empty"),
drivers/md/dm-vdo/flush.c
358
(vdo_waitq_has_waiters(&flusher->pending_flushes) ? "not empty" : "empty"));
drivers/md/dm-vdo/flush.c
372
bio_list_merge_init(&flush->bios, &vdo->flusher->waiting_flush_bios);
drivers/md/dm-vdo/flush.c
398
struct vdo_flush *flush = mempool_alloc(vdo->flusher->flush_pool, GFP_NOWAIT);
drivers/md/dm-vdo/flush.c
399
struct flusher *flusher = vdo->flusher;
drivers/md/dm-vdo/flush.c
400
const struct admin_state_code *code = vdo_get_admin_state_code(&flusher->state);
drivers/md/dm-vdo/flush.c
405
spin_lock(&flusher->lock);
drivers/md/dm-vdo/flush.c
408
bio_list_add(&flusher->waiting_flush_bios, bio);
drivers/md/dm-vdo/flush.c
411
spin_unlock(&flusher->lock);
drivers/md/dm-vdo/flush.c
417
spin_unlock(&flusher->lock);
drivers/md/dm-vdo/flush.c
434
struct flusher *flusher = flush->completion.vdo->flusher;
drivers/md/dm-vdo/flush.c
436
spin_lock(&flusher->lock);
drivers/md/dm-vdo/flush.c
437
if (bio_list_empty(&flusher->waiting_flush_bios)) {
drivers/md/dm-vdo/flush.c
441
initialize_flush(flush, flusher->vdo);
drivers/md/dm-vdo/flush.c
444
spin_unlock(&flusher->lock);
drivers/md/dm-vdo/flush.c
452
mempool_free(flush, flusher->flush_pool);
drivers/md/dm-vdo/flush.c
491
static thread_id_t select_bio_queue(struct flusher *flusher)
drivers/md/dm-vdo/flush.c
493
struct vdo *vdo = flusher->vdo;
drivers/md/dm-vdo/flush.c
494
zone_count_t bio_threads = flusher->vdo->thread_config.bio_thread_count;
drivers/md/dm-vdo/flush.c
501
if (flusher->flush_count == interval) {
drivers/md/dm-vdo/flush.c
502
flusher->flush_count = 1;
drivers/md/dm-vdo/flush.c
503
flusher->bio_queue_rotor = ((flusher->bio_queue_rotor + 1) % bio_threads);
drivers/md/dm-vdo/flush.c
505
flusher->flush_count++;
drivers/md/dm-vdo/flush.c
508
return vdo->thread_config.bio_threads[flusher->bio_queue_rotor];
drivers/md/dm-vdo/flush.c
521
select_bio_queue(completion->vdo->flusher), NULL);
drivers/md/dm-vdo/flush.c
528
check_for_drain_complete(container_of(state, struct flusher, state));
drivers/md/dm-vdo/flush.c
539
void vdo_drain_flusher(struct flusher *flusher, struct vdo_completion *completion)
drivers/md/dm-vdo/flush.c
541
assert_on_flusher_thread(flusher, __func__);
drivers/md/dm-vdo/flush.c
542
vdo_start_draining(&flusher->state, VDO_ADMIN_STATE_SUSPENDING, completion,
drivers/md/dm-vdo/flush.c
551
void vdo_resume_flusher(struct flusher *flusher, struct vdo_completion *parent)
drivers/md/dm-vdo/flush.c
553
assert_on_flusher_thread(flusher, __func__);
drivers/md/dm-vdo/flush.c
554
vdo_continue_completion(parent, vdo_resume_if_quiescent(&flusher->state));
drivers/md/dm-vdo/flush.c
60
static inline void assert_on_flusher_thread(struct flusher *flusher, const char *caller)
drivers/md/dm-vdo/flush.c
62
VDO_ASSERT_LOG_ONLY((vdo_get_callback_thread_id() == flusher->thread_id),
drivers/md/dm-vdo/flush.c
72
static struct flusher *as_flusher(struct vdo_completion *completion)
drivers/md/dm-vdo/flush.c
75
return container_of(completion, struct flusher, completion);
drivers/md/dm-vdo/flush.h
26
struct flusher;
drivers/md/dm-vdo/flush.h
30
void vdo_free_flusher(struct flusher *flusher);
drivers/md/dm-vdo/flush.h
32
thread_id_t __must_check vdo_get_flusher_thread_id(struct flusher *flusher);
drivers/md/dm-vdo/flush.h
34
void vdo_complete_flushes(struct flusher *flusher);
drivers/md/dm-vdo/flush.h
36
void vdo_dump_flusher(const struct flusher *flusher);
drivers/md/dm-vdo/flush.h
40
void vdo_drain_flusher(struct flusher *flusher, struct vdo_completion *completion);
drivers/md/dm-vdo/flush.h
42
void vdo_resume_flusher(struct flusher *flusher, struct vdo_completion *parent);
drivers/md/dm-vdo/logical-zone.c
276
vdo_complete_flushes(zone->zones->vdo->flusher);
drivers/md/dm-vdo/logical-zone.c
301
vdo_get_flusher_thread_id(zone->zones->vdo->flusher));
drivers/md/dm-vdo/vdo.c
1761
vdo_dump_flusher(vdo->flusher);
drivers/md/dm-vdo/vdo.c
766
vdo_free_flusher(vdo_forget(vdo->flusher));
drivers/md/dm-vdo/vdo.h
222
struct flusher *flusher;
tools/testing/selftests/bpf/progs/cgroup_hierarchical_stats.c
84
int BPF_PROG(flusher, struct cgroup *cgrp, struct cgroup *parent, int cpu)