]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
null_blk: Fix zone reset all tracing
authorDamien Le Moal <damien.lemoal@wdc.com>
Thu, 29 Oct 2020 11:04:59 +0000 (20:04 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 5 Nov 2020 10:51:58 +0000 (11:51 +0100)
commit f9c9104288da543cd64f186f9e2fba389f415630 upstream.

In the cae of the REQ_OP_ZONE_RESET_ALL operation, the command sector is
ignored and the operation is applied to all sequential zones. For these
commands, tracing the effect of the command using the command sector to
determine the target zone is thus incorrect.

Fix null_zone_mgmt() zone condition tracing in the case of
REQ_OP_ZONE_RESET_ALL to apply tracing to all sequential zones that are
not already empty.

Fixes: 766c3297d7e1 ("null_blk: add trace in null_blk_zoned.c")
Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
Cc: stable@vger.kernel.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/block/null_blk_zoned.c

index e8d8b13aaa5adc789bc0ebe7425646864836bb05..0342696db0ce85bf3ade0086fdf3b999e5e625d8 100644 (file)
@@ -230,13 +230,15 @@ static blk_status_t null_zone_mgmt(struct nullb_cmd *cmd, enum req_opf op,
 
        switch (op) {
        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;
+               for (i = dev->zone_nr_conv; i < dev->nr_zones; i++) {
+                       zone = &dev->zones[i];
+                       if (zone->cond != BLK_ZONE_COND_EMPTY) {
+                               zone->cond = BLK_ZONE_COND_EMPTY;
+                               zone->wp = zone->start;
+                               trace_nullb_zone_op(cmd, i, zone->cond);
+                       }
                }
-               break;
+               return BLK_STS_OK;
        case REQ_OP_ZONE_RESET:
                if (zone->type == BLK_ZONE_TYPE_CONVENTIONAL)
                        return BLK_STS_IOERR;