• Home
  • Raw
  • Download

Lines Matching full:md

21 static int dm_blk_do_report_zones(struct mapped_device *md, struct dm_table *t,  in dm_blk_do_report_zones()  argument
25 struct gendisk *disk = md->disk; in dm_blk_do_report_zones()
59 struct mapped_device *md = disk->private_data; in dm_blk_report_zones() local
63 if (dm_suspended_md(md)) in dm_blk_report_zones()
66 map = dm_get_live_table(md, &srcu_idx); in dm_blk_report_zones()
70 ret = dm_blk_do_report_zones(md, map, sector, nr_zones, cb, data); in dm_blk_report_zones()
72 dm_put_live_table(md, srcu_idx); in dm_blk_report_zones()
125 bool dm_is_zone_write(struct mapped_device *md, struct bio *bio) in dm_is_zone_write() argument
127 struct request_queue *q = md->queue; in dm_is_zone_write()
141 void dm_cleanup_zoned_dev(struct mapped_device *md) in dm_cleanup_zoned_dev() argument
143 if (md->disk) { in dm_cleanup_zoned_dev()
144 bitmap_free(md->disk->conv_zones_bitmap); in dm_cleanup_zoned_dev()
145 md->disk->conv_zones_bitmap = NULL; in dm_cleanup_zoned_dev()
146 bitmap_free(md->disk->seq_zones_wlock); in dm_cleanup_zoned_dev()
147 md->disk->seq_zones_wlock = NULL; in dm_cleanup_zoned_dev()
150 kvfree(md->zwp_offset); in dm_cleanup_zoned_dev()
151 md->zwp_offset = NULL; in dm_cleanup_zoned_dev()
152 md->nr_zones = 0; in dm_cleanup_zoned_dev()
180 struct mapped_device *md = data; in dm_zone_revalidate_cb() local
181 struct gendisk *disk = md->disk; in dm_zone_revalidate_cb()
201 if (!md->zwp_offset) { in dm_zone_revalidate_cb()
202 md->zwp_offset = in dm_zone_revalidate_cb()
205 if (!md->zwp_offset) in dm_zone_revalidate_cb()
208 md->zwp_offset[idx] = dm_get_zone_wp_offset(zone); in dm_zone_revalidate_cb()
226 static int dm_revalidate_zones(struct mapped_device *md, struct dm_table *t) in dm_revalidate_zones() argument
228 struct gendisk *disk = md->disk; in dm_revalidate_zones()
236 if (!disk->nr_zones || disk->nr_zones != md->nr_zones) in dm_revalidate_zones()
237 dm_cleanup_zoned_dev(md); in dm_revalidate_zones()
238 if (md->nr_zones) in dm_revalidate_zones()
246 ret = dm_blk_do_report_zones(md, t, 0, disk->nr_zones, in dm_revalidate_zones()
247 dm_zone_revalidate_cb, md); in dm_revalidate_zones()
256 md->nr_zones = disk->nr_zones; in dm_revalidate_zones()
262 dm_cleanup_zoned_dev(md); in dm_revalidate_zones()
291 struct mapped_device *md = t->md; in dm_set_zones_restrictions() local
298 md->disk->nr_zones = bdev_nr_zones(md->disk->part0); in dm_set_zones_restrictions()
302 clear_bit(DMF_EMULATE_ZONE_APPEND, &md->flags); in dm_set_zones_restrictions()
303 dm_cleanup_zoned_dev(md); in dm_set_zones_restrictions()
311 set_bit(DMF_EMULATE_ZONE_APPEND, &md->flags); in dm_set_zones_restrictions()
312 if (!get_capacity(md->disk)) in dm_set_zones_restrictions()
315 return dm_revalidate_zones(md, t); in dm_set_zones_restrictions()
328 static int dm_update_zone_wp_offset(struct mapped_device *md, unsigned int zno, in dm_update_zone_wp_offset() argument
331 sector_t sector = zno * bdev_zone_sectors(md->disk->part0); in dm_update_zone_wp_offset()
336 t = dm_get_live_table(md, &srcu_idx); in dm_update_zone_wp_offset()
345 ret = dm_blk_do_report_zones(md, t, sector, 1, in dm_update_zone_wp_offset()
349 dm_put_live_table(md, srcu_idx); in dm_update_zone_wp_offset()
367 static bool dm_zone_map_bio_begin(struct mapped_device *md, in dm_zone_map_bio_begin() argument
370 sector_t zsectors = bdev_zone_sectors(md->disk->part0); in dm_zone_map_bio_begin()
371 unsigned int zwp_offset = READ_ONCE(md->zwp_offset[zno]); in dm_zone_map_bio_begin()
380 if (dm_update_zone_wp_offset(md, zno, &zwp_offset)) in dm_zone_map_bio_begin()
382 WRITE_ONCE(md->zwp_offset[zno], zwp_offset); in dm_zone_map_bio_begin()
423 static blk_status_t dm_zone_map_bio_end(struct mapped_device *md, unsigned int zno, in dm_zone_map_bio_end() argument
427 unsigned int zwp_offset = READ_ONCE(md->zwp_offset[zno]); in dm_zone_map_bio_end()
436 WRITE_ONCE(md->zwp_offset[zno], 0); in dm_zone_map_bio_end()
439 WRITE_ONCE(md->zwp_offset[zno], in dm_zone_map_bio_end()
440 bdev_zone_sectors(md->disk->part0)); in dm_zone_map_bio_end()
444 WRITE_ONCE(md->zwp_offset[zno], zwp_offset + nr_sectors); in dm_zone_map_bio_end()
455 WRITE_ONCE(md->zwp_offset[zno], zwp_offset + nr_sectors); in dm_zone_map_bio_end()
516 struct mapped_device *md = io->md; in dm_zone_map_bio() local
532 dm_zone_lock(md->disk, zno, clone); in dm_zone_map_bio()
541 if (!dm_zone_map_bio_begin(md, zno, clone)) { in dm_zone_map_bio()
542 dm_zone_unlock(md->disk, zno, clone); in dm_zone_map_bio()
554 sts = dm_zone_map_bio_end(md, zno, &orig_bio_details, in dm_zone_map_bio()
563 sts = dm_zone_map_bio_end(md, zno, &orig_bio_details, in dm_zone_map_bio()
566 dm_zone_unlock(md->disk, zno, clone); in dm_zone_map_bio()
571 dm_zone_unlock(md->disk, zno, clone); in dm_zone_map_bio()
587 struct mapped_device *md = io->md; in dm_zone_endio() local
588 struct gendisk *disk = md->disk; in dm_zone_endio()
597 if (!dm_emulate_zone_append(md)) { in dm_zone_endio()
631 WRITE_ONCE(md->zwp_offset[zno], DM_ZONE_INVALID_WP_OFST); in dm_zone_endio()
637 zwp_offset = READ_ONCE(md->zwp_offset[zno]); in dm_zone_endio()
639 WRITE_ONCE(md->zwp_offset[zno], in dm_zone_endio()