Lines Matching refs:md

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