On 2019/08/01 6:02, Chaitanya Kulkarni wrote: > This patch implements newly introduced zone reset all operation for > null_blk driver. > > Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@xxxxxxx> > --- > drivers/block/null_blk_main.c | 3 +++ > drivers/block/null_blk_zoned.c | 28 ++++++++++++++++++++++------ > 2 files changed, 25 insertions(+), 6 deletions(-) > > diff --git a/drivers/block/null_blk_main.c b/drivers/block/null_blk_main.c > index 99328ded60d1..99c56d72ff78 100644 > --- a/drivers/block/null_blk_main.c > +++ b/drivers/block/null_blk_main.c > @@ -1214,6 +1214,8 @@ static blk_status_t null_handle_cmd(struct nullb_cmd *cmd) > null_zone_write(cmd, sector, nr_sectors); > else if (op == REQ_OP_ZONE_RESET) > null_zone_reset(cmd, sector); > + else if (op == REQ_OP_ZONE_RESET_ALL) > + null_zone_reset(cmd, 0); > } > out: > /* Complete IO by inline, softirq or timer */ > @@ -1688,6 +1690,7 @@ static int null_add_dev(struct nullb_device *dev) > > blk_queue_chunk_sectors(nullb->q, dev->zone_size_sects); > nullb->q->limits.zoned = BLK_ZONED_HM; > + blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, nullb->q); > } > > nullb->q->queuedata = nullb; > diff --git a/drivers/block/null_blk_zoned.c b/drivers/block/null_blk_zoned.c > index cb28d93f2bd1..8c7f5bf81975 100644 > --- a/drivers/block/null_blk_zoned.c > +++ b/drivers/block/null_blk_zoned.c > @@ -125,12 +125,28 @@ void null_zone_reset(struct nullb_cmd *cmd, sector_t sector) > struct nullb_device *dev = cmd->nq->dev; > unsigned int zno = null_zone_no(dev, sector); > struct blk_zone *zone = &dev->zones[zno]; > + size_t i; > + > + switch (req_op(cmd->rq)) { > + case REQ_OP_ZONE_RESET_ALL: > + for (i = 0; i < dev->nr_zones; i++) { > + if (zone[i].type == BLK_ZONE_TYPE_CONVENTIONAL) > + continue; > + zone[i].cond = BLK_ZONE_COND_EMPTY; > + zone[i].wp = zone[i].start; > + } > + break; > + case REQ_OP_ZONE_RESET: > + if (zone->type == BLK_ZONE_TYPE_CONVENTIONAL) { > + cmd->error = BLK_STS_IOERR; > + return; > + } > > - if (zone->type == BLK_ZONE_TYPE_CONVENTIONAL) { > - cmd->error = BLK_STS_IOERR; > - return; > + zone->cond = BLK_ZONE_COND_EMPTY; > + zone->wp = zone->start; > + break; > + default: > + cmd->error = BLK_STS_NOTSUPP; > + break; > } > - > - zone->cond = BLK_ZONE_COND_EMPTY; > - zone->wp = zone->start; > } > Reviewed-by: Damien Le Moal <damien.lemoal@xxxxxxx> -- Damien Le Moal Western Digital Research