mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-07 14:32:23 +00:00
ublk: zoned: support REQ_OP_ZONE_RESET_ALL
There isn't any reason to not support REQ_OP_ZONE_RESET_ALL given everything is actually handled in userspace, not mention it is pretty easy to support RESET_ALL. So enable REQ_OP_ZONE_RESET_ALL and let userspace handle it. Verified by 'tools/zbc_reset_zone -all /dev/ublkb0' in libzbc[1] with libublk-rs based ublk-zoned target prototype[2], follows command line for creating ublk-zoned: cargo run --example zoned -- add -1 1024 # add $dev_id $DEV_SIZE [1] https://github.com/westerndigitalcorporation/libzbc [2] https://github.com/ming1/libublk-rs/tree/zoned.v2 Cc: Niklas Cassel <Niklas.Cassel@wdc.com> Cc: Damien Le Moal <dlemoal@kernel.org> Cc: Andreas Hindborg <a.hindborg@samsung.com> Signed-off-by: Ming Lei <ming.lei@redhat.com> Link: https://lore.kernel.org/r/20230810124326.321472-1-ming.lei@redhat.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
eb051b2d31
commit
851e06297f
@ -251,6 +251,7 @@ static int ublk_dev_param_zoned_apply(struct ublk_device *ub)
|
||||
const struct ublk_param_zoned *p = &ub->params.zoned;
|
||||
|
||||
disk_set_zoned(ub->ub_disk, BLK_ZONED_HM);
|
||||
blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, ub->ub_disk->queue);
|
||||
blk_queue_required_elevator_features(ub->ub_disk->queue,
|
||||
ELEVATOR_F_ZBD_SEQ_WRITE);
|
||||
disk_set_max_active_zones(ub->ub_disk, p->max_active_zones);
|
||||
@ -393,6 +394,9 @@ static blk_status_t ublk_setup_iod_zoned(struct ublk_queue *ubq,
|
||||
case REQ_OP_ZONE_APPEND:
|
||||
ublk_op = UBLK_IO_OP_ZONE_APPEND;
|
||||
break;
|
||||
case REQ_OP_ZONE_RESET_ALL:
|
||||
ublk_op = UBLK_IO_OP_ZONE_RESET_ALL;
|
||||
break;
|
||||
case REQ_OP_DRV_IN:
|
||||
ublk_op = pdu->operation;
|
||||
switch (ublk_op) {
|
||||
@ -404,9 +408,8 @@ static blk_status_t ublk_setup_iod_zoned(struct ublk_queue *ubq,
|
||||
default:
|
||||
return BLK_STS_IOERR;
|
||||
}
|
||||
case REQ_OP_ZONE_RESET_ALL:
|
||||
case REQ_OP_DRV_OUT:
|
||||
/* We do not support reset_all and drv_out */
|
||||
/* We do not support drv_out */
|
||||
return BLK_STS_NOTSUPP;
|
||||
default:
|
||||
return BLK_STS_IOERR;
|
||||
|
@ -245,6 +245,7 @@ struct ublksrv_ctrl_dev_info {
|
||||
#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
|
||||
|
Loading…
Reference in New Issue
Block a user