mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-06-29 23:43:21 -04:00
for-5.20/block-2022-07-29
-----BEGIN PGP SIGNATURE----- iQJEBAABCAAuFiEEwPw5LcreJtl1+l5K99NY+ylx4KYFAmLko3gQHGF4Ym9lQGtl cm5lbC5kawAKCRD301j7KXHgpmQaD/90NKFj4v8I456TUQyg1jimXEsL+e84E6o2 ALWVb6JzQvlPVQXNLnK5YKIunMWOTtTMz0nyB8sVRwVJVJO0P5d7QopAkZM8fkyU MK5OCzoryENw4DTc2wJS4in6cSbGylIuN74wMzlf7+M67JTImfoZQhbTMcjwzZfn b3OlL6sID7zMXwGcuOJPZyUJICCpDhzdSF9JXqKma5PQuG2SBmQyvFxJAcsoFBPc YetnoRIOIN6yBvsIZaPaYq7XI9MIvF0e67EQtyCEHj4tHpyVnyDWkeObVFULsISU gGEKbkYPvNUzRAU5Q1NBBHh1tTfkf/MaUxTuZwoEwZ/s04IGBGMmrZGyfvdfzYo6 M7NwSEg/TrUSNfTwn65mQi7uOXu1pGkJrqz84Flm8u9Qid9Vd7LExLG5p/ggnWdH 5th93MDEmtEg29e9DXpEAuS5d0t3TtSvosflaKpyfNNfr+P0rWCN6GM/uW62VUTK ls69SQh/AQJRbg64jU4xper6WhaYtSXK7TKEnxJycoEn9gYNyCcdot2uekth0xRH ChHGmRlteiqe/y4uFWn/2dcxWjoleiHbFjTaiRL75WVl8wIDEjw02LGuoZ61Ss9H WOV+MT7KqNjBGe6lreUY+O/PO02dzmoR6heJXN19p8zr/pBuLCTGX7UpO7rzgaBR 4N1HEozvIw== =celk -----END PGP SIGNATURE----- Merge tag 'for-5.20/block-2022-07-29' of git://git.kernel.dk/linux-block Pull block updates from Jens Axboe: - Improve the type checking of request flags (Bart) - Ensure queue mapping for a single queues always picks the right queue (Bart) - Sanitize the io priority handling (Jan) - rq-qos race fix (Jinke) - Reserved tags handling improvements (John) - Separate memory alignment from file/disk offset aligment for O_DIRECT (Keith) - Add new ublk driver, userspace block driver using io_uring for communication with the userspace backend (Ming) - Use try_cmpxchg() to cleanup the code in various spots (Uros) - Finally remove bdevname() (Christoph) - Clean up the zoned device handling (Christoph) - Clean up independent access range support (Christoph) - Clean up and improve block sysfs handling (Christoph) - Clean up and improve teardown of block devices. This turns the usual two step process into something that is simpler to implement and handle in block drivers (Christoph) - Clean up chunk size handling (Christoph) - Misc cleanups and fixes (Bart, Bo, Dan, GuoYong, Jason, Keith, Liu, Ming, Sebastian, Yang, Ying) * tag 'for-5.20/block-2022-07-29' of git://git.kernel.dk/linux-block: (178 commits) ublk_drv: fix double shift bug ublk_drv: make sure that correct flags(features) returned to userspace ublk_drv: fix error handling of ublk_add_dev ublk_drv: fix lockdep warning block: remove __blk_get_queue block: call blk_mq_exit_queue from disk_release for never added disks blk-mq: fix error handling in __blk_mq_alloc_disk ublk: defer disk allocation ublk: rewrite ublk_ctrl_get_queue_affinity to not rely on hctx->cpumask ublk: fold __ublk_create_dev into ublk_ctrl_add_dev ublk: cleanup ublk_ctrl_uring_cmd ublk: simplify ublk_ch_open and ublk_ch_release ublk: remove the empty open and release block device operations ublk: remove UBLK_IO_F_PREFLUSH ublk: add a MAINTAINERS entry block: don't allow the same type rq_qos add more than once mmc: fix disk/queue leak in case of adding disk failure ublk_drv: fix an IS_ERR() vs NULL check ublk: remove UBLK_IO_F_INTEGRITY ublk_drv: remove unneeded semicolon ...
This commit is contained in:
commit
c013d0af81
261 changed files with 3640 additions and 2163 deletions
161
include/uapi/linux/ublk_cmd.h
Normal file
161
include/uapi/linux/ublk_cmd.h
Normal file
|
@ -0,0 +1,161 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
#ifndef USER_BLK_DRV_CMD_INC_H
|
||||
#define USER_BLK_DRV_CMD_INC_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* ublk server command definition */
|
||||
|
||||
/*
|
||||
* Admin commands, issued by ublk server, and handled by ublk driver.
|
||||
*/
|
||||
#define UBLK_CMD_GET_QUEUE_AFFINITY 0x01
|
||||
#define UBLK_CMD_GET_DEV_INFO 0x02
|
||||
#define UBLK_CMD_ADD_DEV 0x04
|
||||
#define UBLK_CMD_DEL_DEV 0x05
|
||||
#define UBLK_CMD_START_DEV 0x06
|
||||
#define UBLK_CMD_STOP_DEV 0x07
|
||||
|
||||
/*
|
||||
* IO commands, issued by ublk server, and handled by ublk driver.
|
||||
*
|
||||
* FETCH_REQ: issued via sqe(URING_CMD) beforehand for fetching IO request
|
||||
* from ublk driver, should be issued only when starting device. After
|
||||
* the associated cqe is returned, request's tag can be retrieved via
|
||||
* cqe->userdata.
|
||||
*
|
||||
* COMMIT_AND_FETCH_REQ: issued via sqe(URING_CMD) after ublkserver handled
|
||||
* this IO request, request's handling result is committed to ublk
|
||||
* driver, meantime FETCH_REQ is piggyback, and FETCH_REQ has to be
|
||||
* handled before completing io request.
|
||||
*/
|
||||
#define UBLK_IO_FETCH_REQ 0x20
|
||||
#define UBLK_IO_COMMIT_AND_FETCH_REQ 0x21
|
||||
|
||||
/* only ABORT means that no re-fetch */
|
||||
#define UBLK_IO_RES_OK 0
|
||||
#define UBLK_IO_RES_ABORT (-ENODEV)
|
||||
|
||||
#define UBLKSRV_CMD_BUF_OFFSET 0
|
||||
#define UBLKSRV_IO_BUF_OFFSET 0x80000000
|
||||
|
||||
/* tag bit is 12bit, so at most 4096 IOs for each queue */
|
||||
#define UBLK_MAX_QUEUE_DEPTH 4096
|
||||
|
||||
/*
|
||||
* zero copy requires 4k block size, and can remap ublk driver's io
|
||||
* request into ublksrv's vm space
|
||||
*/
|
||||
#define UBLK_F_SUPPORT_ZERO_COPY (1ULL << 0)
|
||||
|
||||
/*
|
||||
* Force to complete io cmd via io_uring_cmd_complete_in_task so that
|
||||
* performance comparison is done easily with using task_work_add
|
||||
*/
|
||||
#define UBLK_F_URING_CMD_COMP_IN_TASK (1ULL << 1)
|
||||
|
||||
/* device state */
|
||||
#define UBLK_S_DEV_DEAD 0
|
||||
#define UBLK_S_DEV_LIVE 1
|
||||
|
||||
/* shipped via sqe->cmd of io_uring command */
|
||||
struct ublksrv_ctrl_cmd {
|
||||
/* sent to which device, must be valid */
|
||||
__u32 dev_id;
|
||||
|
||||
/* sent to which queue, must be -1 if the cmd isn't for queue */
|
||||
__u16 queue_id;
|
||||
/*
|
||||
* cmd specific buffer, can be IN or OUT.
|
||||
*/
|
||||
__u16 len;
|
||||
__u64 addr;
|
||||
|
||||
/* inline data */
|
||||
__u64 data[2];
|
||||
};
|
||||
|
||||
struct ublksrv_ctrl_dev_info {
|
||||
__u16 nr_hw_queues;
|
||||
__u16 queue_depth;
|
||||
__u16 block_size;
|
||||
__u16 state;
|
||||
|
||||
__u32 rq_max_blocks;
|
||||
__u32 dev_id;
|
||||
|
||||
__u64 dev_blocks;
|
||||
|
||||
__s32 ublksrv_pid;
|
||||
__s32 reserved0;
|
||||
__u64 flags;
|
||||
__u64 flags_reserved;
|
||||
|
||||
/* For ublksrv internal use, invisible to ublk driver */
|
||||
__u64 ublksrv_flags;
|
||||
__u64 reserved1[9];
|
||||
};
|
||||
|
||||
#define UBLK_IO_OP_READ 0
|
||||
#define UBLK_IO_OP_WRITE 1
|
||||
#define UBLK_IO_OP_FLUSH 2
|
||||
#define UBLK_IO_OP_DISCARD 3
|
||||
#define UBLK_IO_OP_WRITE_SAME 4
|
||||
#define UBLK_IO_OP_WRITE_ZEROES 5
|
||||
|
||||
#define UBLK_IO_F_FAILFAST_DEV (1U << 8)
|
||||
#define UBLK_IO_F_FAILFAST_TRANSPORT (1U << 9)
|
||||
#define UBLK_IO_F_FAILFAST_DRIVER (1U << 10)
|
||||
#define UBLK_IO_F_META (1U << 11)
|
||||
#define UBLK_IO_F_FUA (1U << 13)
|
||||
#define UBLK_IO_F_NOUNMAP (1U << 15)
|
||||
#define UBLK_IO_F_SWAP (1U << 16)
|
||||
|
||||
/*
|
||||
* io cmd is described by this structure, and stored in share memory, indexed
|
||||
* by request tag.
|
||||
*
|
||||
* The data is stored by ublk driver, and read by ublksrv after one fetch command
|
||||
* returns.
|
||||
*/
|
||||
struct ublksrv_io_desc {
|
||||
/* op: bit 0-7, flags: bit 8-31 */
|
||||
__u32 op_flags;
|
||||
|
||||
__u32 nr_sectors;
|
||||
|
||||
/* start sector for this io */
|
||||
__u64 start_sector;
|
||||
|
||||
/* buffer address in ublksrv daemon vm space, from ublk driver */
|
||||
__u64 addr;
|
||||
};
|
||||
|
||||
static inline __u8 ublksrv_get_op(const struct ublksrv_io_desc *iod)
|
||||
{
|
||||
return iod->op_flags & 0xff;
|
||||
}
|
||||
|
||||
static inline __u32 ublksrv_get_flags(const struct ublksrv_io_desc *iod)
|
||||
{
|
||||
return iod->op_flags >> 8;
|
||||
}
|
||||
|
||||
/* issued to ublk driver via /dev/ublkcN */
|
||||
struct ublksrv_io_cmd {
|
||||
__u16 q_id;
|
||||
|
||||
/* for fetch/commit which result */
|
||||
__u16 tag;
|
||||
|
||||
/* io result, it is valid for COMMIT* command only */
|
||||
__s32 result;
|
||||
|
||||
/*
|
||||
* userspace buffer address in ublksrv daemon process, valid for
|
||||
* FETCH* command only
|
||||
*/
|
||||
__u64 addr;
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue