Lines Matching refs:mddev

28 static int raid0_congested(struct mddev *mddev, int bits)  in raid0_congested()  argument
30 struct r0conf *conf = mddev->private; in raid0_congested()
46 static void dump_zones(struct mddev *mddev) in dump_zones() argument
52 struct r0conf *conf = mddev->private; in dump_zones()
55 mdname(mddev), in dump_zones()
76 static int create_strip_zones(struct mddev *mddev, struct r0conf **private_conf) in create_strip_zones() argument
90 rdev_for_each(rdev1, mddev) { in create_strip_zones()
92 mdname(mddev), in create_strip_zones()
98 sector_div(sectors, mddev->chunk_sectors); in create_strip_zones()
99 rdev1->sectors = sectors * mddev->chunk_sectors; in create_strip_zones()
104 rdev_for_each(rdev2, mddev) { in create_strip_zones()
107 mdname(mddev), in create_strip_zones()
114 mdname(mddev)); in create_strip_zones()
123 mdname(mddev)); in create_strip_zones()
128 mdname(mddev)); in create_strip_zones()
132 mdname(mddev)); in create_strip_zones()
135 mdname(mddev), conf->nr_strip_zones); in create_strip_zones()
139 mdname(mddev), conf->nr_strip_zones); in create_strip_zones()
144 if ((mddev->chunk_sectors << 9) % blksize) { in create_strip_zones()
146 mdname(mddev), in create_strip_zones()
147 mddev->chunk_sectors << 9, blksize); in create_strip_zones()
158 conf->nr_strip_zones*mddev->raid_disks, in create_strip_zones()
171 rdev_for_each(rdev1, mddev) { in create_strip_zones()
174 if (mddev->level == 10) { in create_strip_zones()
180 if (mddev->level == 1) { in create_strip_zones()
191 mdname(mddev)); in create_strip_zones()
194 if (j >= mddev->raid_disks) { in create_strip_zones()
196 "aborting!\n", mdname(mddev), j); in create_strip_zones()
201 "aborting!\n", mdname(mddev), j); in create_strip_zones()
213 if (cnt != mddev->raid_disks) { in create_strip_zones()
215 "aborting!\n", mdname(mddev), cnt, mddev->raid_disks); in create_strip_zones()
229 dev = conf->devlist + i * mddev->raid_disks; in create_strip_zones()
231 pr_debug("md/raid0:%s: zone %d\n", mdname(mddev), i); in create_strip_zones()
240 mdname(mddev), in create_strip_zones()
246 mdname(mddev), in create_strip_zones()
253 mdname(mddev), in create_strip_zones()
261 mdname(mddev), in create_strip_zones()
268 mdname(mddev), in create_strip_zones()
272 pr_debug("md/raid0:%s: done.\n", mdname(mddev)); in create_strip_zones()
307 static struct md_rdev *map_sector(struct mddev *mddev, struct strip_zone *zone, in map_sector() argument
312 struct r0conf *conf = mddev->private; in map_sector()
314 unsigned int chunk_sects = mddev->chunk_sectors; in map_sector()
348 static int raid0_mergeable_bvec(struct mddev *mddev, in raid0_mergeable_bvec() argument
352 struct r0conf *conf = mddev->private; in raid0_mergeable_bvec()
356 unsigned int chunk_sectors = mddev->chunk_sectors; in raid0_mergeable_bvec()
380 zone = find_zone(mddev->private, &sector_offset); in raid0_mergeable_bvec()
381 rdev = map_sector(mddev, zone, sector, &sector_offset); in raid0_mergeable_bvec()
392 static sector_t raid0_size(struct mddev *mddev, sector_t sectors, int raid_disks) in raid0_size() argument
400 rdev_for_each(rdev, mddev) in raid0_size()
402 ~(sector_t)(mddev->chunk_sectors-1)); in raid0_size()
407 static void raid0_free(struct mddev *mddev, void *priv);
409 static int raid0_run(struct mddev *mddev) in raid0_run() argument
414 if (mddev->chunk_sectors == 0) { in raid0_run()
416 mdname(mddev)); in raid0_run()
419 if (md_check_no_bitmap(mddev)) in raid0_run()
423 if (mddev->private == NULL) { in raid0_run()
424 ret = create_strip_zones(mddev, &conf); in raid0_run()
427 mddev->private = conf; in raid0_run()
429 conf = mddev->private; in raid0_run()
430 if (mddev->queue) { in raid0_run()
434 blk_queue_max_hw_sectors(mddev->queue, mddev->chunk_sectors); in raid0_run()
435 blk_queue_max_write_same_sectors(mddev->queue, mddev->chunk_sectors); in raid0_run()
436 blk_queue_max_discard_sectors(mddev->queue, mddev->chunk_sectors); in raid0_run()
438 blk_queue_io_min(mddev->queue, mddev->chunk_sectors << 9); in raid0_run()
439 blk_queue_io_opt(mddev->queue, in raid0_run()
440 (mddev->chunk_sectors << 9) * mddev->raid_disks); in raid0_run()
442 rdev_for_each(rdev, mddev) { in raid0_run()
443 disk_stack_limits(mddev->gendisk, rdev->bdev, in raid0_run()
449 queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, mddev->queue); in raid0_run()
451 queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, mddev->queue); in raid0_run()
455 md_set_array_sectors(mddev, raid0_size(mddev, 0, 0)); in raid0_run()
458 mdname(mddev), in raid0_run()
459 (unsigned long long)mddev->array_sectors); in raid0_run()
461 if (mddev->queue) { in raid0_run()
471 int stripe = mddev->raid_disks * in raid0_run()
472 (mddev->chunk_sectors << 9) / PAGE_SIZE; in raid0_run()
473 if (mddev->queue->backing_dev_info.ra_pages < 2* stripe) in raid0_run()
474 mddev->queue->backing_dev_info.ra_pages = 2* stripe; in raid0_run()
477 dump_zones(mddev); in raid0_run()
479 ret = md_integrity_register(mddev); in raid0_run()
484 static void raid0_free(struct mddev *mddev, void *priv) in raid0_free() argument
496 static inline int is_io_in_chunk_boundary(struct mddev *mddev, in is_io_in_chunk_boundary() argument
510 static void raid0_make_request(struct mddev *mddev, struct bio *bio) in raid0_make_request() argument
517 md_flush_request(mddev, bio); in raid0_make_request()
523 unsigned chunk_sects = mddev->chunk_sectors; in raid0_make_request()
540 zone = find_zone(mddev->private, &sector); in raid0_make_request()
541 tmp_dev = map_sector(mddev, zone, sector, &sector); in raid0_make_request()
555 static void raid0_status(struct seq_file *seq, struct mddev *mddev) in raid0_status() argument
557 seq_printf(seq, " %dk chunks", mddev->chunk_sectors / 2); in raid0_status()
561 static void *raid0_takeover_raid45(struct mddev *mddev) in raid0_takeover_raid45() argument
566 if (mddev->degraded != 1) { in raid0_takeover_raid45()
568 mdname(mddev), in raid0_takeover_raid45()
569 mddev->degraded); in raid0_takeover_raid45()
573 rdev_for_each(rdev, mddev) { in raid0_takeover_raid45()
575 if (rdev->raid_disk == mddev->raid_disks-1) { in raid0_takeover_raid45()
577 mdname(mddev)); in raid0_takeover_raid45()
580 rdev->sectors = mddev->dev_sectors; in raid0_takeover_raid45()
584 mddev->new_level = 0; in raid0_takeover_raid45()
585 mddev->new_layout = 0; in raid0_takeover_raid45()
586 mddev->new_chunk_sectors = mddev->chunk_sectors; in raid0_takeover_raid45()
587 mddev->raid_disks--; in raid0_takeover_raid45()
588 mddev->delta_disks = -1; in raid0_takeover_raid45()
590 mddev->recovery_cp = MaxSector; in raid0_takeover_raid45()
592 create_strip_zones(mddev, &priv_conf); in raid0_takeover_raid45()
596 static void *raid0_takeover_raid10(struct mddev *mddev) in raid0_takeover_raid10() argument
606 if (mddev->layout != ((1 << 8) + 2)) { in raid0_takeover_raid10()
608 mdname(mddev), in raid0_takeover_raid10()
609 mddev->layout); in raid0_takeover_raid10()
612 if (mddev->raid_disks & 1) { in raid0_takeover_raid10()
614 mdname(mddev)); in raid0_takeover_raid10()
617 if (mddev->degraded != (mddev->raid_disks>>1)) { in raid0_takeover_raid10()
619 mdname(mddev)); in raid0_takeover_raid10()
624 mddev->new_level = 0; in raid0_takeover_raid10()
625 mddev->new_layout = 0; in raid0_takeover_raid10()
626 mddev->new_chunk_sectors = mddev->chunk_sectors; in raid0_takeover_raid10()
627 mddev->delta_disks = - mddev->raid_disks / 2; in raid0_takeover_raid10()
628 mddev->raid_disks += mddev->delta_disks; in raid0_takeover_raid10()
629 mddev->degraded = 0; in raid0_takeover_raid10()
631 mddev->recovery_cp = MaxSector; in raid0_takeover_raid10()
633 create_strip_zones(mddev, &priv_conf); in raid0_takeover_raid10()
637 static void *raid0_takeover_raid1(struct mddev *mddev) in raid0_takeover_raid1() argument
645 if ((mddev->raid_disks - 1) != mddev->degraded) { in raid0_takeover_raid1()
647 mdname(mddev)); in raid0_takeover_raid1()
658 while (chunksect && (mddev->array_sectors & (chunksect - 1))) in raid0_takeover_raid1()
666 mddev->new_level = 0; in raid0_takeover_raid1()
667 mddev->new_layout = 0; in raid0_takeover_raid1()
668 mddev->new_chunk_sectors = chunksect; in raid0_takeover_raid1()
669 mddev->chunk_sectors = chunksect; in raid0_takeover_raid1()
670 mddev->delta_disks = 1 - mddev->raid_disks; in raid0_takeover_raid1()
671 mddev->raid_disks = 1; in raid0_takeover_raid1()
673 mddev->recovery_cp = MaxSector; in raid0_takeover_raid1()
675 create_strip_zones(mddev, &priv_conf); in raid0_takeover_raid1()
679 static void *raid0_takeover(struct mddev *mddev) in raid0_takeover() argument
688 if (mddev->bitmap) { in raid0_takeover()
690 mdname(mddev)); in raid0_takeover()
693 if (mddev->level == 4) in raid0_takeover()
694 return raid0_takeover_raid45(mddev); in raid0_takeover()
696 if (mddev->level == 5) { in raid0_takeover()
697 if (mddev->layout == ALGORITHM_PARITY_N) in raid0_takeover()
698 return raid0_takeover_raid45(mddev); in raid0_takeover()
701 mdname(mddev), ALGORITHM_PARITY_N); in raid0_takeover()
704 if (mddev->level == 10) in raid0_takeover()
705 return raid0_takeover_raid10(mddev); in raid0_takeover()
707 if (mddev->level == 1) in raid0_takeover()
708 return raid0_takeover_raid1(mddev); in raid0_takeover()
711 mddev->level); in raid0_takeover()
716 static void raid0_quiesce(struct mddev *mddev, int state) in raid0_quiesce() argument