| /* 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 */ |