Merge tag 'for-5.20/block-2022-08-04' of git://git.kernel.dk/linux-block
Pull block driver updates from Jens Axboe: - NVMe pull requests via Christoph: - add support for In-Band authentication (Hannes Reinecke) - handle the persistent internal error AER (Michael Kelley) - use in-capsule data for TCP I/O queue connect (Caleb Sander) - remove timeout for getting RDMA-CM established event (Israel Rukshin) - misc cleanups (Joel Granados, Sagi Grimberg, Chaitanya Kulkarni, Guixin Liu, Xiang wangx) - use command_id instead of req->tag in trace_nvme_complete_rq() (Bean Huo) - various fixes for the new authentication code (Lukas Bulwahn, Dan Carpenter, Colin Ian King, Chaitanya Kulkarni, Hannes Reinecke) - small cleanups (Liu Song, Christoph Hellwig) - restore compat_ioctl support (Nick Bowler) - make a nvmet-tcp workqueue lockdep-safe (Sagi Grimberg) - enable generic interface (/dev/ngXnY) for unknown command sets (Joel Granados, Christoph Hellwig) - don't always build constants.o (Christoph Hellwig) - print the command name of aborted commands (Christoph Hellwig) - MD pull requests via Song: - Improve raid5 lock contention, by Logan Gunthorpe. - Misc fixes to raid5, by Logan Gunthorpe. - Fix race condition with md_reap_sync_thread(), by Guoqing Jiang. - Fix potential deadlock with raid5_quiesce and raid5_get_active_stripe, by Logan Gunthorpe. - Refactoring md_alloc(), by Christoph" - Fix md disk_name lifetime problems, by Christoph Hellwig - Convert prepare_to_wait() to wait_woken() api, by Logan Gunthorpe; - Fix sectors_to_do bitmap issue, by Logan Gunthorpe. - Work on unifying the null_blk module parameters and configfs API (Vincent) - drbd bitmap IO error fix (Lars) - Set of rnbd fixes (Guoqing, Md Haris) - Remove experimental marker on bcache async device registration (Coly) - Series from cleaning up the bio splitting (Christoph) - Removal of the sx8 block driver. This hardware never really widespread, and it didn't receive a lot of attention after the initial merge of it back in 2005 (Christoph) - A few fixes for s390 dasd (Eric, Jiang) - Followup set of fixes for ublk (Ming) - Support for UBLK_IO_NEED_GET_DATA for ublk (ZiyangZhang) - Fixes for the dio dma alignment (Keith) - Misc fixes and cleanups (Ming, Yu, Dan, Christophe * tag 'for-5.20/block-2022-08-04' of git://git.kernel.dk/linux-block: (136 commits) s390/dasd: Establish DMA alignment s390/dasd: drop unexpected word 'for' in comments ublk_drv: add support for UBLK_IO_NEED_GET_DATA ublk_cmd.h: add one new ublk command: UBLK_IO_NEED_GET_DATA ublk_drv: cleanup ublksrv_ctrl_dev_info ublk_drv: add SET_PARAMS/GET_PARAMS control command ublk_drv: fix ublk device leak in case that add_disk fails ublk_drv: cancel device even though disk isn't up block: fix leaking page ref on truncated direct io block: ensure bio_iov_add_page can't fail block: ensure iov_iter advances for added pages drivers:md:fix a potential use-after-free bug md/raid5: Ensure batch_last is released before sleeping for quiesce md/raid5: Move stripe_request_ctx up md/raid5: Drop unnecessary call to r5c_check_stripe_cache_usage() md/raid5: Make is_inactive_blocked() helper md/raid5: Refactor raid5_get_active_stripe() block: pass struct queue_limits to the bio splitting helpers block: move bio_allowed_max_sectors to blk-merge.c block: move the call to get_max_io_size out of blk_bio_segment_split ...
This commit is contained in:
@ -15,6 +15,8 @@
|
||||
#define UBLK_CMD_DEL_DEV 0x05
|
||||
#define UBLK_CMD_START_DEV 0x06
|
||||
#define UBLK_CMD_STOP_DEV 0x07
|
||||
#define UBLK_CMD_SET_PARAMS 0x08
|
||||
#define UBLK_CMD_GET_PARAMS 0x09
|
||||
|
||||
/*
|
||||
* IO commands, issued by ublk server, and handled by ublk driver.
|
||||
@ -28,12 +30,21 @@
|
||||
* 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.
|
||||
*
|
||||
* NEED_GET_DATA: only used for write requests to set io addr and copy data
|
||||
* When NEED_GET_DATA is set, ublksrv has to issue UBLK_IO_NEED_GET_DATA
|
||||
* command after ublk driver returns UBLK_IO_RES_NEED_GET_DATA.
|
||||
*
|
||||
* It is only used if ublksrv set UBLK_F_NEED_GET_DATA flag
|
||||
* while starting a ublk device.
|
||||
*/
|
||||
#define UBLK_IO_FETCH_REQ 0x20
|
||||
#define UBLK_IO_COMMIT_AND_FETCH_REQ 0x21
|
||||
#define UBLK_IO_NEED_GET_DATA 0x22
|
||||
|
||||
/* only ABORT means that no re-fetch */
|
||||
#define UBLK_IO_RES_OK 0
|
||||
#define UBLK_IO_RES_NEED_GET_DATA 1
|
||||
#define UBLK_IO_RES_ABORT (-ENODEV)
|
||||
|
||||
#define UBLKSRV_CMD_BUF_OFFSET 0
|
||||
@ -54,6 +65,15 @@
|
||||
*/
|
||||
#define UBLK_F_URING_CMD_COMP_IN_TASK (1ULL << 1)
|
||||
|
||||
/*
|
||||
* User should issue io cmd again for write requests to
|
||||
* set io buffer address and copy data from bio vectors
|
||||
* to the userspace io buffer.
|
||||
*
|
||||
* In this mode, task_work is not used.
|
||||
*/
|
||||
#define UBLK_F_NEED_GET_DATA (1UL << 2)
|
||||
|
||||
/* device state */
|
||||
#define UBLK_S_DEV_DEAD 0
|
||||
#define UBLK_S_DEV_LIVE 1
|
||||
@ -78,22 +98,23 @@ struct ublksrv_ctrl_cmd {
|
||||
struct ublksrv_ctrl_dev_info {
|
||||
__u16 nr_hw_queues;
|
||||
__u16 queue_depth;
|
||||
__u16 block_size;
|
||||
__u16 state;
|
||||
__u16 pad0;
|
||||
|
||||
__u32 rq_max_blocks;
|
||||
__u32 max_io_buf_bytes;
|
||||
__u32 dev_id;
|
||||
|
||||
__u64 dev_blocks;
|
||||
|
||||
__s32 ublksrv_pid;
|
||||
__s32 reserved0;
|
||||
__u32 pad1;
|
||||
|
||||
__u64 flags;
|
||||
__u64 flags_reserved;
|
||||
|
||||
/* For ublksrv internal use, invisible to ublk driver */
|
||||
__u64 ublksrv_flags;
|
||||
__u64 reserved1[9];
|
||||
|
||||
__u64 reserved0;
|
||||
__u64 reserved1;
|
||||
__u64 reserved2;
|
||||
};
|
||||
|
||||
#define UBLK_IO_OP_READ 0
|
||||
@ -158,4 +179,49 @@ struct ublksrv_io_cmd {
|
||||
__u64 addr;
|
||||
};
|
||||
|
||||
struct ublk_param_basic {
|
||||
#define UBLK_ATTR_READ_ONLY (1 << 0)
|
||||
#define UBLK_ATTR_ROTATIONAL (1 << 1)
|
||||
#define UBLK_ATTR_VOLATILE_CACHE (1 << 2)
|
||||
#define UBLK_ATTR_FUA (1 << 3)
|
||||
__u32 attrs;
|
||||
__u8 logical_bs_shift;
|
||||
__u8 physical_bs_shift;
|
||||
__u8 io_opt_shift;
|
||||
__u8 io_min_shift;
|
||||
|
||||
__u32 max_sectors;
|
||||
__u32 chunk_sectors;
|
||||
|
||||
__u64 dev_sectors;
|
||||
__u64 virt_boundary_mask;
|
||||
};
|
||||
|
||||
struct ublk_param_discard {
|
||||
__u32 discard_alignment;
|
||||
|
||||
__u32 discard_granularity;
|
||||
__u32 max_discard_sectors;
|
||||
|
||||
__u32 max_write_zeroes_sectors;
|
||||
__u16 max_discard_segments;
|
||||
__u16 reserved0;
|
||||
};
|
||||
|
||||
struct ublk_params {
|
||||
/*
|
||||
* Total length of parameters, userspace has to set 'len' for both
|
||||
* SET_PARAMS and GET_PARAMS command, and driver may update len
|
||||
* if two sides use different version of 'ublk_params', same with
|
||||
* 'types' fields.
|
||||
*/
|
||||
__u32 len;
|
||||
#define UBLK_PARAM_TYPE_BASIC (1 << 0)
|
||||
#define UBLK_PARAM_TYPE_DISCARD (1 << 1)
|
||||
__u32 types; /* types of parameter included */
|
||||
|
||||
struct ublk_param_basic basic;
|
||||
struct ublk_param_discard discard;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user