Patch "null_blk: Do not allow runt zone with zone capacity smaller then zone size" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    null_blk: Do not allow runt zone with zone capacity smaller then zone size

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     null_blk-do-not-allow-runt-zone-with-zone-capacity-s.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit e76cd6f118e37dd7f62520fab8276045c3142b04
Author: Damien Le Moal <dlemoal@xxxxxxxxxx>
Date:   Thu May 30 14:40:32 2024 +0900

    null_blk: Do not allow runt zone with zone capacity smaller then zone size
    
    [ Upstream commit b164316808ec5de391c3e7b0148ec937d32d280d ]
    
    A zoned device with a smaller last zone together with a zone capacity
    smaller than the zone size does make any sense as that does not
    correspond to any possible setup for a real device:
    1) For ZNS and zoned UFS devices, all zones are always the same size.
    2) For SMR HDDs, all zones always have the same capacity.
    In other words, if we have a smaller last runt zone, then this zone
    capacity should always be equal to the zone size.
    
    Add a check in null_init_zoned_dev() to prevent a configuration to have
    both a smaller zone size and a zone capacity smaller than the zone size.
    
    Signed-off-by: Damien Le Moal <dlemoal@xxxxxxxxxx>
    Reviewed-by: Niklas Cassel <cassel@xxxxxxxxxx>
    Reviewed-by: Bart Van Assche <bvanassche@xxxxxxx>
    Link: https://lore.kernel.org/r/20240530054035.491497-2-dlemoal@xxxxxxxxxx
    Signed-off-by: Jens Axboe <axboe@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/block/null_blk/zoned.c b/drivers/block/null_blk/zoned.c
index 0cdeafd9defcf..174d93a84137b 100644
--- a/drivers/block/null_blk/zoned.c
+++ b/drivers/block/null_blk/zoned.c
@@ -80,6 +80,17 @@ int null_init_zoned_dev(struct nullb_device *dev, struct request_queue *q)
 		return -EINVAL;
 	}
 
+	/*
+	 * If a smaller zone capacity was requested, do not allow a smaller last
+	 * zone at the same time as such zone configuration does not correspond
+	 * to any real zoned device.
+	 */
+	if (dev->zone_capacity != dev->zone_size &&
+	    dev->size & (dev->zone_size - 1)) {
+		pr_err("A smaller last zone is not allowed with zone capacity smaller than zone size.\n");
+		return -EINVAL;
+	}
+
 	zone_capacity_sects = mb_to_sects(dev->zone_capacity);
 	dev_capacity_sects = mb_to_sects(dev->size);
 	dev->zone_size_sects = mb_to_sects(dev->zone_size);




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux