Message ID | 20200522153901.133375-8-hare@suse.de (mailing list archive) |
---|---|
State | Superseded, archived |
Delegated to: | Mike Snitzer |
Headers | show |
Series | dm-zoned: multi-device support | expand |
On 2020/05/23 0:39, Hannes Reinecke wrote: > Instead of counting the number of reserved zones in dmz_free_zone() > we should mark the zone as 'reserved' during allocation and simplify > dmz_free_zone(). > > Signed-off-by: Hannes Reinecke <hare@suse.de> > --- > drivers/md/dm-zoned-metadata.c | 4 ++-- > drivers/md/dm-zoned.h | 2 ++ > 2 files changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c > index 73479b4c8bca..1b9da698a812 100644 > --- a/drivers/md/dm-zoned-metadata.c > +++ b/drivers/md/dm-zoned-metadata.c > @@ -1783,6 +1783,7 @@ static int dmz_load_mapping(struct dmz_metadata *zmd) > atomic_inc(&zmd->unmap_nr_rnd); > } else if (atomic_read(&zmd->nr_reserved_seq_zones) < zmd->nr_reserved_seq) { > list_add_tail(&dzone->link, &zmd->reserved_seq_zones_list); > + set_bit(DMZ_RESERVED, &dzone->flags); > atomic_inc(&zmd->nr_reserved_seq_zones); > zmd->nr_seq--; > } else { > @@ -2210,8 +2211,7 @@ void dmz_free_zone(struct dmz_metadata *zmd, struct dm_zone *zone) > } else if (dmz_is_rnd(zone)) { > list_add_tail(&zone->link, &zmd->unmap_rnd_list); > atomic_inc(&zmd->unmap_nr_rnd); > - } else if (atomic_read(&zmd->nr_reserved_seq_zones) < > - zmd->nr_reserved_seq) { > + } else if (dmz_is_reserved(zone)) { > list_add_tail(&zone->link, &zmd->reserved_seq_zones_list); > atomic_inc(&zmd->nr_reserved_seq_zones); > } else { > diff --git a/drivers/md/dm-zoned.h b/drivers/md/dm-zoned.h > index dab701893b67..983f5b5e9fa0 100644 > --- a/drivers/md/dm-zoned.h > +++ b/drivers/md/dm-zoned.h > @@ -130,6 +130,7 @@ enum { > DMZ_META, > DMZ_DATA, > DMZ_BUF, > + DMZ_RESERVED, > > /* Zone internal state */ > DMZ_RECLAIM, > @@ -147,6 +148,7 @@ enum { > #define dmz_is_offline(z) test_bit(DMZ_OFFLINE, &(z)->flags) > #define dmz_is_readonly(z) test_bit(DMZ_READ_ONLY, &(z)->flags) > #define dmz_in_reclaim(z) test_bit(DMZ_RECLAIM, &(z)->flags) > +#define dmz_is_reserved(z) test_bit(DMZ_RESERVED, &(z)->flags) > #define dmz_seq_write_err(z) test_bit(DMZ_SEQ_WRITE_ERR, &(z)->flags) > #define dmz_reclaim_should_terminate(z) \ > test_bit(DMZ_RECLAIM_TERMINATE, &(z)->flags) > Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com>
diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c index 73479b4c8bca..1b9da698a812 100644 --- a/drivers/md/dm-zoned-metadata.c +++ b/drivers/md/dm-zoned-metadata.c @@ -1783,6 +1783,7 @@ static int dmz_load_mapping(struct dmz_metadata *zmd) atomic_inc(&zmd->unmap_nr_rnd); } else if (atomic_read(&zmd->nr_reserved_seq_zones) < zmd->nr_reserved_seq) { list_add_tail(&dzone->link, &zmd->reserved_seq_zones_list); + set_bit(DMZ_RESERVED, &dzone->flags); atomic_inc(&zmd->nr_reserved_seq_zones); zmd->nr_seq--; } else { @@ -2210,8 +2211,7 @@ void dmz_free_zone(struct dmz_metadata *zmd, struct dm_zone *zone) } else if (dmz_is_rnd(zone)) { list_add_tail(&zone->link, &zmd->unmap_rnd_list); atomic_inc(&zmd->unmap_nr_rnd); - } else if (atomic_read(&zmd->nr_reserved_seq_zones) < - zmd->nr_reserved_seq) { + } else if (dmz_is_reserved(zone)) { list_add_tail(&zone->link, &zmd->reserved_seq_zones_list); atomic_inc(&zmd->nr_reserved_seq_zones); } else { diff --git a/drivers/md/dm-zoned.h b/drivers/md/dm-zoned.h index dab701893b67..983f5b5e9fa0 100644 --- a/drivers/md/dm-zoned.h +++ b/drivers/md/dm-zoned.h @@ -130,6 +130,7 @@ enum { DMZ_META, DMZ_DATA, DMZ_BUF, + DMZ_RESERVED, /* Zone internal state */ DMZ_RECLAIM, @@ -147,6 +148,7 @@ enum { #define dmz_is_offline(z) test_bit(DMZ_OFFLINE, &(z)->flags) #define dmz_is_readonly(z) test_bit(DMZ_READ_ONLY, &(z)->flags) #define dmz_in_reclaim(z) test_bit(DMZ_RECLAIM, &(z)->flags) +#define dmz_is_reserved(z) test_bit(DMZ_RESERVED, &(z)->flags) #define dmz_seq_write_err(z) test_bit(DMZ_SEQ_WRITE_ERR, &(z)->flags) #define dmz_reclaim_should_terminate(z) \ test_bit(DMZ_RECLAIM_TERMINATE, &(z)->flags)
Instead of counting the number of reserved zones in dmz_free_zone() we should mark the zone as 'reserved' during allocation and simplify dmz_free_zone(). Signed-off-by: Hannes Reinecke <hare@suse.de> --- drivers/md/dm-zoned-metadata.c | 4 ++-- drivers/md/dm-zoned.h | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-)