Lines Matching defs:mddev

35 static void dump_zones(struct mddev *mddev)
41 struct r0conf *conf = mddev->private;
44 mdname(mddev),
65 static int create_strip_zones(struct mddev *mddev, struct r0conf **private_conf)
80 rdev_for_each(rdev1, mddev) {
82 mdname(mddev),
88 sector_div(sectors, mddev->chunk_sectors);
89 rdev1->sectors = sectors * mddev->chunk_sectors;
94 rdev_for_each(rdev2, mddev) {
97 mdname(mddev),
104 mdname(mddev));
113 mdname(mddev));
118 mdname(mddev));
122 mdname(mddev));
125 mdname(mddev), conf->nr_strip_zones);
129 mdname(mddev), conf->nr_strip_zones);
135 if ((mddev->chunk_sectors << 9) % blksize) {
137 mdname(mddev),
138 mddev->chunk_sectors << 9, blksize);
151 mddev->raid_disks),
164 rdev_for_each(rdev1, mddev) {
167 if (mddev->level == 10) {
173 if (mddev->level == 1) {
183 mdname(mddev));
186 if (j >= mddev->raid_disks) {
188 mdname(mddev), j);
193 mdname(mddev), j);
202 if (cnt != mddev->raid_disks) {
204 mdname(mddev), cnt, mddev->raid_disks);
218 dev = conf->devlist + i * mddev->raid_disks;
220 pr_debug("md/raid0:%s: zone %d\n", mdname(mddev), i);
229 mdname(mddev),
235 mdname(mddev),
242 mdname(mddev),
250 mdname(mddev),
257 mdname(mddev),
263 } else if (mddev->layout == RAID0_ORIG_LAYOUT ||
264 mddev->layout == RAID0_ALT_MULTIZONE_LAYOUT) {
265 conf->layout = mddev->layout;
271 mdname(mddev));
281 sector_div(first_sector, mddev->chunk_sectors);
289 pr_debug("md/raid0:%s: done.\n", mdname(mddev));
324 static struct md_rdev *map_sector(struct mddev *mddev, struct strip_zone *zone,
329 struct r0conf *conf = mddev->private;
331 unsigned int chunk_sects = mddev->chunk_sectors;
357 static sector_t raid0_size(struct mddev *mddev, sector_t sectors, int raid_disks)
365 rdev_for_each(rdev, mddev)
367 ~(sector_t)(mddev->chunk_sectors-1));
372 static void raid0_free(struct mddev *mddev, void *priv);
374 static int raid0_run(struct mddev *mddev)
379 if (mddev->chunk_sectors == 0) {
380 pr_warn("md/raid0:%s: chunk size must be set.\n", mdname(mddev));
383 if (md_check_no_bitmap(mddev))
387 if (mddev->private == NULL) {
388 ret = create_strip_zones(mddev, &conf);
391 mddev->private = conf;
393 conf = mddev->private;
394 if (mddev->queue) {
398 blk_queue_max_hw_sectors(mddev->queue, mddev->chunk_sectors);
399 blk_queue_max_write_same_sectors(mddev->queue, mddev->chunk_sectors);
400 blk_queue_max_write_zeroes_sectors(mddev->queue, mddev->chunk_sectors);
401 blk_queue_max_discard_sectors(mddev->queue, UINT_MAX);
403 blk_queue_io_min(mddev->queue, mddev->chunk_sectors << 9);
404 blk_queue_io_opt(mddev->queue,
405 (mddev->chunk_sectors << 9) * mddev->raid_disks);
407 rdev_for_each(rdev, mddev) {
408 disk_stack_limits(mddev->gendisk, rdev->bdev,
414 blk_queue_flag_clear(QUEUE_FLAG_DISCARD, mddev->queue);
416 blk_queue_flag_set(QUEUE_FLAG_DISCARD, mddev->queue);
420 md_set_array_sectors(mddev, raid0_size(mddev, 0, 0));
423 mdname(mddev),
424 (unsigned long long)mddev->array_sectors);
426 dump_zones(mddev);
428 ret = md_integrity_register(mddev);
433 static void raid0_free(struct mddev *mddev, void *priv)
456 static void raid0_handle_discard(struct mddev *mddev, struct bio *bio)
458 struct r0conf *conf = mddev->private;
477 &mddev->bio_set);
490 stripe_size = zone->nb_dev * mddev->chunk_sectors;
499 sector_div(orig_start, mddev->chunk_sectors);
504 sector_div(orig_end, mddev->chunk_sectors);
510 mddev->chunk_sectors;
512 mddev->chunk_sectors;
515 mddev->chunk_sectors) +
516 first_stripe_index * mddev->chunk_sectors;
518 mddev->chunk_sectors) +
519 last_stripe_index * mddev->chunk_sectors;
532 mddev->chunk_sectors;
534 dev_start = first_stripe_index * mddev->chunk_sectors;
539 dev_end = (last_stripe_index + 1) * mddev->chunk_sectors;
541 dev_end = last_stripe_index * mddev->chunk_sectors;
557 if (mddev->gendisk)
559 discard_bio, disk_devt(mddev->gendisk),
566 static bool raid0_make_request(struct mddev *mddev, struct bio *bio)
568 struct r0conf *conf = mddev->private;
578 && md_flush_request(mddev, bio))
582 raid0_handle_discard(mddev, bio);
588 chunk_sects = mddev->chunk_sectors;
600 &mddev->bio_set);
607 zone = find_zone(mddev->private, &sector);
610 tmp_dev = map_sector(mddev, zone, orig_sector, &sector);
613 tmp_dev = map_sector(mddev, zone, sector, &sector);
616 WARN(1, "md/raid0:%s: Invalid layout\n", mdname(mddev));
630 if (mddev->gendisk)
632 disk_devt(mddev->gendisk), bio_sector);
633 mddev_check_writesame(mddev, bio);
634 mddev_check_write_zeroes(mddev, bio);
639 static void raid0_status(struct seq_file *seq, struct mddev *mddev)
641 seq_printf(seq, " %dk chunks", mddev->chunk_sectors / 2);
645 static void *raid0_takeover_raid45(struct mddev *mddev)
650 if (mddev->degraded != 1) {
652 mdname(mddev),
653 mddev->degraded);
657 rdev_for_each(rdev, mddev) {
659 if (rdev->raid_disk == mddev->raid_disks-1) {
661 mdname(mddev));
664 rdev->sectors = mddev->dev_sectors;
668 mddev->new_level = 0;
669 mddev->new_layout = 0;
670 mddev->new_chunk_sectors = mddev->chunk_sectors;
671 mddev->raid_disks--;
672 mddev->delta_disks = -1;
674 mddev->recovery_cp = MaxSector;
675 mddev_clear_unsupported_flags(mddev, UNSUPPORTED_MDDEV_FLAGS);
677 create_strip_zones(mddev, &priv_conf);
682 static void *raid0_takeover_raid10(struct mddev *mddev)
692 if (mddev->layout != ((1 << 8) + 2)) {
694 mdname(mddev),
695 mddev->layout);
698 if (mddev->raid_disks & 1) {
700 mdname(mddev));
703 if (mddev->degraded != (mddev->raid_disks>>1)) {
705 mdname(mddev));
710 mddev->new_level = 0;
711 mddev->new_layout = 0;
712 mddev->new_chunk_sectors = mddev->chunk_sectors;
713 mddev->delta_disks = - mddev->raid_disks / 2;
714 mddev->raid_disks += mddev->delta_disks;
715 mddev->degraded = 0;
717 mddev->recovery_cp = MaxSector;
718 mddev_clear_unsupported_flags(mddev, UNSUPPORTED_MDDEV_FLAGS);
720 create_strip_zones(mddev, &priv_conf);
724 static void *raid0_takeover_raid1(struct mddev *mddev)
732 if ((mddev->raid_disks - 1) != mddev->degraded) {
734 mdname(mddev));
745 while (chunksect && (mddev->array_sectors & (chunksect - 1)))
753 mddev->new_level = 0;
754 mddev->new_layout = 0;
755 mddev->new_chunk_sectors = chunksect;
756 mddev->chunk_sectors = chunksect;
757 mddev->delta_disks = 1 - mddev->raid_disks;
758 mddev->raid_disks = 1;
760 mddev->recovery_cp = MaxSector;
761 mddev_clear_unsupported_flags(mddev, UNSUPPORTED_MDDEV_FLAGS);
763 create_strip_zones(mddev, &priv_conf);
767 static void *raid0_takeover(struct mddev *mddev)
776 if (mddev->bitmap) {
778 mdname(mddev));
781 if (mddev->level == 4)
782 return raid0_takeover_raid45(mddev);
784 if (mddev->level == 5) {
785 if (mddev->layout == ALGORITHM_PARITY_N)
786 return raid0_takeover_raid45(mddev);
789 mdname(mddev), ALGORITHM_PARITY_N);
792 if (mddev->level == 10)
793 return raid0_takeover_raid10(mddev);
795 if (mddev->level == 1)
796 return raid0_takeover_raid1(mddev);
799 mddev->level);
804 static void raid0_quiesce(struct mddev *mddev, int quiesce)