OSDN Git Service

scsi: scsi_debug: Zero clear zones at reset write pointer
authorShin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Mon, 22 Nov 2021 06:12:23 +0000 (15:12 +0900)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 23 Nov 2021 03:27:51 +0000 (22:27 -0500)
When a reset is requested the position of the write pointer is updated but
the data in the corresponding zone is not cleared. Instead scsi_debug
returns any data written before the write pointer was reset. This is an
error and prevents using scsi_debug for stale page cache testing of the
BLKRESETZONE ioctl.

Zero written data in the zone when resetting the write pointer.

Link: https://lore.kernel.org/r/20211122061223.298890-1-shinichiro.kawasaki@wdc.com
Fixes: f0d1cf9378bd ("scsi: scsi_debug: Add ZBC zone commands")
Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/scsi_debug.c

index e5cbeb7..3c0da37 100644 (file)
@@ -4657,6 +4657,7 @@ static void zbc_rwp_zone(struct sdebug_dev_info *devip,
                         struct sdeb_zone_state *zsp)
 {
        enum sdebug_z_cond zc;
+       struct sdeb_store_info *sip = devip2sip(devip, false);
 
        if (zbc_zone_is_conv(zsp))
                return;
@@ -4668,6 +4669,10 @@ static void zbc_rwp_zone(struct sdebug_dev_info *devip,
        if (zsp->z_cond == ZC4_CLOSED)
                devip->nr_closed--;
 
+       if (zsp->z_wp > zsp->z_start)
+               memset(sip->storep + zsp->z_start * sdebug_sector_size, 0,
+                      (zsp->z_wp - zsp->z_start) * sdebug_sector_size);
+
        zsp->z_non_seq_resource = false;
        zsp->z_wp = zsp->z_start;
        zsp->z_cond = ZC1_EMPTY;