On 5/19/22 09:59, Naohiro Aota wrote:
quoted
+
static int sb_log_location(struct block_device *bdev, struct blk_zone *zones,
- int rw, u64 *bytenr_ret)
+ int rw, int mirror, u64 *bytenr_ret)
{
u64 wp;
int ret;
+ bool zones_empty = false;
if (zones[0].type == BLK_ZONE_TYPE_CONVENTIONAL) {
*bytenr_ret = zones[0].start << SECTOR_SHIFT;@@ -775,13 +808,31 @@ static int sb_log_location(struct block_device *bdev, struct blk_zone *zones,
if (ret != -ENOENT && ret < 0)
return ret;
+ if (ret == -ENOENT)
+ zones_empty = true;
+
I think, we don't need this. We need to issue the zeroout when
zones[0]->cond == BLK_ZONE_COND_EMPTY && !is_power_of_2(...) after sending
ZONE_RESET if necessary. No?
Yeah. I added this extra check to cover all the cases possible. But you
are right that it is enough to issue zeroout only for this condition:
zones[0]->cond == BLK_ZONE_COND_EMPTY && !is_power_of_2(...) as both the
zones empty is not likely to happen.
quoted
if (rw == WRITE) {
struct blk_zone *reset = NULL;
+ bool is_sb_offset_write_req = false;
+ u32 reset_zone_nr = -1;
- if (wp == zones[0].start << SECTOR_SHIFT)
+ if (wp == zones[0].start << SECTOR_SHIFT) {
reset = &zones[0];
- else if (wp == zones[1].start << SECTOR_SHIFT)
+ reset_zone_nr = 0;