for-6.6/block-2023-08-28
-----BEGIN PGP SIGNATURE-----
iQJEBAABCAAuFiEEwPw5LcreJtl1+l5K99NY+ylx4KYFAmTs08EQHGF4Ym9lQGtl
cm5lbC5kawAKCRD301j7KXHgpqa4EACu/zKE+omGXBV0Q7kEpVsChjp0ElGtSDIJ
tJfTuvnWqQjrqRv4ksmZvGdx8SkqFuXri4/7oBXlsaqeUVbIQdWJUpLErBye6nxa
lUb6nXOFWwyG94cMRYs71lN0loosjb7aiVw7oVLAIhntq3p3doFl/cyy3ndMZrUE
pZbsrWSt4QiOKhcO0TtIjfAwsr31AN51qFiNNITEiZl3UjXfkGRCK81X0yM2N8zZ
7Y0h1ldPBsZ/olNWeRyaW1uB64nKM0buR7/nDxCV/NI05nndJ34bIgo/JIj4xy0v
SiBj2+y86+oMJZt17yYENwOQdtX3hbyESGuVm9dCrO0t9/byVQxkUk0OMm65BM/l
l2d+gmMQZTbHziqfLlgq9i3i9+B4C2hsb7iBpuo7SW/FPbM45POgi3lpiZycaZyu
krQo1qwL4KSGXzGN9CabEuKDcJcXqLxqMDOyEDA3R5Kz06V9tNuM+Di/mr4vuZHK
sVHUfHuWBO9ionLlGPdc3fH/CuMqic8SHjumiAm2menBZV6cSzRDxpm6H4CyLt7y
tWmw7BNU7dfHFGd+Jw0Ld49sAuEybszEXq6qYv5uYBVfJNqDvOvEeVoQp0RN2jJA
AG30hymcZgxn9n7gkIgkPQDgIGUjnzUR8B2mE2UFU1CYVHXYXAXU55CCI5oeTkbs
d0Y/zCZf1A==
=p1bd
-----END PGP SIGNATURE-----
Merge tag 'for-6.6/block-2023-08-28' of git://git.kernel.dk/linux
Pull block updates from Jens Axboe:
"Pretty quiet round for this release. This contains:
- Add support for zoned storage to ublk (Andreas, Ming)
- Series improving performance for drivers that mark themselves as
needing a blocking context for issue (Bart)
- Cleanup the flush logic (Chengming)
- sed opal keyring support (Greg)
- Fixes and improvements to the integrity support (Jinyoung)
- Add some exports for bcachefs that we can hopefully delete again in
the future (Kent)
- deadline throttling fix (Zhiguo)
- Series allowing building the kernel without buffer_head support
(Christoph)
- Sanitize the bio page adding flow (Christoph)
- Write back cache fixes (Christoph)
- MD updates via Song:
- Fix perf regression for raid0 large sequential writes (Jan)
- Fix split bio iostat for raid0 (David)
- Various raid1 fixes (Heinz, Xueshi)
- raid6test build fixes (WANG)
- Deprecate bitmap file support (Christoph)
- Fix deadlock with md sync thread (Yu)
- Refactor md io accounting (Yu)
- Various non-urgent fixes (Li, Yu, Jack)
- Various fixes and cleanups (Arnd, Azeem, Chengming, Damien, Li,
Ming, Nitesh, Ruan, Tejun, Thomas, Xu)"
* tag 'for-6.6/block-2023-08-28' of git://git.kernel.dk/linux: (113 commits)
block: use strscpy() to instead of strncpy()
block: sed-opal: keyring support for SED keys
block: sed-opal: Implement IOC_OPAL_REVERT_LSP
block: sed-opal: Implement IOC_OPAL_DISCOVERY
blk-mq: prealloc tags when increase tagset nr_hw_queues
blk-mq: delete redundant tagset map update when fallback
blk-mq: fix tags leak when shrink nr_hw_queues
ublk: zoned: support REQ_OP_ZONE_RESET_ALL
md: raid0: account for split bio in iostat accounting
md/raid0: Fix performance regression for large sequential writes
md/raid0: Factor out helper for mapping and submitting a bio
md raid1: allow writebehind to work on any leg device set WriteMostly
md/raid1: hold the barrier until handle_read_error() finishes
md/raid1: free the r1bio before waiting for blocked rdev
md/raid1: call free_r1bio() before allow_barrier() in raid_end_bio_io()
blk-cgroup: Fix NULL deref caused by blkg_policy_data being installed before init
drivers/rnbd: restore sysfs interface to rnbd-client
md/raid5-cache: fix null-ptr-deref for r5l_flush_stripe_to_raid()
raid6: test: only check for Altivec if building on powerpc hosts
raid6: test: make sure all intermediate and artifact files are .gitignored
...
This commit is contained in:
commit
3d3dfeb3ae
101 changed files with 1685 additions and 846 deletions
|
|
@ -107,20 +107,21 @@ enum {
|
|||
/*
|
||||
* Return an I/O priority value based on a class, a level and a hint.
|
||||
*/
|
||||
static __always_inline __u16 ioprio_value(int class, int level, int hint)
|
||||
static __always_inline __u16 ioprio_value(int prioclass, int priolevel,
|
||||
int priohint)
|
||||
{
|
||||
if (IOPRIO_BAD_VALUE(class, IOPRIO_NR_CLASSES) ||
|
||||
IOPRIO_BAD_VALUE(level, IOPRIO_NR_LEVELS) ||
|
||||
IOPRIO_BAD_VALUE(hint, IOPRIO_NR_HINTS))
|
||||
if (IOPRIO_BAD_VALUE(prioclass, IOPRIO_NR_CLASSES) ||
|
||||
IOPRIO_BAD_VALUE(priolevel, IOPRIO_NR_LEVELS) ||
|
||||
IOPRIO_BAD_VALUE(priohint, IOPRIO_NR_HINTS))
|
||||
return IOPRIO_CLASS_INVALID << IOPRIO_CLASS_SHIFT;
|
||||
|
||||
return (class << IOPRIO_CLASS_SHIFT) |
|
||||
(hint << IOPRIO_HINT_SHIFT) | level;
|
||||
return (prioclass << IOPRIO_CLASS_SHIFT) |
|
||||
(priohint << IOPRIO_HINT_SHIFT) | priolevel;
|
||||
}
|
||||
|
||||
#define IOPRIO_PRIO_VALUE(class, level) \
|
||||
ioprio_value(class, level, IOPRIO_HINT_NONE)
|
||||
#define IOPRIO_PRIO_VALUE_HINT(class, level, hint) \
|
||||
ioprio_value(class, level, hint)
|
||||
#define IOPRIO_PRIO_VALUE(prioclass, priolevel) \
|
||||
ioprio_value(prioclass, priolevel, IOPRIO_HINT_NONE)
|
||||
#define IOPRIO_PRIO_VALUE_HINT(prioclass, priolevel, priohint) \
|
||||
ioprio_value(prioclass, priolevel, priohint)
|
||||
|
||||
#endif /* _UAPI_LINUX_IOPRIO_H */
|
||||
|
|
|
|||
|
|
@ -49,13 +49,23 @@ enum opal_lock_flags {
|
|||
OPAL_SAVE_FOR_LOCK = 0x01,
|
||||
};
|
||||
|
||||
enum opal_key_type {
|
||||
OPAL_INCLUDED = 0, /* key[] is the key */
|
||||
OPAL_KEYRING, /* key is in keyring */
|
||||
};
|
||||
|
||||
struct opal_key {
|
||||
__u8 lr;
|
||||
__u8 key_len;
|
||||
__u8 __align[6];
|
||||
__u8 key_type;
|
||||
__u8 __align[5];
|
||||
__u8 key[OPAL_KEY_MAX];
|
||||
};
|
||||
|
||||
enum opal_revert_lsp_opts {
|
||||
OPAL_PRESERVE = 0x01,
|
||||
};
|
||||
|
||||
struct opal_lr_act {
|
||||
struct opal_key key;
|
||||
__u32 sum;
|
||||
|
|
@ -173,6 +183,17 @@ struct opal_geometry {
|
|||
__u8 __align[3];
|
||||
};
|
||||
|
||||
struct opal_discovery {
|
||||
__u64 data;
|
||||
__u64 size;
|
||||
};
|
||||
|
||||
struct opal_revert_lsp {
|
||||
struct opal_key key;
|
||||
__u32 options;
|
||||
__u32 __pad;
|
||||
};
|
||||
|
||||
#define IOC_OPAL_SAVE _IOW('p', 220, struct opal_lock_unlock)
|
||||
#define IOC_OPAL_LOCK_UNLOCK _IOW('p', 221, struct opal_lock_unlock)
|
||||
#define IOC_OPAL_TAKE_OWNERSHIP _IOW('p', 222, struct opal_key)
|
||||
|
|
@ -192,5 +213,7 @@ struct opal_geometry {
|
|||
#define IOC_OPAL_GET_STATUS _IOR('p', 236, struct opal_status)
|
||||
#define IOC_OPAL_GET_LR_STATUS _IOW('p', 237, struct opal_lr_status)
|
||||
#define IOC_OPAL_GET_GEOMETRY _IOR('p', 238, struct opal_geometry)
|
||||
#define IOC_OPAL_DISCOVERY _IOW('p', 239, struct opal_discovery)
|
||||
#define IOC_OPAL_REVERT_LSP _IOW('p', 240, struct opal_revert_lsp)
|
||||
|
||||
#endif /* _UAPI_SED_OPAL_H */
|
||||
|
|
|
|||
|
|
@ -176,6 +176,12 @@
|
|||
/* Copy between request and user buffer by pread()/pwrite() */
|
||||
#define UBLK_F_USER_COPY (1UL << 7)
|
||||
|
||||
/*
|
||||
* User space sets this flag when setting up the device to request zoned storage support. Kernel may
|
||||
* deny the request by returning an error.
|
||||
*/
|
||||
#define UBLK_F_ZONED (1ULL << 8)
|
||||
|
||||
/* device state */
|
||||
#define UBLK_S_DEV_DEAD 0
|
||||
#define UBLK_S_DEV_LIVE 1
|
||||
|
|
@ -232,9 +238,27 @@ struct ublksrv_ctrl_dev_info {
|
|||
#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_OP_DISCARD 3
|
||||
#define UBLK_IO_OP_WRITE_SAME 4
|
||||
#define UBLK_IO_OP_WRITE_ZEROES 5
|
||||
#define UBLK_IO_OP_ZONE_OPEN 10
|
||||
#define UBLK_IO_OP_ZONE_CLOSE 11
|
||||
#define UBLK_IO_OP_ZONE_FINISH 12
|
||||
#define UBLK_IO_OP_ZONE_APPEND 13
|
||||
#define UBLK_IO_OP_ZONE_RESET_ALL 14
|
||||
#define UBLK_IO_OP_ZONE_RESET 15
|
||||
/*
|
||||
* Construct a zone report. The report request is carried in `struct
|
||||
* ublksrv_io_desc`. The `start_sector` field must be the first sector of a zone
|
||||
* and shall indicate the first zone of the report. The `nr_zones` shall
|
||||
* indicate how many zones should be reported at most. The report shall be
|
||||
* delivered as a `struct blk_zone` array. To report fewer zones than requested,
|
||||
* zero the last entry of the returned array.
|
||||
*
|
||||
* Related definitions(blk_zone, blk_zone_cond, blk_zone_type, ...) in
|
||||
* include/uapi/linux/blkzoned.h are part of ublk UAPI.
|
||||
*/
|
||||
#define UBLK_IO_OP_REPORT_ZONES 18
|
||||
|
||||
#define UBLK_IO_F_FAILFAST_DEV (1U << 8)
|
||||
#define UBLK_IO_F_FAILFAST_TRANSPORT (1U << 9)
|
||||
|
|
@ -255,7 +279,10 @@ struct ublksrv_io_desc {
|
|||
/* op: bit 0-7, flags: bit 8-31 */
|
||||
__u32 op_flags;
|
||||
|
||||
__u32 nr_sectors;
|
||||
union {
|
||||
__u32 nr_sectors;
|
||||
__u32 nr_zones; /* for UBLK_IO_OP_REPORT_ZONES */
|
||||
};
|
||||
|
||||
/* start sector for this io */
|
||||
__u64 start_sector;
|
||||
|
|
@ -284,11 +311,21 @@ struct ublksrv_io_cmd {
|
|||
/* 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;
|
||||
union {
|
||||
/*
|
||||
* userspace buffer address in ublksrv daemon process, valid for
|
||||
* FETCH* command only
|
||||
*
|
||||
* `addr` should not be used when UBLK_F_USER_COPY is enabled,
|
||||
* because userspace handles data copy by pread()/pwrite() over
|
||||
* /dev/ublkcN. But in case of UBLK_F_ZONED, this union is
|
||||
* re-used to pass back the allocated LBA for
|
||||
* UBLK_IO_OP_ZONE_APPEND which actually depends on
|
||||
* UBLK_F_USER_COPY
|
||||
*/
|
||||
__u64 addr;
|
||||
__u64 zone_append_lba;
|
||||
};
|
||||
};
|
||||
|
||||
struct ublk_param_basic {
|
||||
|
|
@ -331,6 +368,13 @@ struct ublk_param_devt {
|
|||
__u32 disk_minor;
|
||||
};
|
||||
|
||||
struct ublk_param_zoned {
|
||||
__u32 max_open_zones;
|
||||
__u32 max_active_zones;
|
||||
__u32 max_zone_append_sectors;
|
||||
__u8 reserved[20];
|
||||
};
|
||||
|
||||
struct ublk_params {
|
||||
/*
|
||||
* Total length of parameters, userspace has to set 'len' for both
|
||||
|
|
@ -342,11 +386,13 @@ struct ublk_params {
|
|||
#define UBLK_PARAM_TYPE_BASIC (1 << 0)
|
||||
#define UBLK_PARAM_TYPE_DISCARD (1 << 1)
|
||||
#define UBLK_PARAM_TYPE_DEVT (1 << 2)
|
||||
#define UBLK_PARAM_TYPE_ZONED (1 << 3)
|
||||
__u32 types; /* types of parameter included */
|
||||
|
||||
struct ublk_param_basic basic;
|
||||
struct ublk_param_discard discard;
|
||||
struct ublk_param_devt devt;
|
||||
struct ublk_param_zoned zoned;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue