/* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright 2023 Red Hat */ #ifndef VDO_FLUSH_H #define VDO_FLUSH_H #include "funnel-workqueue.h" #include "types.h" #include "vio.h" #include "wait-queue.h" /* A marker for tracking which journal entries are affected by a flush request. */ struct vdo_flush { /* The completion for enqueueing this flush request. */ struct vdo_completion completion; /* The flush bios covered by this request */ struct bio_list bios; /* The wait queue entry for this flush */ struct vdo_waiter waiter; /* Which flush this struct represents */ sequence_number_t flush_generation; }; struct flusher; int __must_check vdo_make_flusher(struct vdo *vdo); void vdo_free_flusher(struct flusher *flusher); thread_id_t __must_check vdo_get_flusher_thread_id(struct flusher *flusher); void vdo_complete_flushes(struct flusher *flusher); void vdo_dump_flusher(const struct flusher *flusher); void vdo_launch_flush(struct vdo *vdo, struct bio *bio); void vdo_drain_flusher(struct flusher *flusher, struct vdo_completion *completion); void vdo_resume_flusher(struct flusher *flusher, struct vdo_completion *parent); #endif /* VDO_FLUSH_H */