Skip to content

Commit d993592

Browse files
committed
Merge branch 'for-6.19/block' into for-next
* for-6.19/block: block: introduce bdev_zone_start() block: refactor disk_zone_wplug_sync_wp_offset() block: improve blk_zone_wp_offset()
2 parents 9f5d170 + 25976c3 commit d993592

2 files changed

Lines changed: 25 additions & 20 deletions

File tree

block/blk-zoned.c

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -800,40 +800,41 @@ static unsigned int blk_zone_wp_offset(struct blk_zone *zone)
800800
case BLK_ZONE_COND_IMP_OPEN:
801801
case BLK_ZONE_COND_EXP_OPEN:
802802
case BLK_ZONE_COND_CLOSED:
803+
case BLK_ZONE_COND_ACTIVE:
803804
return zone->wp - zone->start;
804-
case BLK_ZONE_COND_FULL:
805-
return zone->len;
806805
case BLK_ZONE_COND_EMPTY:
807806
return 0;
807+
case BLK_ZONE_COND_FULL:
808808
case BLK_ZONE_COND_NOT_WP:
809809
case BLK_ZONE_COND_OFFLINE:
810810
case BLK_ZONE_COND_READONLY:
811811
default:
812812
/*
813-
* Conventional, offline and read-only zones do not have a valid
814-
* write pointer.
813+
* Conventional, full, offline and read-only zones do not have
814+
* a valid write pointer.
815815
*/
816816
return UINT_MAX;
817817
}
818818
}
819819

820-
static void disk_zone_wplug_sync_wp_offset(struct gendisk *disk,
821-
struct blk_zone *zone)
820+
static unsigned int disk_zone_wplug_sync_wp_offset(struct gendisk *disk,
821+
struct blk_zone *zone)
822822
{
823823
struct blk_zone_wplug *zwplug;
824-
unsigned long flags;
824+
unsigned int wp_offset = blk_zone_wp_offset(zone);
825825

826826
zwplug = disk_get_zone_wplug(disk, zone->start);
827-
if (!zwplug)
828-
return;
827+
if (zwplug) {
828+
unsigned long flags;
829829

830-
spin_lock_irqsave(&zwplug->lock, flags);
831-
if (zwplug->flags & BLK_ZONE_WPLUG_NEED_WP_UPDATE)
832-
disk_zone_wplug_set_wp_offset(disk, zwplug,
833-
blk_zone_wp_offset(zone));
834-
spin_unlock_irqrestore(&zwplug->lock, flags);
830+
spin_lock_irqsave(&zwplug->lock, flags);
831+
if (zwplug->flags & BLK_ZONE_WPLUG_NEED_WP_UPDATE)
832+
disk_zone_wplug_set_wp_offset(disk, zwplug, wp_offset);
833+
spin_unlock_irqrestore(&zwplug->lock, flags);
834+
disk_put_zone_wplug(zwplug);
835+
}
835836

836-
disk_put_zone_wplug(zwplug);
837+
return wp_offset;
837838
}
838839

839840
/**
@@ -949,7 +950,7 @@ int blkdev_get_zone_info(struct block_device *bdev, sector_t sector,
949950
return -EINVAL;
950951

951952
memset(zone, 0, sizeof(*zone));
952-
sector = ALIGN_DOWN(sector, zone_sectors);
953+
sector = bdev_zone_start(bdev, sector);
953954

954955
if (!blkdev_has_cached_report_zones(bdev))
955956
return blkdev_report_zone_fallback(bdev, sector, zone);
@@ -1067,7 +1068,7 @@ int blkdev_report_zones_cached(struct block_device *bdev, sector_t sector,
10671068
return blkdev_do_report_zones(bdev, sector, nr_zones, &args);
10681069
}
10691070

1070-
for (sector = ALIGN_DOWN(sector, zone_sectors);
1071+
for (sector = bdev_zone_start(bdev, sector);
10711072
sector < capacity && idx < nr_zones;
10721073
sector += zone_sectors, idx++) {
10731074
ret = blkdev_get_zone_info(bdev, sector, &zone);
@@ -2101,9 +2102,7 @@ static int blk_revalidate_seq_zone(struct blk_zone *zone, unsigned int idx,
21012102
if (!queue_emulates_zone_append(disk->queue) || !disk->zone_wplugs_hash)
21022103
return 0;
21032104

2104-
disk_zone_wplug_sync_wp_offset(disk, zone);
2105-
2106-
wp_offset = blk_zone_wp_offset(zone);
2105+
wp_offset = disk_zone_wplug_sync_wp_offset(disk, zone);
21072106
if (!wp_offset || wp_offset >= zone->capacity)
21082107
return 0;
21092108

include/linux/blkdev.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1522,6 +1522,12 @@ static inline sector_t bdev_zone_sectors(struct block_device *bdev)
15221522
return q->limits.chunk_sectors;
15231523
}
15241524

1525+
static inline sector_t bdev_zone_start(struct block_device *bdev,
1526+
sector_t sector)
1527+
{
1528+
return sector & ~(bdev_zone_sectors(bdev) - 1);
1529+
}
1530+
15251531
static inline sector_t bdev_offset_from_zone_start(struct block_device *bdev,
15261532
sector_t sector)
15271533
{

0 commit comments

Comments
 (0)