@@ -288,6 +288,24 @@ static bool zloop_do_open_zone(struct zloop_device *zlo,
288288 }
289289}
290290
291+ static void zloop_mark_full (struct zloop_device * zlo , struct zloop_zone * zone )
292+ {
293+ lockdep_assert_held (& zone -> wp_lock );
294+
295+ zloop_lru_remove_open_zone (zlo , zone );
296+ zone -> cond = BLK_ZONE_COND_FULL ;
297+ zone -> wp = ULLONG_MAX ;
298+ }
299+
300+ static void zloop_mark_empty (struct zloop_device * zlo , struct zloop_zone * zone )
301+ {
302+ lockdep_assert_held (& zone -> wp_lock );
303+
304+ zloop_lru_remove_open_zone (zlo , zone );
305+ zone -> cond = BLK_ZONE_COND_EMPTY ;
306+ zone -> wp = zone -> start ;
307+ }
308+
291309static int zloop_update_seq_zone (struct zloop_device * zlo , unsigned int zone_no )
292310{
293311 struct zloop_zone * zone = & zlo -> zones [zone_no ];
@@ -321,13 +339,9 @@ static int zloop_update_seq_zone(struct zloop_device *zlo, unsigned int zone_no)
321339
322340 spin_lock_irqsave (& zone -> wp_lock , flags );
323341 if (!file_sectors ) {
324- zloop_lru_remove_open_zone (zlo , zone );
325- zone -> cond = BLK_ZONE_COND_EMPTY ;
326- zone -> wp = zone -> start ;
342+ zloop_mark_empty (zlo , zone );
327343 } else if (file_sectors == zlo -> zone_capacity ) {
328- zloop_lru_remove_open_zone (zlo , zone );
329- zone -> cond = BLK_ZONE_COND_FULL ;
330- zone -> wp = ULLONG_MAX ;
344+ zloop_mark_full (zlo , zone );
331345 } else {
332346 if (zone -> cond != BLK_ZONE_COND_IMP_OPEN &&
333347 zone -> cond != BLK_ZONE_COND_EXP_OPEN )
@@ -429,9 +443,7 @@ static int zloop_reset_zone(struct zloop_device *zlo, unsigned int zone_no)
429443 }
430444
431445 spin_lock_irqsave (& zone -> wp_lock , flags );
432- zloop_lru_remove_open_zone (zlo , zone );
433- zone -> cond = BLK_ZONE_COND_EMPTY ;
434- zone -> wp = zone -> start ;
446+ zloop_mark_empty (zlo , zone );
435447 clear_bit (ZLOOP_ZONE_SEQ_ERROR , & zone -> flags );
436448 spin_unlock_irqrestore (& zone -> wp_lock , flags );
437449
@@ -477,9 +489,7 @@ static int zloop_finish_zone(struct zloop_device *zlo, unsigned int zone_no)
477489 }
478490
479491 spin_lock_irqsave (& zone -> wp_lock , flags );
480- zloop_lru_remove_open_zone (zlo , zone );
481- zone -> cond = BLK_ZONE_COND_FULL ;
482- zone -> wp = ULLONG_MAX ;
492+ zloop_mark_full (zlo , zone );
483493 clear_bit (ZLOOP_ZONE_SEQ_ERROR , & zone -> flags );
484494 spin_unlock_irqrestore (& zone -> wp_lock , flags );
485495
@@ -616,11 +626,8 @@ static int zloop_seq_write_prep(struct zloop_cmd *cmd)
616626 */
617627 if (!is_append || !zlo -> ordered_zone_append ) {
618628 zone -> wp += nr_sectors ;
619- if (zone -> wp == zone_end ) {
620- zloop_lru_remove_open_zone (zlo , zone );
621- zone -> cond = BLK_ZONE_COND_FULL ;
622- zone -> wp = ULLONG_MAX ;
623- }
629+ if (zone -> wp == zone_end )
630+ zloop_mark_full (zlo , zone );
624631 }
625632out_unlock :
626633 spin_unlock_irqrestore (& zone -> wp_lock , flags );
@@ -873,11 +880,8 @@ static bool zloop_set_zone_append_sector(struct request *rq)
873880
874881 rq -> __sector = zone -> wp ;
875882 zone -> wp += blk_rq_sectors (rq );
876- if (zone -> wp >= zone_end ) {
877- zloop_lru_remove_open_zone (zlo , zone );
878- zone -> cond = BLK_ZONE_COND_FULL ;
879- zone -> wp = ULLONG_MAX ;
880- }
883+ if (zone -> wp >= zone_end )
884+ zloop_mark_full (zlo , zone );
881885
882886 spin_unlock_irqrestore (& zone -> wp_lock , flags );
883887
0 commit comments