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 */ |