[PATCH 2/2] nullblk: zoned: use lock guards
Ricardo H H Kojo
ricardo.kojo em ime.usp.br
Qui Abr 16 00:21:22 -03 2026
From: Ricardo H H Kojo <ricardo.kojo em ime.usp.br>
Use guard() and scoped_guard() for handling spin locks instead of manually
locking and unlocking. This prevents forgotten locks due to early exits.
Signed-off-by: Ricardo H H Kojo <ricardo.kojo em ime.usp.br>
Co-developed-by: Ellian Carlos <elliancarlos em gmail.com>
Signed-off-by: Ellian Carlos <elliancarlos em gmail.com>
Co-developed-by: Gabriel B L de Oliveira <gabrielblo em ime.usp.br>
Signed-off-by: Gabriel B L de Oliveira <gabrielblo em ime.usp.br>
---
drivers/block/null_blk/zoned.c | 19 ++++---------------
1 file changed, 4 insertions(+), 15 deletions(-)
diff --git a/drivers/block/null_blk/zoned.c b/drivers/block/null_blk/zoned.c
index 384bdce6a9b7..6f59531e9b1d 100644
--- a/drivers/block/null_blk/zoned.c
+++ b/drivers/block/null_blk/zoned.c
@@ -471,13 +471,12 @@ static blk_status_t null_open_zone(struct nullb_device *dev,
}
if (dev->need_zone_res_mgmt) {
- spin_lock(&dev->zone_res_lock);
+ guard(spinlock)(&dev->zone_res_lock);
switch (zone->cond) {
case BLK_ZONE_COND_EMPTY:
ret = null_check_zone_resources(dev, zone);
if (ret != BLK_STS_OK) {
- spin_unlock(&dev->zone_res_lock);
return ret;
}
break;
@@ -487,7 +486,6 @@ static blk_status_t null_open_zone(struct nullb_device *dev,
case BLK_ZONE_COND_CLOSED:
ret = null_check_zone_resources(dev, zone);
if (ret != BLK_STS_OK) {
- spin_unlock(&dev->zone_res_lock);
return ret;
}
dev->nr_zones_closed--;
@@ -497,8 +495,6 @@ static blk_status_t null_open_zone(struct nullb_device *dev,
}
dev->nr_zones_exp_open++;
-
- spin_unlock(&dev->zone_res_lock);
}
zone->cond = BLK_ZONE_COND_EXP_OPEN;
@@ -526,7 +522,7 @@ static blk_status_t null_close_zone(struct nullb_device *dev,
}
if (dev->need_zone_res_mgmt) {
- spin_lock(&dev->zone_res_lock);
+ guard(spinlock)(&dev->zone_res_lock);
switch (zone->cond) {
case BLK_ZONE_COND_IMP_OPEN:
@@ -542,7 +538,6 @@ static blk_status_t null_close_zone(struct nullb_device *dev,
if (zone->wp > zone->start)
dev->nr_zones_closed++;
- spin_unlock(&dev->zone_res_lock);
}
if (zone->wp == zone->start)
@@ -562,17 +557,15 @@ static blk_status_t null_finish_zone(struct nullb_device *dev,
return BLK_STS_IOERR;
if (dev->need_zone_res_mgmt) {
- spin_lock(&dev->zone_res_lock);
+ guard(spinlock)(&dev->zone_res_lock);
switch (zone->cond) {
case BLK_ZONE_COND_FULL:
/* Finish operation on full is not an error */
- spin_unlock(&dev->zone_res_lock);
return BLK_STS_OK;
case BLK_ZONE_COND_EMPTY:
ret = null_check_zone_resources(dev, zone);
if (ret != BLK_STS_OK) {
- spin_unlock(&dev->zone_res_lock);
return ret;
}
break;
@@ -585,13 +578,11 @@ static blk_status_t null_finish_zone(struct nullb_device *dev,
case BLK_ZONE_COND_CLOSED:
ret = null_check_zone_resources(dev, zone);
if (ret != BLK_STS_OK) {
- spin_unlock(&dev->zone_res_lock);
return ret;
}
dev->nr_zones_closed--;
break;
default:
- spin_unlock(&dev->zone_res_lock);
return BLK_STS_IOERR;
}
@@ -611,7 +602,7 @@ static blk_status_t null_reset_zone(struct nullb_device *dev,
return BLK_STS_IOERR;
if (dev->need_zone_res_mgmt) {
- spin_lock(&dev->zone_res_lock);
+ guard(spinlock)(&dev->zone_res_lock);
switch (zone->cond) {
case BLK_ZONE_COND_IMP_OPEN:
@@ -627,11 +618,9 @@ static blk_status_t null_reset_zone(struct nullb_device *dev,
case BLK_ZONE_COND_FULL:
break;
default:
- spin_unlock(&dev->zone_res_lock);
return BLK_STS_IOERR;
}
- spin_unlock(&dev->zone_res_lock);
}
zone->cond = BLK_ZONE_COND_EMPTY;
--
2.34.1
Mais detalhes sobre a lista de discussão kernel