Skip to content

Commit f2cd9a5

Browse files
kawasakisnitm
authored andcommitted
dm zoned: Fix reclaim zone selection
When dm zoned has multiple devices, random zones are never selected for reclaim if all reserved sequential write zones are in use and no sequential write required zones can be selected for reclaim. This can lead to deadlocks as selecting a cache zone allows reclaiming a sequential zone, ensuring forward progress. Fix this by always defaulting to selecting a random zone when no sequential write required zone can be selected. [Damien: fix commit message] Signed-off-by: Shin'ichiro Kawasaki <[email protected]> Signed-off-by: Damien Le Moal <[email protected]> Reviewed-by: Hannes Reinecke <[email protected]> Signed-off-by: Mike Snitzer <[email protected]>
1 parent 3ee3957 commit f2cd9a5

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

drivers/md/dm-zoned-metadata.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2026,7 +2026,7 @@ static struct dm_zone *dmz_get_seq_zone_for_reclaim(struct dmz_metadata *zmd,
20262026
struct dm_zone *dmz_get_zone_for_reclaim(struct dmz_metadata *zmd,
20272027
unsigned int dev_idx, bool idle)
20282028
{
2029-
struct dm_zone *zone;
2029+
struct dm_zone *zone = NULL;
20302030

20312031
/*
20322032
* Search for a zone candidate to reclaim: 2 cases are possible.
@@ -2039,7 +2039,7 @@ struct dm_zone *dmz_get_zone_for_reclaim(struct dmz_metadata *zmd,
20392039
dmz_lock_map(zmd);
20402040
if (list_empty(&zmd->reserved_seq_zones_list))
20412041
zone = dmz_get_seq_zone_for_reclaim(zmd, dev_idx);
2042-
else
2042+
if (!zone)
20432043
zone = dmz_get_rnd_zone_for_reclaim(zmd, dev_idx, idle);
20442044
dmz_unlock_map(zmd);
20452045

0 commit comments

Comments
 (0)