diff options
| author | Song Liu <songliubraving@fb.com> | 2015-08-13 17:31:54 -0400 |
|---|---|---|
| committer | NeilBrown <neilb@suse.com> | 2015-10-24 02:16:18 -0400 |
| commit | c4d4c91b44d8309082127893221a1971a27c50ca (patch) | |
| tree | d745d1eb415f1dff77c0de54b5a63a4494ba3f76 | |
| parent | 28c1b9fdf4562b52fe104384b16238c39c8a8d40 (diff) | |
MD: replace special disk roles with macros
Add the following two macros for special roles: spare and faulty
MD_DISK_ROLE_SPARE 0xffff
MD_DISK_ROLE_FAULTY 0xfffe
Add MD_DISK_ROLE_MAX 0xff00 as the maximal possible regular role,
and minimal value of special role.
Signed-off-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Shaohua Li <shli@fb.com>
Signed-off-by: NeilBrown <neilb@suse.com>
| -rw-r--r-- | drivers/md/md.c | 14 | ||||
| -rw-r--r-- | include/uapi/linux/raid/md_p.h | 4 |
2 files changed, 11 insertions, 7 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index 44d034246723..cfe5c8704a26 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
| @@ -1608,7 +1608,7 @@ static int super_1_validate(struct mddev *mddev, struct md_rdev *rdev) | |||
| 1608 | ++ev1; | 1608 | ++ev1; |
| 1609 | if (rdev->desc_nr >= 0 && | 1609 | if (rdev->desc_nr >= 0 && |
| 1610 | rdev->desc_nr < le32_to_cpu(sb->max_dev) && | 1610 | rdev->desc_nr < le32_to_cpu(sb->max_dev) && |
| 1611 | le16_to_cpu(sb->dev_roles[rdev->desc_nr]) < 0xfffe) | 1611 | le16_to_cpu(sb->dev_roles[rdev->desc_nr]) < MD_DISK_ROLE_MAX) |
| 1612 | if (ev1 < mddev->events) | 1612 | if (ev1 < mddev->events) |
| 1613 | return -EINVAL; | 1613 | return -EINVAL; |
| 1614 | } else if (mddev->bitmap) { | 1614 | } else if (mddev->bitmap) { |
| @@ -1628,14 +1628,14 @@ static int super_1_validate(struct mddev *mddev, struct md_rdev *rdev) | |||
| 1628 | int role; | 1628 | int role; |
| 1629 | if (rdev->desc_nr < 0 || | 1629 | if (rdev->desc_nr < 0 || |
| 1630 | rdev->desc_nr >= le32_to_cpu(sb->max_dev)) { | 1630 | rdev->desc_nr >= le32_to_cpu(sb->max_dev)) { |
| 1631 | role = 0xffff; | 1631 | role = MD_DISK_ROLE_SPARE; |
| 1632 | rdev->desc_nr = -1; | 1632 | rdev->desc_nr = -1; |
| 1633 | } else | 1633 | } else |
| 1634 | role = le16_to_cpu(sb->dev_roles[rdev->desc_nr]); | 1634 | role = le16_to_cpu(sb->dev_roles[rdev->desc_nr]); |
| 1635 | switch(role) { | 1635 | switch(role) { |
| 1636 | case 0xffff: /* spare */ | 1636 | case MD_DISK_ROLE_SPARE: /* spare */ |
| 1637 | break; | 1637 | break; |
| 1638 | case 0xfffe: /* faulty */ | 1638 | case MD_DISK_ROLE_FAULTY: /* faulty */ |
| 1639 | set_bit(Faulty, &rdev->flags); | 1639 | set_bit(Faulty, &rdev->flags); |
| 1640 | break; | 1640 | break; |
| 1641 | default: | 1641 | default: |
| @@ -1788,18 +1788,18 @@ retry: | |||
| 1788 | max_dev = le32_to_cpu(sb->max_dev); | 1788 | max_dev = le32_to_cpu(sb->max_dev); |
| 1789 | 1789 | ||
| 1790 | for (i=0; i<max_dev;i++) | 1790 | for (i=0; i<max_dev;i++) |
| 1791 | sb->dev_roles[i] = cpu_to_le16(0xfffe); | 1791 | sb->dev_roles[i] = cpu_to_le16(MD_DISK_ROLE_FAULTY); |
| 1792 | 1792 | ||
| 1793 | rdev_for_each(rdev2, mddev) { | 1793 | rdev_for_each(rdev2, mddev) { |
| 1794 | i = rdev2->desc_nr; | 1794 | i = rdev2->desc_nr; |
| 1795 | if (test_bit(Faulty, &rdev2->flags)) | 1795 | if (test_bit(Faulty, &rdev2->flags)) |
| 1796 | sb->dev_roles[i] = cpu_to_le16(0xfffe); | 1796 | sb->dev_roles[i] = cpu_to_le16(MD_DISK_ROLE_FAULTY); |
| 1797 | else if (test_bit(In_sync, &rdev2->flags)) | 1797 | else if (test_bit(In_sync, &rdev2->flags)) |
| 1798 | sb->dev_roles[i] = cpu_to_le16(rdev2->raid_disk); | 1798 | sb->dev_roles[i] = cpu_to_le16(rdev2->raid_disk); |
| 1799 | else if (rdev2->raid_disk >= 0) | 1799 | else if (rdev2->raid_disk >= 0) |
| 1800 | sb->dev_roles[i] = cpu_to_le16(rdev2->raid_disk); | 1800 | sb->dev_roles[i] = cpu_to_le16(rdev2->raid_disk); |
| 1801 | else | 1801 | else |
| 1802 | sb->dev_roles[i] = cpu_to_le16(0xffff); | 1802 | sb->dev_roles[i] = cpu_to_le16(MD_DISK_ROLE_SPARE); |
| 1803 | } | 1803 | } |
| 1804 | 1804 | ||
| 1805 | sb->sb_csum = calc_sb_1_csum(sb); | 1805 | sb->sb_csum = calc_sb_1_csum(sb); |
diff --git a/include/uapi/linux/raid/md_p.h b/include/uapi/linux/raid/md_p.h index 867ee874fa80..d1fc8a637368 100644 --- a/include/uapi/linux/raid/md_p.h +++ b/include/uapi/linux/raid/md_p.h | |||
| @@ -90,6 +90,10 @@ | |||
| 90 | * dire need | 90 | * dire need |
| 91 | */ | 91 | */ |
| 92 | 92 | ||
| 93 | #define MD_DISK_ROLE_SPARE 0xffff | ||
| 94 | #define MD_DISK_ROLE_FAULTY 0xfffe | ||
| 95 | #define MD_DISK_ROLE_MAX 0xff00 /* max value of regular disk role */ | ||
| 96 | |||
| 93 | typedef struct mdp_device_descriptor_s { | 97 | typedef struct mdp_device_descriptor_s { |
| 94 | __u32 number; /* 0 Device number in the entire set */ | 98 | __u32 number; /* 0 Device number in the entire set */ |
| 95 | __u32 major; /* 1 Device major number */ | 99 | __u32 major; /* 1 Device major number */ |
