aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSong Liu <songliubraving@fb.com>2015-08-13 17:31:54 -0400
committerNeilBrown <neilb@suse.com>2015-10-24 02:16:18 -0400
commitc4d4c91b44d8309082127893221a1971a27c50ca (patch)
treed745d1eb415f1dff77c0de54b5a63a4494ba3f76
parent28c1b9fdf4562b52fe104384b16238c39c8a8d40 (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.c14
-rw-r--r--include/uapi/linux/raid/md_p.h4
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
93typedef struct mdp_device_descriptor_s { 97typedef 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 */