1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright 2023 Red Hat 4 */ 5 6 #ifndef VDO_IO_SUBMITTER_H 7 #define VDO_IO_SUBMITTER_H 8 9 #include <linux/bio.h> 10 11 #include "constants.h" 12 #include "types.h" 13 14 struct io_submitter; 15 16 int vdo_make_io_submitter(unsigned int thread_count, unsigned int rotation_interval, 17 unsigned int max_requests_active, struct vdo *vdo, 18 struct io_submitter **io_submitter); 19 20 void vdo_cleanup_io_submitter(struct io_submitter *io_submitter); 21 22 void vdo_free_io_submitter(struct io_submitter *io_submitter); 23 24 void vdo_submit_vio(struct vdo_completion *completion); 25 26 void vdo_submit_data_vio(struct data_vio *data_vio); 27 28 void __submit_metadata_vio(struct vio *vio, physical_block_number_t physical, 29 bio_end_io_t callback, vdo_action_fn error_handler, 30 blk_opf_t operation, char *data, int size); 31 32 static inline void vdo_submit_metadata_vio(struct vio *vio, physical_block_number_t physical, 33 bio_end_io_t callback, vdo_action_fn error_handler, 34 blk_opf_t operation) 35 { 36 __submit_metadata_vio(vio, physical, callback, error_handler, 37 operation, vio->data, vio->block_count * VDO_BLOCK_SIZE); 38 } 39 40 static inline void vdo_submit_metadata_vio_with_size(struct vio *vio, 41 physical_block_number_t physical, 42 bio_end_io_t callback, 43 vdo_action_fn error_handler, 44 blk_opf_t operation, 45 int size) 46 { 47 __submit_metadata_vio(vio, physical, callback, error_handler, 48 operation, vio->data, size); 49 } 50 51 static inline void vdo_submit_flush_vio(struct vio *vio, bio_end_io_t callback, 52 vdo_action_fn error_handler) 53 { 54 /* FIXME: Can we just use REQ_OP_FLUSH? */ 55 __submit_metadata_vio(vio, 0, callback, error_handler, 56 REQ_OP_WRITE | REQ_PREFLUSH, NULL, 0); 57 } 58 59 #endif /* VDO_IO_SUBMITTER_H */ 60