}
}
+static void zloop_mark_full(struct zloop_device *zlo, struct zloop_zone *zone)
+{
+ lockdep_assert_held(&zone->wp_lock);
+
+ zloop_lru_remove_open_zone(zlo, zone);
+ zone->cond = BLK_ZONE_COND_FULL;
+ zone->wp = ULLONG_MAX;
+}
+
+static void zloop_mark_empty(struct zloop_device *zlo, struct zloop_zone *zone)
+{
+ lockdep_assert_held(&zone->wp_lock);
+
+ zloop_lru_remove_open_zone(zlo, zone);
+ zone->cond = BLK_ZONE_COND_EMPTY;
+ zone->wp = zone->start;
+}
+
static int zloop_update_seq_zone(struct zloop_device *zlo, unsigned int zone_no)
{
struct zloop_zone *zone = &zlo->zones[zone_no];
spin_lock_irqsave(&zone->wp_lock, flags);
if (!file_sectors) {
- zloop_lru_remove_open_zone(zlo, zone);
- zone->cond = BLK_ZONE_COND_EMPTY;
- zone->wp = zone->start;
+ zloop_mark_empty(zlo, zone);
} else if (file_sectors == zlo->zone_capacity) {
- zloop_lru_remove_open_zone(zlo, zone);
- zone->cond = BLK_ZONE_COND_FULL;
- zone->wp = ULLONG_MAX;
+ zloop_mark_full(zlo, zone);
} else {
if (zone->cond != BLK_ZONE_COND_IMP_OPEN &&
zone->cond != BLK_ZONE_COND_EXP_OPEN)
}
spin_lock_irqsave(&zone->wp_lock, flags);
- zloop_lru_remove_open_zone(zlo, zone);
- zone->cond = BLK_ZONE_COND_EMPTY;
- zone->wp = zone->start;
+ zloop_mark_empty(zlo, zone);
clear_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags);
spin_unlock_irqrestore(&zone->wp_lock, flags);
}
spin_lock_irqsave(&zone->wp_lock, flags);
- zloop_lru_remove_open_zone(zlo, zone);
- zone->cond = BLK_ZONE_COND_FULL;
- zone->wp = ULLONG_MAX;
+ zloop_mark_full(zlo, zone);
clear_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags);
spin_unlock_irqrestore(&zone->wp_lock, flags);
*/
if (!is_append || !zlo->ordered_zone_append) {
zone->wp += nr_sectors;
- if (zone->wp == zone_end) {
- zloop_lru_remove_open_zone(zlo, zone);
- zone->cond = BLK_ZONE_COND_FULL;
- zone->wp = ULLONG_MAX;
- }
+ if (zone->wp == zone_end)
+ zloop_mark_full(zlo, zone);
}
out_unlock:
spin_unlock_irqrestore(&zone->wp_lock, flags);
rq->__sector = zone->wp;
zone->wp += blk_rq_sectors(rq);
- if (zone->wp >= zone_end) {
- zloop_lru_remove_open_zone(zlo, zone);
- zone->cond = BLK_ZONE_COND_FULL;
- zone->wp = ULLONG_MAX;
- }
+ if (zone->wp >= zone_end)
+ zloop_mark_full(zlo, zone);
spin_unlock_irqrestore(&zone->wp_lock, flags);