The zone write pointer is unconditionally advanced, even for write
faults. Make sure that the zone is always transitioned to Full if the
write pointer reaches zone capacity.
Cc: Dmitry Fomichev <dmitry.fomichev@wdc.com>
Reviewed-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
nlb = le16_to_cpu(rw->nlb) + 1;
zone = nvme_get_zone_by_slba(ns, slba);
+ zone->d.wp += nlb;
+
if (failed) {
res->slba = 0;
- zone->d.wp += nlb;
- } else if (zone->w_ptr == nvme_zone_wr_boundary(zone)) {
+ }
+
+ if (zone->d.wp == nvme_zone_wr_boundary(zone)) {
switch (nvme_get_zone_state(zone)) {
case NVME_ZONE_STATE_IMPLICITLY_OPEN:
case NVME_ZONE_STATE_EXPLICITLY_OPEN:
default:
assert(false);
}
- zone->d.wp = zone->w_ptr;
- } else {
- zone->d.wp += nlb;
}
}