Lines Matching full:zone

7  * zone as backing storage.
60 /* Arbitrary limit on the zone size (16GB). */
147 struct zloop_zone *zone = &zlo->zones[zone_no]; in zloop_update_seq_zone() local
152 lockdep_assert_held(&zone->lock); in zloop_update_seq_zone()
154 ret = vfs_getattr(&zone->file->f_path, &stat, STATX_SIZE, 0); in zloop_update_seq_zone()
156 pr_err("Failed to get zone %u file stat (err=%d)\n", in zloop_update_seq_zone()
158 set_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags); in zloop_update_seq_zone()
164 pr_err("Zone %u file too large (%llu sectors > %llu)\n", in zloop_update_seq_zone()
170 pr_err("Zone %u file size not aligned to block size %u\n", in zloop_update_seq_zone()
176 zone->cond = BLK_ZONE_COND_EMPTY; in zloop_update_seq_zone()
177 zone->wp = zone->start; in zloop_update_seq_zone()
179 zone->cond = BLK_ZONE_COND_FULL; in zloop_update_seq_zone()
180 zone->wp = zone->start + zlo->zone_size; in zloop_update_seq_zone()
182 zone->cond = BLK_ZONE_COND_CLOSED; in zloop_update_seq_zone()
183 zone->wp = zone->start + file_sectors; in zloop_update_seq_zone()
191 struct zloop_zone *zone = &zlo->zones[zone_no]; in zloop_open_zone() local
194 if (test_bit(ZLOOP_ZONE_CONV, &zone->flags)) in zloop_open_zone()
197 mutex_lock(&zone->lock); in zloop_open_zone()
199 if (test_and_clear_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags)) { in zloop_open_zone()
205 switch (zone->cond) { in zloop_open_zone()
211 zone->cond = BLK_ZONE_COND_EXP_OPEN; in zloop_open_zone()
220 mutex_unlock(&zone->lock); in zloop_open_zone()
227 struct zloop_zone *zone = &zlo->zones[zone_no]; in zloop_close_zone() local
230 if (test_bit(ZLOOP_ZONE_CONV, &zone->flags)) in zloop_close_zone()
233 mutex_lock(&zone->lock); in zloop_close_zone()
235 if (test_and_clear_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags)) { in zloop_close_zone()
241 switch (zone->cond) { in zloop_close_zone()
246 if (zone->wp == zone->start) in zloop_close_zone()
247 zone->cond = BLK_ZONE_COND_EMPTY; in zloop_close_zone()
249 zone->cond = BLK_ZONE_COND_CLOSED; in zloop_close_zone()
259 mutex_unlock(&zone->lock); in zloop_close_zone()
266 struct zloop_zone *zone = &zlo->zones[zone_no]; in zloop_reset_zone() local
269 if (test_bit(ZLOOP_ZONE_CONV, &zone->flags)) in zloop_reset_zone()
272 mutex_lock(&zone->lock); in zloop_reset_zone()
274 if (!test_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags) && in zloop_reset_zone()
275 zone->cond == BLK_ZONE_COND_EMPTY) in zloop_reset_zone()
278 if (vfs_truncate(&zone->file->f_path, 0)) { in zloop_reset_zone()
279 set_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags); in zloop_reset_zone()
284 zone->cond = BLK_ZONE_COND_EMPTY; in zloop_reset_zone()
285 zone->wp = zone->start; in zloop_reset_zone()
286 clear_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags); in zloop_reset_zone()
289 mutex_unlock(&zone->lock); in zloop_reset_zone()
310 struct zloop_zone *zone = &zlo->zones[zone_no]; in zloop_finish_zone() local
313 if (test_bit(ZLOOP_ZONE_CONV, &zone->flags)) in zloop_finish_zone()
316 mutex_lock(&zone->lock); in zloop_finish_zone()
318 if (!test_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags) && in zloop_finish_zone()
319 zone->cond == BLK_ZONE_COND_FULL) in zloop_finish_zone()
322 if (vfs_truncate(&zone->file->f_path, zlo->zone_size << SECTOR_SHIFT)) { in zloop_finish_zone()
323 set_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags); in zloop_finish_zone()
328 zone->cond = BLK_ZONE_COND_FULL; in zloop_finish_zone()
329 zone->wp = zone->start + zlo->zone_size; in zloop_finish_zone()
330 clear_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags); in zloop_finish_zone()
333 mutex_unlock(&zone->lock); in zloop_finish_zone()
369 struct zloop_zone *zone; in zloop_rw() local
386 zone = &zlo->zones[zone_no]; in zloop_rw()
387 zone_end = zone->start + zlo->zone_capacity; in zloop_rw()
391 * contained within the zone. in zloop_rw()
393 if (WARN_ON_ONCE(sector + nr_sectors > zone->start + zlo->zone_size)) { in zloop_rw()
398 if (test_and_clear_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags)) { in zloop_rw()
399 mutex_lock(&zone->lock); in zloop_rw()
401 mutex_unlock(&zone->lock); in zloop_rw()
406 if (!test_bit(ZLOOP_ZONE_CONV, &zone->flags) && is_write) { in zloop_rw()
407 mutex_lock(&zone->lock); in zloop_rw()
410 sector = zone->wp; in zloop_rw()
416 * fully contained within the zone capacity. in zloop_rw()
418 if (sector != zone->wp || zone->wp + nr_sectors > zone_end) { in zloop_rw()
419 pr_err("Zone %u: unaligned write: sect %llu, wp %llu\n", in zloop_rw()
420 zone_no, sector, zone->wp); in zloop_rw()
425 /* Implicitly open the target zone. */ in zloop_rw()
426 if (zone->cond == BLK_ZONE_COND_CLOSED || in zloop_rw()
427 zone->cond == BLK_ZONE_COND_EMPTY) in zloop_rw()
428 zone->cond = BLK_ZONE_COND_IMP_OPEN; in zloop_rw()
435 zone->wp += nr_sectors; in zloop_rw()
436 if (zone->wp == zone_end) in zloop_rw()
437 zone->cond = BLK_ZONE_COND_FULL; in zloop_rw()
476 cmd->iocb.ki_pos = (sector - zone->start) << SECTOR_SHIFT; in zloop_rw()
477 cmd->iocb.ki_filp = zone->file; in zloop_rw()
484 ret = zone->file->f_op->write_iter(&cmd->iocb, &iter); in zloop_rw()
486 ret = zone->file->f_op->read_iter(&cmd->iocb, &iter); in zloop_rw()
488 if (!test_bit(ZLOOP_ZONE_CONV, &zone->flags) && is_write) in zloop_rw()
489 mutex_unlock(&zone->lock); in zloop_rw()
513 * Sync the entire FS containing the zone files instead of in zloop_handle_cmd()
558 struct zloop_zone *zone = &zlo->zones[zone_no]; in zloop_complete_rq() local
564 pr_err("Zone %u: failed read sector %llu, %llu sectors\n", in zloop_complete_rq()
578 pr_err("Zone %u: failed %swrite sector %llu, %llu sectors\n", in zloop_complete_rq()
584 pr_err("Zone %u: partial write %ld/%u B\n", in zloop_complete_rq()
589 if (cmd->ret < 0 && !test_bit(ZLOOP_ZONE_CONV, &zone->flags)) { in zloop_complete_rq()
591 * A write to a sequential zone file failed: mark the in zloop_complete_rq()
592 * zone as having an error. This will be corrected and in zloop_complete_rq()
595 set_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags); in zloop_complete_rq()
664 struct zloop_zone *zone = &zlo->zones[zone_no]; in zloop_report_zones() local
666 mutex_lock(&zone->lock); in zloop_report_zones()
668 if (test_and_clear_bit(ZLOOP_ZONE_SEQ_ERROR, &zone->flags)) { in zloop_report_zones()
671 mutex_unlock(&zone->lock); in zloop_report_zones()
676 blkz.start = zone->start; in zloop_report_zones()
678 blkz.wp = zone->wp; in zloop_report_zones()
679 blkz.cond = zone->cond; in zloop_report_zones()
680 if (test_bit(ZLOOP_ZONE_CONV, &zone->flags)) { in zloop_report_zones()
688 mutex_unlock(&zone->lock); in zloop_report_zones()
706 struct zloop_zone *zone = &zlo->zones[i]; in zloop_free_disk() local
708 mapping_set_gfp_mask(zone->file->f_mapping, in zloop_free_disk()
709 zone->old_gfp_mask); in zloop_free_disk()
710 fput(zone->file); in zloop_free_disk()
746 struct zloop_zone *zone) in zloop_get_block_size() argument
748 struct block_device *sb_bdev = zone->file->f_mapping->host->i_sb->s_bdev; in zloop_get_block_size()
757 if (file_inode(zone->file)->i_sb->s_blocksize <= SZ_4K) in zloop_get_block_size()
758 zlo->block_size = file_inode(zone->file)->i_sb->s_blocksize; in zloop_get_block_size()
759 else if (!vfs_getattr(&zone->file->f_path, &st, STATX_DIOALIGN, 0) && in zloop_get_block_size()
768 pr_err("Zone capacity is not aligned to block size %u\n", in zloop_get_block_size()
779 struct zloop_zone *zone = &zlo->zones[zone_no]; in zloop_init_zone() local
785 mutex_init(&zone->lock); in zloop_init_zone()
786 zone->start = (sector_t)zone_no << zlo->zone_shift; in zloop_init_zone()
795 /* Conventional zone file. */ in zloop_init_zone()
796 set_bit(ZLOOP_ZONE_CONV, &zone->flags); in zloop_init_zone()
797 zone->cond = BLK_ZONE_COND_NOT_WP; in zloop_init_zone()
798 zone->wp = U64_MAX; in zloop_init_zone()
800 zone->file = zloop_filp_open_fmt(oflags, 0600, "%s/%u/cnv-%06u", in zloop_init_zone()
802 if (IS_ERR(zone->file)) { in zloop_init_zone()
803 pr_err("Failed to open zone %u file %s/%u/cnv-%06u (err=%ld)", in zloop_init_zone()
805 PTR_ERR(zone->file)); in zloop_init_zone()
806 return PTR_ERR(zone->file); in zloop_init_zone()
810 ret = zloop_get_block_size(zlo, zone); in zloop_init_zone()
815 ret = vfs_getattr(&zone->file->f_path, &stat, STATX_SIZE, 0); in zloop_init_zone()
817 pr_err("Failed to get zone %u file stat\n", zone_no); in zloop_init_zone()
823 pr_err("Invalid conventional zone %u file size (%llu sectors != %llu)\n", in zloop_init_zone()
828 ret = vfs_truncate(&zone->file->f_path, in zloop_init_zone()
831 pr_err("Failed to truncate zone %u file (err=%d)\n", in zloop_init_zone()
839 /* Sequential zone file. */ in zloop_init_zone()
840 zone->file = zloop_filp_open_fmt(oflags, 0600, "%s/%u/seq-%06u", in zloop_init_zone()
842 if (IS_ERR(zone->file)) { in zloop_init_zone()
843 pr_err("Failed to open zone %u file %s/%u/seq-%06u (err=%ld)", in zloop_init_zone()
845 PTR_ERR(zone->file)); in zloop_init_zone()
846 return PTR_ERR(zone->file); in zloop_init_zone()
850 ret = zloop_get_block_size(zlo, zone); in zloop_init_zone()
855 zloop_get_block_size(zlo, zone); in zloop_init_zone()
857 mutex_lock(&zone->lock); in zloop_init_zone()
859 mutex_unlock(&zone->lock); in zloop_init_zone()
966 * If we already have zone files, we are restoring a device created by a in zloop_ctl_add()
968 * that the zone files are consistent with the zone configuration given. in zloop_ctl_add()
1032 struct zloop_zone *zone = &zlo->zones[j]; in zloop_ctl_add() local
1034 if (!IS_ERR_OR_NULL(zone->file)) in zloop_ctl_add()
1035 fput(zone->file); in zloop_ctl_add()
1155 pr_err("Invalid zone size %u\n", token); in zloop_parse_options()
1168 pr_err("Invalid zone capacity\n"); in zloop_parse_options()
1233 pr_err("Invalid zone capacity\n"); in zloop_parse_options()