include/linux/io_uring/cmd.h

Source file repositories/reference/linux-study-clean/include/linux/io_uring/cmd.h

File Facts

System
Linux kernel
Corpus path
include/linux/io_uring/cmd.h
Extension
.h
Size
5985 bytes
Lines
192
Domain
Core OS
Bucket
Core Kernel Interface
Inferred role
Core OS: implementation source
Status
source implementation candidate

Why This File Exists

Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.

Dependency Surface

Detected Declarations

Annotated Snippet

struct io_uring_cmd {
	struct file	*file;
	const struct io_uring_sqe *sqe;
	u32		cmd_op;
	u32		flags;
	u8		pdu[32]; /* available inline for free use */
	u8		unused[8];
};

#define io_uring_sqe128_cmd(sqe, type)	({					\
	BUILD_BUG_ON(sizeof(type) > ((2 * sizeof(struct io_uring_sqe)) -	\
				     offsetof(struct io_uring_sqe, cmd)));	\
	(const type *)(sqe)->cmd;						\
})

#define io_uring_sqe_cmd(sqe, type)	({					\
	BUILD_BUG_ON(sizeof(type) > (sizeof(struct io_uring_sqe) -		\
				     offsetof(struct io_uring_sqe, cmd)));	\
	(const type *)(sqe)->cmd;						\
})

static inline void io_uring_cmd_private_sz_check(size_t cmd_sz)
{
	BUILD_BUG_ON(cmd_sz > sizeof_field(struct io_uring_cmd, pdu));
}
#define io_uring_cmd_to_pdu(cmd, pdu_type) ( \
	io_uring_cmd_private_sz_check(sizeof(pdu_type)), \
	((pdu_type *)&(cmd)->pdu) \
)

#if defined(CONFIG_IO_URING)
int io_uring_cmd_import_fixed(u64 ubuf, unsigned long len, int rw,
			      struct iov_iter *iter,
			      struct io_uring_cmd *ioucmd,
			      unsigned int issue_flags);
int io_uring_cmd_import_fixed_vec(struct io_uring_cmd *ioucmd,
				  const struct iovec __user *uvec,
				  size_t uvec_segs,
				  int ddir, struct iov_iter *iter,
				  unsigned issue_flags);

/*
 * Completes the request, i.e. posts an io_uring CQE and deallocates @ioucmd
 * and the corresponding io_uring request.
 *
 * Note: the caller should never hard code @issue_flags and is only allowed
 * to pass the mask provided by the core io_uring code.
 */
void __io_uring_cmd_done(struct io_uring_cmd *cmd, s32 ret, u64 res2,
			 unsigned issue_flags, bool is_cqe32);

void __io_uring_cmd_do_in_task(struct io_uring_cmd *ioucmd,
			    io_req_tw_func_t task_work_cb,
			    unsigned flags);

/*
 * Note: the caller should never hard code @issue_flags and only use the
 * mask provided by the core io_uring code.
 */
void io_uring_cmd_mark_cancelable(struct io_uring_cmd *cmd,
		unsigned int issue_flags);

/* Execute the request from a blocking context */
void io_uring_cmd_issue_blocking(struct io_uring_cmd *ioucmd);

/*
 * Select a buffer from the provided buffer group for multishot uring_cmd.
 * Returns the selected buffer address and size.
 */
struct io_br_sel io_uring_cmd_buffer_select(struct io_uring_cmd *ioucmd,
					    unsigned buf_group, size_t *len,
					    unsigned int issue_flags);

/*
 * Complete a multishot uring_cmd event. This will post a CQE to the completion
 * queue and update the provided buffer.
 */
bool io_uring_mshot_cmd_post_cqe(struct io_uring_cmd *ioucmd,
				 struct io_br_sel *sel, unsigned int issue_flags);

#else
static inline int
io_uring_cmd_import_fixed(u64 ubuf, unsigned long len, int rw,
			  struct iov_iter *iter, struct io_uring_cmd *ioucmd,
			  unsigned int issue_flags)
{
	return -EOPNOTSUPP;
}
static inline int io_uring_cmd_import_fixed_vec(struct io_uring_cmd *ioucmd,
						const struct iovec __user *uvec,

Annotation

Implementation Notes