History

md: superblock changes for PPL

Include information about PPL location and size into mdp_superblock_1 and copy it to/from rdev. Because PPL is mutually exclusive with bitmap, put it in place of 'bitmap_offset'. Add a new flag MD_FEATURE_PPL for 'feature_map', analogically to MD_FEATURE_BITMAP_OFFSET. Add MD_HAS_PPL to mddev->flags to indicate that PPL is enabled on an array.

Artur Paszkiewicz committed 9 years ago

Commit ea0213e1 parent effe6ee5 files · +45 −6Browse files

Unified · Split

5 files
  1. drivers/md/md.c +19 −0
  2. drivers/md/md.h +8 −0
  3. drivers/md/raid0.c +2 −1
  4. drivers/md/raid1.c +2 −1
  5. include/uapi/linux/raid/md_p.h +14 −4
drivers/md/md.c+19−0
@@ -1507,6 +1507,12 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_ · 1506 unmodified lines
1507 } else if (sb->bblog_offset != 0)1507 } else if (sb->bblog_offset != 0)
1508 rdev->badblocks.shift = 0;1508 rdev->badblocks.shift = 0;
1509 1509
1510 if (le32_to_cpu(sb->feature_map) & MD_FEATURE_PPL) {
1511 rdev->ppl.offset = (__s16)le16_to_cpu(sb->ppl.offset);
1512 rdev->ppl.size = le16_to_cpu(sb->ppl.size);
1513 rdev->ppl.sector = rdev->sb_start + rdev->ppl.offset;
1514 }
1515
1510 if (!refdev) {1516 if (!refdev) {
1511 ret = 1;1517 ret = 1;
1512 } else {1518 } else {
@@ -1619,6 +1625,13 @@ static int super_1_validate(struct mddev *mddev, struct md_rdev *rdev) · 106 unmodified lines
1619 1625
1620 if (le32_to_cpu(sb->feature_map) & MD_FEATURE_JOURNAL)1626 if (le32_to_cpu(sb->feature_map) & MD_FEATURE_JOURNAL)
1621 set_bit(MD_HAS_JOURNAL, &mddev->flags);1627 set_bit(MD_HAS_JOURNAL, &mddev->flags);
1628
1629 if (le32_to_cpu(sb->feature_map) & MD_FEATURE_PPL) {
1630 if (le32_to_cpu(sb->feature_map) &
1631 (MD_FEATURE_BITMAP_OFFSET | MD_FEATURE_JOURNAL))
1632 return -EINVAL;
1633 set_bit(MD_HAS_PPL, &mddev->flags);
1634 }
1622 } else if (mddev->pers == NULL) {1635 } else if (mddev->pers == NULL) {
1623 /* Insist of good event counter while assembling, except for1636 /* Insist of good event counter while assembling, except for
1624 * spares (which don't need an event count) */1637 * spares (which don't need an event count) */
@@ -1832,6 +1845,12 @@ retry: · 207 unmodified lines
1832 if (test_bit(MD_HAS_JOURNAL, &mddev->flags))1845 if (test_bit(MD_HAS_JOURNAL, &mddev->flags))
1833 sb->feature_map |= cpu_to_le32(MD_FEATURE_JOURNAL);1846 sb->feature_map |= cpu_to_le32(MD_FEATURE_JOURNAL);
1834 1847
1848 if (test_bit(MD_HAS_PPL, &mddev->flags)) {
1849 sb->feature_map |= cpu_to_le32(MD_FEATURE_PPL);
1850 sb->ppl.offset = cpu_to_le16(rdev->ppl.offset);
1851 sb->ppl.size = cpu_to_le16(rdev->ppl.size);
1852 }
1853
1835 rdev_for_each(rdev2, mddev) {1854 rdev_for_each(rdev2, mddev) {
1836 i = rdev2->desc_nr;1855 i = rdev2->desc_nr;
1837 if (test_bit(Faulty, &rdev2->flags))1856 if (test_bit(Faulty, &rdev2->flags))
drivers/md/md.h+8−0
@@ -122,6 +122,13 @@ struct md_rdev { · 121 unmodified lines
122 * sysfs entry */122 * sysfs entry */
123 123
124 struct badblocks badblocks;124 struct badblocks badblocks;
125
126 struct {
127 short offset; /* Offset from superblock to start of PPL.
128 * Not used by external metadata. */
129 unsigned int size; /* Size in sectors of the PPL space */
130 sector_t sector; /* First sector of the PPL space */
131 } ppl;
125};132};
126enum flag_bits {133enum flag_bits {
127 Faulty, /* device is known to have a fault */134 Faulty, /* device is known to have a fault */
@@ -226,6 +233,7 @@ enum mddev_flags { · 98 unmodified lines
226 * supported as calls to md_error() will233 * supported as calls to md_error() will
227 * never cause the array to become failed.234 * never cause the array to become failed.
228 */235 */
236 MD_HAS_PPL, /* The raid array has PPL feature set */
229};237};
230 238
231enum mddev_sb_flags {239enum mddev_sb_flags {
drivers/md/raid0.c+2−1
@@ -29,7 +29,8 @@ · 28 unmodified lines
29#define UNSUPPORTED_MDDEV_FLAGS \29#define UNSUPPORTED_MDDEV_FLAGS \
30 ((1L << MD_HAS_JOURNAL) | \30 ((1L << MD_HAS_JOURNAL) | \
31 (1L << MD_JOURNAL_CLEAN) | \31 (1L << MD_JOURNAL_CLEAN) | \
32 (1L << MD_FAILFAST_SUPPORTED))32 (1L << MD_FAILFAST_SUPPORTED) |\
33 (1L << MD_HAS_PPL))
33 34
34static int raid0_congested(struct mddev *mddev, int bits)35static int raid0_congested(struct mddev *mddev, int bits)
35{36{
drivers/md/raid1.c+2−1
@@ -47,7 +47,8 @@ · 46 unmodified lines
47 47
48#define UNSUPPORTED_MDDEV_FLAGS \48#define UNSUPPORTED_MDDEV_FLAGS \
49 ((1L << MD_HAS_JOURNAL) | \49 ((1L << MD_HAS_JOURNAL) | \
50 (1L << MD_JOURNAL_CLEAN))50 (1L << MD_JOURNAL_CLEAN) | \
51 (1L << MD_HAS_PPL))
51 52
52/*53/*
53 * Number of guaranteed r1bios in case of extreme VM load:54 * Number of guaranteed r1bios in case of extreme VM load:
include/uapi/linux/raid/md_p.h+14−4
@@ -242,10 +242,18 @@ struct mdp_superblock_1 { · 241 unmodified lines
242 242
243 __le32 chunksize; /* in 512byte sectors */243 __le32 chunksize; /* in 512byte sectors */
244 __le32 raid_disks;244 __le32 raid_disks;
245 __le32 bitmap_offset; /* sectors after start of superblock that bitmap starts245 union {
246 * NOTE: signed, so bitmap can be before superblock246 __le32 bitmap_offset; /* sectors after start of superblock that bitmap starts
247 * only meaningful of feature_map[0] is set.247 * NOTE: signed, so bitmap can be before superblock
248 */248 * only meaningful of feature_map[0] is set.
249 */
250
251 /* only meaningful when feature_map[MD_FEATURE_PPL] is set */
252 struct {
253 __le16 offset; /* sectors from start of superblock that ppl starts (signed) */
254 __le16 size; /* ppl size in sectors */
255 } ppl;
256 };
249 257
250 /* These are only valid with feature bit '4' */258 /* These are only valid with feature bit '4' */
251 __le32 new_level; /* new level we are reshaping to */259 __le32 new_level; /* new level we are reshaping to */
@@ -318,6 +326,7 @@ struct mdp_superblock_1 { · 66 unmodified lines
318 */326 */
319#define MD_FEATURE_CLUSTERED 256 /* clustered MD */327#define MD_FEATURE_CLUSTERED 256 /* clustered MD */
320#define MD_FEATURE_JOURNAL 512 /* support write cache */328#define MD_FEATURE_JOURNAL 512 /* support write cache */
329#define MD_FEATURE_PPL 1024 /* support PPL */
321#define MD_FEATURE_ALL (MD_FEATURE_BITMAP_OFFSET \330#define MD_FEATURE_ALL (MD_FEATURE_BITMAP_OFFSET \
322 |MD_FEATURE_RECOVERY_OFFSET \331 |MD_FEATURE_RECOVERY_OFFSET \
323 |MD_FEATURE_RESHAPE_ACTIVE \332 |MD_FEATURE_RESHAPE_ACTIVE \
@@ -328,6 +337,7 @@ struct mdp_superblock_1 { · 4 unmodified lines
328 |MD_FEATURE_RECOVERY_BITMAP \337 |MD_FEATURE_RECOVERY_BITMAP \
329 |MD_FEATURE_CLUSTERED \338 |MD_FEATURE_CLUSTERED \
330 |MD_FEATURE_JOURNAL \339 |MD_FEATURE_JOURNAL \
340 |MD_FEATURE_PPL \
331 )341 )
332 342
333struct r5l_payload_header {343struct r5l_payload_header {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t