Lines Matching refs:zone
158 struct zloop_zone *zone = &zlo->zones[zone_no]; in zloop_update_seq_zone() local
164 lockdep_assert_held(&zone->lock); in zloop_update_seq_zone()
166 ret = vfs_getattr(&zone->file->f_path, &stat, STATX_SIZE, 0); in zloop_update_seq_zone()
170 set_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags); in zloop_update_seq_zone()
187 spin_lock_irqsave(&zone->wp_lock, flags); in zloop_update_seq_zone()
189 zone->cond = BLK_ZONE_COND_EMPTY; in zloop_update_seq_zone()
190 zone->wp = zone->start; in zloop_update_seq_zone()
192 zone->cond = BLK_ZONE_COND_FULL; in zloop_update_seq_zone()
193 zone->wp = ULLONG_MAX; in zloop_update_seq_zone()
195 zone->cond = BLK_ZONE_COND_CLOSED; in zloop_update_seq_zone()
196 zone->wp = zone->start + file_sectors; in zloop_update_seq_zone()
198 spin_unlock_irqrestore(&zone->wp_lock, flags); in zloop_update_seq_zone()
205 struct zloop_zone *zone = &zlo->zones[zone_no]; in zloop_open_zone() local
208 if (test_bit(ZLOOP_ZONE_CONV, &zone->flags)) in zloop_open_zone()
211 mutex_lock(&zone->lock); in zloop_open_zone()
213 if (test_and_clear_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags)) { in zloop_open_zone()
219 switch (zone->cond) { in zloop_open_zone()
225 zone->cond = BLK_ZONE_COND_EXP_OPEN; in zloop_open_zone()
234 mutex_unlock(&zone->lock); in zloop_open_zone()
241 struct zloop_zone *zone = &zlo->zones[zone_no]; in zloop_close_zone() local
245 if (test_bit(ZLOOP_ZONE_CONV, &zone->flags)) in zloop_close_zone()
248 mutex_lock(&zone->lock); in zloop_close_zone()
250 if (test_and_clear_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags)) { in zloop_close_zone()
256 switch (zone->cond) { in zloop_close_zone()
261 spin_lock_irqsave(&zone->wp_lock, flags); in zloop_close_zone()
262 if (zone->wp == zone->start) in zloop_close_zone()
263 zone->cond = BLK_ZONE_COND_EMPTY; in zloop_close_zone()
265 zone->cond = BLK_ZONE_COND_CLOSED; in zloop_close_zone()
266 spin_unlock_irqrestore(&zone->wp_lock, flags); in zloop_close_zone()
276 mutex_unlock(&zone->lock); in zloop_close_zone()
283 struct zloop_zone *zone = &zlo->zones[zone_no]; in zloop_reset_zone() local
287 if (test_bit(ZLOOP_ZONE_CONV, &zone->flags)) in zloop_reset_zone()
290 mutex_lock(&zone->lock); in zloop_reset_zone()
292 if (!test_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags) && in zloop_reset_zone()
293 zone->cond == BLK_ZONE_COND_EMPTY) in zloop_reset_zone()
296 if (vfs_truncate(&zone->file->f_path, 0)) { in zloop_reset_zone()
297 set_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags); in zloop_reset_zone()
302 spin_lock_irqsave(&zone->wp_lock, flags); in zloop_reset_zone()
303 zone->cond = BLK_ZONE_COND_EMPTY; in zloop_reset_zone()
304 zone->wp = zone->start; in zloop_reset_zone()
305 clear_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags); in zloop_reset_zone()
306 spin_unlock_irqrestore(&zone->wp_lock, flags); in zloop_reset_zone()
309 mutex_unlock(&zone->lock); in zloop_reset_zone()
330 struct zloop_zone *zone = &zlo->zones[zone_no]; in zloop_finish_zone() local
334 if (test_bit(ZLOOP_ZONE_CONV, &zone->flags)) in zloop_finish_zone()
337 mutex_lock(&zone->lock); in zloop_finish_zone()
339 if (!test_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags) && in zloop_finish_zone()
340 zone->cond == BLK_ZONE_COND_FULL) in zloop_finish_zone()
343 if (vfs_truncate(&zone->file->f_path, zlo->zone_size << SECTOR_SHIFT)) { in zloop_finish_zone()
344 set_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags); in zloop_finish_zone()
349 spin_lock_irqsave(&zone->wp_lock, flags); in zloop_finish_zone()
350 zone->cond = BLK_ZONE_COND_FULL; in zloop_finish_zone()
351 zone->wp = ULLONG_MAX; in zloop_finish_zone()
352 clear_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags); in zloop_finish_zone()
353 spin_unlock_irqrestore(&zone->wp_lock, flags); in zloop_finish_zone()
356 mutex_unlock(&zone->lock); in zloop_finish_zone()
392 struct zloop_zone *zone; in zloop_rw() local
415 zone = &zlo->zones[zone_no]; in zloop_rw()
416 zone_end = zone->start + zlo->zone_capacity; in zloop_rw()
422 if (WARN_ON_ONCE(sector + nr_sectors > zone->start + zlo->zone_size)) { in zloop_rw()
427 if (test_and_clear_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags)) { in zloop_rw()
428 mutex_lock(&zone->lock); in zloop_rw()
430 mutex_unlock(&zone->lock); in zloop_rw()
435 if (!test_bit(ZLOOP_ZONE_CONV, &zone->flags) && is_write) { in zloop_rw()
436 mutex_lock(&zone->lock); in zloop_rw()
438 spin_lock_irqsave(&zone->wp_lock, flags); in zloop_rw()
451 if (zone->cond == BLK_ZONE_COND_FULL || in zloop_rw()
452 zone->wp + nr_sectors > zone_end) { in zloop_rw()
453 spin_unlock_irqrestore(&zone->wp_lock, in zloop_rw()
458 sector = zone->wp; in zloop_rw()
461 } else if (sector != zone->wp) { in zloop_rw()
462 spin_unlock_irqrestore(&zone->wp_lock, flags); in zloop_rw()
464 zone_no, sector, zone->wp); in zloop_rw()
470 if (zone->cond == BLK_ZONE_COND_CLOSED || in zloop_rw()
471 zone->cond == BLK_ZONE_COND_EMPTY) in zloop_rw()
472 zone->cond = BLK_ZONE_COND_IMP_OPEN; in zloop_rw()
480 zone->wp += nr_sectors; in zloop_rw()
481 if (zone->wp == zone_end) { in zloop_rw()
482 zone->cond = BLK_ZONE_COND_FULL; in zloop_rw()
483 zone->wp = ULLONG_MAX; in zloop_rw()
487 spin_unlock_irqrestore(&zone->wp_lock, flags); in zloop_rw()
525 cmd->iocb.ki_pos = (sector - zone->start) << SECTOR_SHIFT; in zloop_rw()
526 cmd->iocb.ki_filp = zone->file; in zloop_rw()
533 ret = zone->file->f_op->write_iter(&cmd->iocb, &iter); in zloop_rw()
535 ret = zone->file->f_op->read_iter(&cmd->iocb, &iter); in zloop_rw()
537 if (!test_bit(ZLOOP_ZONE_CONV, &zone->flags) && is_write) in zloop_rw()
538 mutex_unlock(&zone->lock); in zloop_rw()
611 struct zloop_zone *zone = &zlo->zones[zone_no]; in zloop_complete_rq() local
642 if (cmd->ret < 0 && !test_bit(ZLOOP_ZONE_CONV, &zone->flags)) { in zloop_complete_rq()
648 set_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags); in zloop_complete_rq()
668 struct zloop_zone *zone = &zlo->zones[zone_no]; in zloop_set_zone_append_sector() local
669 sector_t zone_end = zone->start + zlo->zone_capacity; in zloop_set_zone_append_sector()
673 spin_lock_irqsave(&zone->wp_lock, flags); in zloop_set_zone_append_sector()
675 if (zone->cond == BLK_ZONE_COND_FULL || in zloop_set_zone_append_sector()
676 zone->wp + nr_sectors > zone_end) { in zloop_set_zone_append_sector()
677 spin_unlock_irqrestore(&zone->wp_lock, flags); in zloop_set_zone_append_sector()
681 rq->__sector = zone->wp; in zloop_set_zone_append_sector()
682 zone->wp += blk_rq_sectors(rq); in zloop_set_zone_append_sector()
683 if (zone->wp >= zone_end) { in zloop_set_zone_append_sector()
684 zone->cond = BLK_ZONE_COND_FULL; in zloop_set_zone_append_sector()
685 zone->wp = ULLONG_MAX; in zloop_set_zone_append_sector()
688 spin_unlock_irqrestore(&zone->wp_lock, flags); in zloop_set_zone_append_sector()
757 struct zloop_zone *zone = &zlo->zones[zone_no]; in zloop_report_zones() local
759 mutex_lock(&zone->lock); in zloop_report_zones()
761 if (test_and_clear_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags)) { in zloop_report_zones()
764 mutex_unlock(&zone->lock); in zloop_report_zones()
769 blkz.start = zone->start; in zloop_report_zones()
771 spin_lock_irqsave(&zone->wp_lock, flags); in zloop_report_zones()
772 blkz.wp = zone->wp; in zloop_report_zones()
773 spin_unlock_irqrestore(&zone->wp_lock, flags); in zloop_report_zones()
774 blkz.cond = zone->cond; in zloop_report_zones()
775 if (test_bit(ZLOOP_ZONE_CONV, &zone->flags)) { in zloop_report_zones()
783 mutex_unlock(&zone->lock); in zloop_report_zones()
801 struct zloop_zone *zone = &zlo->zones[i]; in zloop_free_disk() local
803 mapping_set_gfp_mask(zone->file->f_mapping, in zloop_free_disk()
804 zone->old_gfp_mask); in zloop_free_disk()
805 fput(zone->file); in zloop_free_disk()
841 struct zloop_zone *zone) in zloop_get_block_size() argument
843 struct block_device *sb_bdev = zone->file->f_mapping->host->i_sb->s_bdev; in zloop_get_block_size()
852 if (file_inode(zone->file)->i_sb->s_blocksize <= SZ_4K) in zloop_get_block_size()
853 zlo->block_size = file_inode(zone->file)->i_sb->s_blocksize; in zloop_get_block_size()
854 else if (!vfs_getattr(&zone->file->f_path, &st, STATX_DIOALIGN, 0) && in zloop_get_block_size()
874 struct zloop_zone *zone = &zlo->zones[zone_no]; in zloop_init_zone() local
880 mutex_init(&zone->lock); in zloop_init_zone()
881 spin_lock_init(&zone->wp_lock); in zloop_init_zone()
882 zone->start = (sector_t)zone_no << zlo->zone_shift; in zloop_init_zone()
892 set_bit(ZLOOP_ZONE_CONV, &zone->flags); in zloop_init_zone()
893 zone->cond = BLK_ZONE_COND_NOT_WP; in zloop_init_zone()
894 zone->wp = U64_MAX; in zloop_init_zone()
896 zone->file = zloop_filp_open_fmt(oflags, 0600, "%s/%u/cnv-%06u", in zloop_init_zone()
898 if (IS_ERR(zone->file)) { in zloop_init_zone()
901 PTR_ERR(zone->file)); in zloop_init_zone()
902 return PTR_ERR(zone->file); in zloop_init_zone()
906 ret = zloop_get_block_size(zlo, zone); in zloop_init_zone()
911 ret = vfs_getattr(&zone->file->f_path, &stat, STATX_SIZE, 0); in zloop_init_zone()
924 ret = vfs_truncate(&zone->file->f_path, in zloop_init_zone()
936 zone->file = zloop_filp_open_fmt(oflags, 0600, "%s/%u/seq-%06u", in zloop_init_zone()
938 if (IS_ERR(zone->file)) { in zloop_init_zone()
941 PTR_ERR(zone->file)); in zloop_init_zone()
942 return PTR_ERR(zone->file); in zloop_init_zone()
946 ret = zloop_get_block_size(zlo, zone); in zloop_init_zone()
951 zloop_get_block_size(zlo, zone); in zloop_init_zone()
953 mutex_lock(&zone->lock); in zloop_init_zone()
955 mutex_unlock(&zone->lock); in zloop_init_zone()
1136 struct zloop_zone *zone = &zlo->zones[j]; in zloop_ctl_add() local
1138 if (!IS_ERR_OR_NULL(zone->file)) in zloop_ctl_add()
1139 fput(zone->file); in zloop_ctl_add()