2022-05-26 05:31:09 +03:00
// SPDX-License-Identifier: GPL-2.0
# ifndef IOU_OP_DEF_H
# define IOU_OP_DEF_H
2023-01-12 17:44:10 +03:00
struct io_issue_def {
2022-05-26 05:31:09 +03:00
/* needs req->file assigned */
unsigned needs_file : 1 ;
/* should block plug */
unsigned plug : 1 ;
/* hash wq insertion if file is a regular file */
unsigned hash_reg_file : 1 ;
/* unbound wq insertion if file is a non-regular file */
unsigned unbound_nonreg_file : 1 ;
/* set if opcode supports polled "wait" */
unsigned pollin : 1 ;
unsigned pollout : 1 ;
unsigned poll_exclusive : 1 ;
/* op supports buffer selection */
unsigned buffer_select : 1 ;
/* opcode is not supported by this kernel */
unsigned not_supported : 1 ;
/* skip auditing */
unsigned audit_skip : 1 ;
/* supports ioprio */
unsigned ioprio : 1 ;
/* supports iopoll */
unsigned iopoll : 1 ;
2022-12-07 06:53:26 +03:00
/* have to be put into the iopoll list */
unsigned iopoll_queue : 1 ;
2022-08-24 15:07:42 +03:00
/* opcode specific path will handle ->async_data allocation if needed */
unsigned manual_alloc : 1 ;
2023-09-11 22:46:07 +03:00
/* vectored opcode, set if 1) vectored, and 2) handler needs to know */
unsigned vectored : 1 ;
2023-01-12 17:44:11 +03:00
int ( * issue ) ( struct io_kiocb * , unsigned int ) ;
int ( * prep ) ( struct io_kiocb * , const struct io_uring_sqe * ) ;
} ;
struct io_cold_def {
2022-05-26 05:31:09 +03:00
/* size of async data needed, if any */
unsigned short async_size ;
const char * name ;
int ( * prep_async ) ( struct io_kiocb * ) ;
void ( * cleanup ) ( struct io_kiocb * ) ;
2022-09-21 14:17:46 +03:00
void ( * fail ) ( struct io_kiocb * ) ;
2022-05-26 05:31:09 +03:00
} ;
2023-01-12 17:44:10 +03:00
extern const struct io_issue_def io_issue_defs [ ] ;
2023-01-12 17:44:11 +03:00
extern const struct io_cold_def io_cold_defs [ ] ;
2022-06-16 01:27:42 +03:00
void io_uring_optable_init ( void ) ;
2022-05-26 05:31:09 +03:00
# endif