|
44 | 44 | */
|
45 | 45 |
|
46 | 46 | #define SB_MAGIC "integrt"
|
47 |
| -#define SB_VERSION 1 |
| 47 | +#define SB_VERSION_1 1 |
| 48 | +#define SB_VERSION_2 2 |
48 | 49 | #define SB_SECTORS 8
|
49 | 50 | #define MAX_SECTORS_PER_BLOCK 8
|
50 | 51 |
|
@@ -414,6 +415,14 @@ static void wraparound_section(struct dm_integrity_c *ic, unsigned *sec_ptr)
|
414 | 415 | *sec_ptr -= ic->journal_sections;
|
415 | 416 | }
|
416 | 417 |
|
| 418 | +static void sb_set_version(struct dm_integrity_c *ic) |
| 419 | +{ |
| 420 | + if (ic->meta_dev) |
| 421 | + ic->sb->version = SB_VERSION_2; |
| 422 | + else |
| 423 | + ic->sb->version = SB_VERSION_1; |
| 424 | +} |
| 425 | + |
417 | 426 | static int sync_rw_sb(struct dm_integrity_c *ic, int op, int op_flags)
|
418 | 427 | {
|
419 | 428 | struct dm_io_request io_req;
|
@@ -2432,7 +2441,6 @@ static int initialize_superblock(struct dm_integrity_c *ic, unsigned journal_sec
|
2432 | 2441 |
|
2433 | 2442 | memset(ic->sb, 0, SB_SECTORS << SECTOR_SHIFT);
|
2434 | 2443 | memcpy(ic->sb->magic, SB_MAGIC, 8);
|
2435 |
| - ic->sb->version = SB_VERSION; |
2436 | 2444 | ic->sb->integrity_tag_size = cpu_to_le16(ic->tag_size);
|
2437 | 2445 | ic->sb->log2_sectors_per_block = __ffs(ic->sectors_per_block);
|
2438 | 2446 | if (ic->journal_mac_alg.alg_string)
|
@@ -2489,6 +2497,8 @@ static int initialize_superblock(struct dm_integrity_c *ic, unsigned journal_sec
|
2489 | 2497 |
|
2490 | 2498 | ic->sb->provided_data_sectors = cpu_to_le64(ic->provided_data_sectors);
|
2491 | 2499 |
|
| 2500 | + sb_set_version(ic); |
| 2501 | + |
2492 | 2502 | return 0;
|
2493 | 2503 | }
|
2494 | 2504 |
|
@@ -3193,7 +3203,7 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv)
|
3193 | 3203 | should_write_sb = true;
|
3194 | 3204 | }
|
3195 | 3205 |
|
3196 |
| - if (ic->sb->version != SB_VERSION) { |
| 3206 | + if (!ic->sb->version || ic->sb->version > SB_VERSION_2) { |
3197 | 3207 | r = -EINVAL;
|
3198 | 3208 | ti->error = "Unknown version";
|
3199 | 3209 | goto bad;
|
|
0 commit comments