Lines Matching refs:bdev
191 bool bdev_zone_is_seq(struct block_device *bdev, sector_t sector) in bdev_zone_is_seq() argument
193 struct gendisk *disk = bdev->bd_disk; in bdev_zone_is_seq()
198 if (!bdev_is_zoned(bdev)) in bdev_zone_is_seq()
222 static int blkdev_do_report_zones(struct block_device *bdev, sector_t sector, in blkdev_do_report_zones() argument
226 struct gendisk *disk = bdev->bd_disk; in blkdev_do_report_zones()
228 if (!bdev_is_zoned(bdev) || WARN_ON_ONCE(!disk->fops->report_zones)) in blkdev_do_report_zones()
256 int blkdev_report_zones(struct block_device *bdev, sector_t sector, in blkdev_report_zones() argument
264 return blkdev_do_report_zones(bdev, sector, nr_zones, &args); in blkdev_report_zones()
268 static int blkdev_zone_reset_all(struct block_device *bdev) in blkdev_zone_reset_all() argument
272 bio_init(&bio, bdev, NULL, 0, REQ_OP_ZONE_RESET_ALL | REQ_SYNC); in blkdev_zone_reset_all()
292 int blkdev_zone_mgmt(struct block_device *bdev, enum req_op op, in blkdev_zone_mgmt() argument
295 sector_t zone_sectors = bdev_zone_sectors(bdev); in blkdev_zone_mgmt()
296 sector_t capacity = bdev_nr_sectors(bdev); in blkdev_zone_mgmt()
301 if (!bdev_is_zoned(bdev)) in blkdev_zone_mgmt()
304 if (bdev_read_only(bdev)) in blkdev_zone_mgmt()
315 if (!bdev_is_zone_start(bdev, sector)) in blkdev_zone_mgmt()
318 if (!bdev_is_zone_start(bdev, nr_sectors) && end_sector != capacity) in blkdev_zone_mgmt()
326 return blkdev_zone_reset_all(bdev); in blkdev_zone_mgmt()
329 bio = blk_next_bio(bio, bdev, 0, op | REQ_SYNC, GFP_KERNEL); in blkdev_zone_mgmt()
368 int blkdev_report_zones_ioctl(struct block_device *bdev, unsigned int cmd, in blkdev_report_zones_ioctl() argument
379 if (!bdev_is_zoned(bdev)) in blkdev_report_zones_ioctl()
392 ret = blkdev_report_zones(bdev, rep.sector, rep.nr_zones, in blkdev_report_zones_ioctl()
398 ret = blkdev_report_zones_cached(bdev, rep.sector, rep.nr_zones, in blkdev_report_zones_ioctl()
415 static int blkdev_truncate_zone_range(struct block_device *bdev, in blkdev_truncate_zone_range() argument
421 zrange->sector + zrange->nr_sectors > get_capacity(bdev->bd_disk)) in blkdev_truncate_zone_range()
428 return truncate_bdev_range(bdev, mode, start, end); in blkdev_truncate_zone_range()
435 int blkdev_zone_mgmt_ioctl(struct block_device *bdev, blk_mode_t mode, in blkdev_zone_mgmt_ioctl() argument
446 if (!bdev_is_zoned(bdev)) in blkdev_zone_mgmt_ioctl()
460 inode_lock(bdev->bd_mapping->host); in blkdev_zone_mgmt_ioctl()
461 filemap_invalidate_lock(bdev->bd_mapping); in blkdev_zone_mgmt_ioctl()
462 ret = blkdev_truncate_zone_range(bdev, mode, &zrange); in blkdev_zone_mgmt_ioctl()
479 ret = blkdev_zone_mgmt(bdev, op, zrange.sector, zrange.nr_sectors); in blkdev_zone_mgmt_ioctl()
483 filemap_invalidate_unlock(bdev->bd_mapping); in blkdev_zone_mgmt_ioctl()
484 inode_unlock(bdev->bd_mapping->host); in blkdev_zone_mgmt_ioctl()
895 static int blkdev_report_zone_fallback(struct block_device *bdev, in blkdev_report_zone_fallback() argument
905 error = blkdev_do_report_zones(bdev, sector, 1, &args); in blkdev_report_zone_fallback()
919 static inline bool blkdev_has_cached_report_zones(struct block_device *bdev) in blkdev_has_cached_report_zones() argument
921 return disk_need_zone_resources(bdev->bd_disk) && in blkdev_has_cached_report_zones()
922 (bdev_emulates_zone_append(bdev) || in blkdev_has_cached_report_zones()
923 !test_bit(GD_ZONE_APPEND_USED, &bdev->bd_disk->state)); in blkdev_has_cached_report_zones()
941 int blkdev_get_zone_info(struct block_device *bdev, sector_t sector, in blkdev_get_zone_info() argument
944 struct gendisk *disk = bdev->bd_disk; in blkdev_get_zone_info()
945 sector_t zone_sectors = bdev_zone_sectors(bdev); in blkdev_get_zone_info()
950 if (!bdev_is_zoned(bdev)) in blkdev_get_zone_info()
957 sector = bdev_zone_start(bdev, sector); in blkdev_get_zone_info()
959 if (!blkdev_has_cached_report_zones(bdev)) in blkdev_get_zone_info()
960 return blkdev_report_zone_fallback(bdev, sector, zone); in blkdev_get_zone_info()
966 return blkdev_report_zone_fallback(bdev, sector, zone); in blkdev_get_zone_info()
1021 return blkdev_report_zone_fallback(bdev, sector, zone); in blkdev_get_zone_info()
1048 int blkdev_report_zones_cached(struct block_device *bdev, sector_t sector, in blkdev_report_zones_cached() argument
1051 struct gendisk *disk = bdev->bd_disk; in blkdev_report_zones_cached()
1053 sector_t zone_sectors = bdev_zone_sectors(bdev); in blkdev_report_zones_cached()
1058 if (!cb || !bdev_is_zoned(bdev) || in blkdev_report_zones_cached()
1065 if (!blkdev_has_cached_report_zones(bdev)) { in blkdev_report_zones_cached()
1072 return blkdev_do_report_zones(bdev, sector, nr_zones, &args); in blkdev_report_zones_cached()
1075 for (sector = bdev_zone_start(bdev, sector); in blkdev_report_zones_cached()
1078 ret = blkdev_get_zone_info(bdev, sector, &zone); in blkdev_report_zones_cached()
1149 struct block_device *bdev = bio->bi_bdev; in blk_zone_finish_bio_endio() local
1150 struct gendisk *disk = bdev->bd_disk; in blk_zone_finish_bio_endio()
1166 bdev_zone_sectors(bdev)); in blk_zone_finish_bio_endio()
1574 struct block_device *bdev = bio->bi_bdev; in blk_zone_plug_bio() local
1576 if (WARN_ON_ONCE(!bdev->bd_disk->zone_wplugs_hash)) in blk_zone_plug_bio()
1598 if (!bdev_emulates_zone_append(bdev)) { in blk_zone_plug_bio()
1734 struct block_device *bdev; in blk_zone_wplug_bio_work() local
1763 bdev = bio->bi_bdev; in blk_zone_wplug_bio_work()
1771 if (bdev_test_flag(bdev, BD_HAS_SUBMIT_BIO)) { in blk_zone_wplug_bio_work()
1772 bdev->bd_disk->fops->submit_bio(bio); in blk_zone_wplug_bio_work()
1773 blk_queue_exit(bdev->bd_disk->queue); in blk_zone_wplug_bio_work()
2286 int blk_zone_issue_zeroout(struct block_device *bdev, sector_t sector, in blk_zone_issue_zeroout() argument
2289 struct gendisk *disk = bdev->bd_disk; in blk_zone_issue_zeroout()
2292 if (WARN_ON_ONCE(!bdev_is_zoned(bdev))) in blk_zone_issue_zeroout()
2295 ret = blkdev_issue_zeroout(bdev, sector, nr_sects, gfp_mask, in blk_zone_issue_zeroout()
2313 return blkdev_issue_zeroout(bdev, sector, nr_sects, gfp_mask, 0); in blk_zone_issue_zeroout()