Lines Matching +full:5 +full:md

12 #include "md.h"
16 #include "md-bitmap.h"
21 #define MAX_RAID_DEVICES 253 /* md-raid kernel limit */
70 #define __CTR_FLAG_MAX_RECOVERY_RATE 5 /* 2 */ /* Not with raid0! */
73 #define __CTR_FLAG_STRIPE_CACHE 8 /* 2 */ /* Only with raid4/5/6! */
78 #define __CTR_FLAG_DELTA_DISKS 12 /* 2 */ /* Only with reshapable raid1/4/5/6/10! */
79 #define __CTR_FLAG_DATA_OFFSET 13 /* 2 */ /* Only with reshapable raid4/5/6/10! */
83 #define __CTR_FLAG_JOURNAL_DEV 15 /* 2 */ /* Only with raid4/5/6 (journal device)! */
86 #define __CTR_FLAG_JOURNAL_MODE 16 /* 2 */ /* Only with raid4/5/6 (journal mode)! */
168 * "raid4/5/6" do not accept any raid1 or raid10 specific options
212 #define RT_FLAG_RS_SUSPENDED 5
245 struct mddev md; member
251 /* Optional raid4/5/6 journal device */
263 struct mddev *mddev = &rs->md; in rs_config_backup()
272 struct mddev *mddev = &rs->md; in rs_config_restore()
300 …{"raid4", "raid4 (dedicated first parity disk)", 1, 2, 5, ALGORITHM_PARITY_0}, /* raid4 layo…
301 {"raid5_n", "raid5 (dedicated last parity disk)", 1, 2, 5, ALGORITHM_PARITY_N},
302 {"raid5_ls", "raid5 (left symmetric)", 1, 2, 5, ALGORITHM_LEFT_SYMMETRIC},
303 {"raid5_rs", "raid5 (right symmetric)", 1, 2, 5, ALGORITHM_RIGHT_SYMMETRIC},
304 {"raid5_la", "raid5 (left asymmetric)", 1, 2, 5, ALGORITHM_LEFT_ASYMMETRIC},
305 {"raid5_ra", "raid5 (right asymmetric)", 1, 2, 5, ALGORITHM_RIGHT_ASYMMETRIC},
371 /* Return MD raid4/5/6 journal mode for dm @journal_mode one */
383 /* Return dm-raid raid4/5/6 journal mode string for @mode */
403 return !rs->md.level; in rs_is_raid0()
409 return rs->md.level == 1; in rs_is_raid1()
415 return rs->md.level == 10; in rs_is_raid10()
421 return rs->md.level == 6; in rs_is_raid6()
424 /* Return true, if raid set in @rs is level 4, 5 or 6 */
427 return __within_range(rs->md.level, 4, 6); in rs_is_raid456()
435 (rs_is_raid10(rs) && !__is_raid10_far(rs->md.new_layout)); in rs_is_reshapable()
441 return rs->md.resync_offset < rs->md.dev_sectors; in rs_is_recovering()
447 return rs->md.reshape_position != MaxSector; in rs_is_reshaping()
472 /* Return true, if raid type in @rt is raid4/5 */
475 return __within_range(rt->level, 4, 5); in rt_is_raid45()
484 /* Return true, if raid type in @rt is raid4/5/6 */
523 /* MD raid10 bit definitions and helpers */
529 /* Return md raid10 near copies for @layout */
535 /* Return md raid10 far copies for @layout */
541 /* Return true if md raid10 offset for @layout */
547 /* Return true if md raid10 near for @layout */
553 /* Return true if md raid10 far for @layout */
559 /* Return md raid10 layout string for @layout */
566 * Refer to MD's raid10.c for details in raid10_md_layout_to_format()
580 /* Return md raid10 algorithm for @name */
593 /* Return md raid10 copies for @layout */
599 /* Return md raid10 format id for @format string */
607 * MD resilienece flaw: in raid10_format_to_md_layout()
634 /* END: MD raid10 bit definitions and helpers */
686 struct mddev *mddev = &rs->md; in rs_set_rdev_sectors()
705 set_capacity_and_notify(gendisk, rs->md.array_sectors); in rs_set_capacity()
714 struct mddev *mddev = &rs->md; in rs_set_cur()
727 struct mddev *mddev = &rs->md; in rs_set_new()
753 if (mddev_init(&rs->md)) { in raid_set_alloc()
765 rs->md.raid_disks = raid_devs; in raid_set_alloc()
766 rs->md.level = raid_type->level; in raid_set_alloc()
767 rs->md.new_level = rs->md.level; in raid_set_alloc()
768 rs->md.layout = raid_type->algorithm; in raid_set_alloc()
769 rs->md.new_layout = rs->md.layout; in raid_set_alloc()
770 rs->md.delta_disks = 0; in raid_set_alloc()
771 rs->md.resync_offset = MaxSector; in raid_set_alloc()
778 * rs->md.persistent in raid_set_alloc()
779 * rs->md.external in raid_set_alloc()
780 * rs->md.chunk_sectors in raid_set_alloc()
781 * rs->md.new_chunk_sectors in raid_set_alloc()
782 * rs->md.dev_sectors in raid_set_alloc()
806 mddev_destroy(&rs->md); in raid_set_free()
851 rs->dev[i].rdev.mddev = &rs->md; in parse_dev_params()
903 list_add_tail(&rs->dev[i].rdev.same_set, &rs->md.disks); in parse_dev_params()
909 list_add_tail(&rs->journal_dev.rdev.same_set, &rs->md.disks); in parse_dev_params()
912 rs->md.external = 0; in parse_dev_params()
913 rs->md.persistent = 1; in parse_dev_params()
914 rs->md.major_version = 2; in parse_dev_params()
915 } else if (rebuild && !rs->md.resync_offset) { in parse_dev_params()
939 * Set rs->md.bitmap_info.chunksize (which really refers to 'region size').
940 * Ensure that (ti->len/region_size < 2^21) - required by MD bitmap.
985 if (region_size < rs->md.chunk_sectors) { in validate_region_size()
994 rs->md.bitmap_info.chunksize = to_bytes(region_size); in validate_region_size()
1020 switch (rs->md.level) { in validate_raid_redundancy()
1024 if (rebuild_cnt >= rs->md.raid_disks) in validate_raid_redundancy()
1028 case 5: in validate_raid_redundancy()
1034 copies = raid10_md_layout_to_copies(rs->md.new_layout); in validate_raid_redundancy()
1057 raid_disks = min(rs->raid_disks, rs->md.raid_disks); in validate_raid_redundancy()
1058 if (__is_raid10_near(rs->md.new_layout)) { in validate_raid_redundancy()
1123 * [journal_dev <dev>] raid4/5/6 journaling deviice
1166 rs->md.new_chunk_sectors = rs->md.chunk_sectors = value; in parse_raid_params()
1256 rs->ti->error = "Only one raid4/5/6 set journaling device allowed"; in parse_raid_params()
1266 rs->ti->error = "raid4/5/6 journal device lookup failure"; in parse_raid_params()
1271 jdev->mddev = &rs->md; in parse_raid_params()
1275 rs->ti->error = "No space for raid4/5/6 journal"; in parse_raid_params()
1288 rs->ti->error = "raid4/5/6 'journal_mode' is invalid without 'journal_dev'"; in parse_raid_params()
1292 rs->ti->error = "Only one raid4/5/6 'journal_mode' argument allowed"; in parse_raid_params()
1339 if (!__within_range(value, 0, rs->md.raid_disks - 1)) { in parse_raid_params()
1363 rs->md.bitmap_info.max_write_behind = value / 2; in parse_raid_params()
1373 rs->md.bitmap_info.daemon_sleep = value; in parse_raid_params()
1426 rs->md.sync_speed_min = value; in parse_raid_params()
1437 rs->md.sync_speed_max = value; in parse_raid_params()
1452 if (!__within_range(value, 2, rs->md.raid_disks)) { in parse_raid_params()
1478 if (write_mostly >= rs->md.raid_disks) { in parse_raid_params()
1483 if (rs->md.sync_speed_max && in parse_raid_params()
1484 rs->md.sync_speed_min > rs->md.sync_speed_max) { in parse_raid_params()
1492 if (rs->md.chunk_sectors) in parse_raid_params()
1493 max_io_len = rs->md.chunk_sectors; in parse_raid_params()
1501 if (raid10_copies > rs->md.raid_disks) { in parse_raid_params()
1506 rs->md.new_layout = raid10_format_to_md_layout(rs, raid10_format, raid10_copies); in parse_raid_params()
1507 if (rs->md.new_layout < 0) { in parse_raid_params()
1509 return rs->md.new_layout; in parse_raid_params()
1512 rt = get_raid_type_by_ll(10, rs->md.new_layout); in parse_raid_params()
1529 rs->md.persistent = 0; in parse_raid_params()
1530 rs->md.external = 1; in parse_raid_params()
1536 /* Set raid4/5/6 cache size */
1541 struct mddev *mddev = &rs->md; in rs_set_raid456_stripe_cache()
1566 rs->ti->error = "Failed to set raid4/5/6 stripe cache size"; in rs_set_raid456_stripe_cache()
1579 return rs->md.raid_disks - rs->raid_type->parity_devs; in mddev_data_stripes()
1613 rdev_for_each(rdev, &rs->md) in _check_data_dev_sectors()
1616 if (ds < rs->md.dev_sectors) { in _check_data_dev_sectors()
1631 rdev_for_each(rdev, &rs->md) in _get_reshape_sectors()
1648 struct mddev *mddev = &rs->md; in rs_set_dev_and_array_sectors()
1698 rs->md.resync_offset = MaxSector; in rs_setup_recovery()
1705 rs->md.resync_offset = dev_sectors; in rs_setup_recovery()
1711 rs->md.resync_offset = test_bit(__CTR_FLAG_NOSYNC, &rs->ctr_flags) in rs_setup_recovery()
1717 struct raid_set *rs = container_of(ws, struct raid_set, md.event_work); in do_table_event()
1723 rs->array_sectors > rs->md.array_sectors && in do_table_event()
1724 !rs->md.delta_disks && in do_table_event()
1725 rs->md.raid_disks == rs->raid_disks) { in do_table_event()
1730 rs->md.array_sectors = rs->array_sectors; in do_table_event()
1740 * Conversions of raid sets from one MD personality to another
1745 struct mddev *mddev = &rs->md; in rs_check_takeover()
1748 if (rs->md.degraded) { in rs_check_takeover()
1760 /* raid0 -> raid1/5 with one disk */ in rs_check_takeover()
1761 if ((mddev->new_level == 1 || mddev->new_level == 5) && in rs_check_takeover()
1770 /* raid0 with multiple disks -> raid4/5/6 */ in rs_check_takeover()
1808 /* raid10_{near,far} with 2 disks -> raid4/5 */ in rs_check_takeover()
1809 if (__within_range(mddev->new_level, 4, 5) && in rs_check_takeover()
1815 /* raid1 with 2 disks -> raid4/5 */ in rs_check_takeover()
1816 if (__within_range(mddev->new_level, 4, 5) && in rs_check_takeover()
1837 /* raid4 -> raid1/5 with 2 disks */ in rs_check_takeover()
1838 if ((mddev->new_level == 1 || mddev->new_level == 5) && in rs_check_takeover()
1843 if (__within_range(mddev->new_level, 5, 6) && in rs_check_takeover()
1848 case 5: in rs_check_takeover()
1883 if (mddev->new_level == 5 && in rs_check_takeover()
1900 return rs->md.new_level != rs->md.level; in rs_takeover_requested()
1906 return (use_mddev ? rs->md.delta_disks : rs->delta_disks) || in rs_is_layout_change()
1907 rs->md.new_layout != rs->md.layout || in rs_is_layout_change()
1908 rs->md.new_chunk_sectors != rs->md.chunk_sectors; in rs_is_layout_change()
1915 struct mddev *mddev = &rs->md; in rs_reshape_requested()
1950 * This structure is never routinely used by userspace, unlike md superblocks.
1961 __le64 events; /* Incremented by md when superblock updated */
2043 struct mddev *mddev = &rs->md; in rs_check_reshape()
2054 rs->ti->error = "Reshaping only supported for raid1/4/5/6/10"; in rs_check_reshape()
2116 struct raid_set *rs = container_of(mddev, struct raid_set, md); in super_sync()
2240 struct mddev *mddev = &rs->md; in super_init_validation()
2461 struct mddev *mddev = &rs->md; in super_validate()
2487 /* Enable bitmap creation on @rs unless no metadevs or raid0 or journaled raid4/5/6 set. */ in super_validate()
2534 struct mddev *mddev = &rs->md; in analyse_superblocks()
2580 * the MD raid0 personality will fail to start the array. in analyse_superblocks()
2698 bdev_nr_sectors(rdev->bdev) - rs->md.dev_sectors < MIN_FREE_RESHAPE_SPACE) { in rs_adjust_data_offsets()
2708 if (rs->md.resync_offset < rs->md.dev_sectors) in rs_adjust_data_offsets()
2709 rs->md.resync_offset += rs->dev[0].rdev.data_offset; in rs_adjust_data_offsets()
2711 /* Adjust data offsets on all rdevs but on any raid4/5/6 journal device */ in rs_adjust_data_offsets()
2712 rdev_for_each(rdev, &rs->md) { in rs_adjust_data_offsets()
2728 rdev_for_each(rdev, &rs->md) { in __reorder_raid_disk_indexes()
2741 struct mddev *mddev = &rs->md; in rs_setup_takeover()
2787 struct mddev *mddev = &rs->md; in rs_prepare_reshape()
2854 struct mddev *mddev = &rs->md; in rs_setup_reshape()
2891 /* Prepare disks for check in raid4/5/6/10 {check|start}_reshape */ in rs_setup_reshape()
2898 * by md, which'll store that erroneously in the superblock on reshape in rs_setup_reshape()
2945 rdev_for_each(rdev, &rs->md) in rs_setup_reshape()
2953 * If the md resync thread has updated superblock with max reshape position
2961 rs->md.delta_disks = 0; in rs_reset_inconclusive_reshape()
2962 rs->md.reshape_backwards = 0; in rs_reset_inconclusive_reshape()
2977 * XXX: RAID level 4,5,6 require zeroing for safety. in configure_discard_support()
2999 * Construct a RAID0/1/10/4/5/6 mapping:
3067 rs->md.sync_super = super_sync; in raid_ctr()
3080 rs->array_sectors = rs->md.array_sectors; in raid_ctr()
3081 rs->dev_sectors = rs->md.dev_sectors; in raid_ctr()
3095 sb_array_sectors = rs->md.array_sectors; in raid_ctr()
3111 INIT_WORK(&rs->md.event_work, do_table_event); in raid_ctr()
3125 if (test_bit(MD_ARRAY_FIRST_USE, &rs->md.flags)) { in raid_ctr()
3154 /* We can't takeover a journaled raid4/5/6 */ in raid_ctr()
3156 ti->error = "Can't takeover a journaled raid4/5/6 set"; in raid_ctr()
3190 /* We can't reshape a journaled raid4/5/6 */ in raid_ctr()
3192 ti->error = "Can't reshape a journaled raid4/5/6 set"; in raid_ctr()
3202 * check functions via its MD personality instance. in raid_ctr()
3230 …rs_setup_recovery(rs, rs->md.resync_offset < rs->md.dev_sectors ? rs->md.resync_offset : rs->md.de… in raid_ctr()
3252 rs->md.ro = MD_RDONLY; in raid_ctr()
3253 rs->md.in_sync = 1; in raid_ctr()
3256 mddev_suspend_and_lock_nointr(&rs->md); in raid_ctr()
3259 md_frozen_sync_thread(&rs->md); in raid_ctr()
3261 r = md_run(&rs->md); in raid_ctr()
3262 rs->md.in_sync = 0; /* Assume already marked dirty */ in raid_ctr()
3265 mddev_unlock(&rs->md); in raid_ctr()
3269 r = md_start(&rs->md); in raid_ctr()
3275 /* If raid4/5/6 journal mode explicitly requested (only possible with journal dev) -> set it */ in raid_ctr()
3277 r = r5c_journal_mode_set(&rs->md, rs->journal_dev.mode); in raid_ctr()
3279 ti->error = "Failed to set raid4/5/6 journal mode"; in raid_ctr()
3286 /* Try to adjust the raid4/5/6 stripe cache size to the stripe size */ in raid_ctr()
3302 if (rs->md.pers->start_reshape) { in raid_ctr()
3303 r = rs->md.pers->check_reshape(&rs->md); in raid_ctr()
3313 rs->md.dm_gendisk = dm_disk(dm_table_get_md(ti->table)); in raid_ctr()
3315 mddev_unlock(&rs->md); in raid_ctr()
3319 md_stop(&rs->md); in raid_ctr()
3320 mddev_unlock(&rs->md); in raid_ctr()
3331 mddev_lock_nointr(&rs->md); in raid_dtr()
3332 md_stop(&rs->md); in raid_dtr()
3333 rs->md.dm_gendisk = NULL; in raid_dtr()
3334 mddev_unlock(&rs->md); in raid_dtr()
3336 if (work_pending(&rs->md.event_work)) in raid_dtr()
3337 flush_work(&rs->md.event_work); in raid_dtr()
3344 struct mddev *mddev = &rs->md; in raid_map()
3387 /* The MD sync thread can be done with io or be interrupted but still be running */ in decipher_sync_action()
3417 * 'D' = Dead/Failed raid set component or raid4/5/6 journal device
3418 * 'a' = Alive but not in-sync raid set component _or_ alive raid4/5/6 'write_back' journal device
3419 * 'A' = Alive and in-sync raid set component _or_ alive raid4/5/6 'write_through' journal device
3443 struct mddev *mddev = &rs->md; in rs_get_progress()
3530 struct mddev *mddev = &rs->md; in raid_status()
3555 recovery = rs->md.recovery; in raid_status()
3702 recovery = rs->md.recovery; in raid_status()
3736 struct mddev *mddev = &rs->md; in raid_message()
3806 rs->md.dev_sectors, data); in raid_iterate_devices()
3816 unsigned int chunk_size_bytes = to_bytes(rs->md.chunk_sectors); in raid_io_hints()
3827 struct mddev *mddev = &rs->md; in raid_presuspend()
3863 md_stop_writes(&rs->md); in raid_postsuspend()
3864 mddev_suspend(&rs->md, false); in raid_postsuspend()
3865 rs->md.ro = MD_RDONLY; in raid_postsuspend()
3876 struct mddev *mddev = &rs->md; in attempt_restore_of_faulty_devices()
3937 rdev_for_each(r, &rs->md) { in attempt_restore_of_faulty_devices()
3959 struct mddev *mddev = &rs->md; in __load_dirty_region_bitmap()
3974 struct mddev *mddev = &rs->md; in rs_update_sbs()
3993 struct mddev *mddev = &rs->md; in rs_start_reshape()
4040 struct mddev *mddev = &rs->md; in raid_preresume()
4046 /* If different and no explicit grow request, expose MD array size as of superblock. */ in raid_preresume()
4073 /* Resize bitmap to adjust to changed region size (aka MD bitmap chunksize) or grown device size */ in raid_preresume()
4114 struct mddev *mddev = &rs->md; in raid_resume()
4167 MODULE_DESCRIPTION(DM_NAME " raid0/1/10/4/5/6 target");