Lines Matching refs:sb
1153 static unsigned int calc_sb_csum(mdp_super_t *sb) in calc_sb_csum() argument
1156 u32 *sb32 = (u32*)sb; in calc_sb_csum()
1160 disk_csum = sb->sb_csum; in calc_sb_csum()
1161 sb->sb_csum = 0; in calc_sb_csum()
1176 sb->sb_csum = md_csum_fold(disk_csum); in calc_sb_csum()
1178 sb->sb_csum = disk_csum; in calc_sb_csum()
1253 mdp_super_t *sb; in super_90_load() local
1271 sb = page_address(rdev->sb_page); in super_90_load()
1273 if (sb->md_magic != MD_SB_MAGIC) { in super_90_load()
1279 if (sb->major_version != 0 || in super_90_load()
1280 sb->minor_version < 90 || in super_90_load()
1281 sb->minor_version > 91) { in super_90_load()
1283 sb->major_version, sb->minor_version, rdev->bdev); in super_90_load()
1287 if (sb->raid_disks <= 0) in super_90_load()
1290 if (md_csum_fold(calc_sb_csum(sb)) != md_csum_fold(sb->sb_csum)) { in super_90_load()
1295 rdev->preferred_minor = sb->md_minor; in super_90_load()
1301 rdev->desc_nr = sb->this_disk.number; in super_90_load()
1305 sb->disks[rdev->desc_nr].state & ((1<<MD_DISK_SYNC) | (1 << MD_DISK_ACTIVE))) in super_90_load()
1316 if (!md_uuid_equal(refsb, sb)) { in super_90_load()
1321 if (!md_sb_equal(refsb, sb)) { in super_90_load()
1326 ev1 = md_event(sb); in super_90_load()
1339 if ((u64)rdev->sectors >= (2ULL << 32) && sb->level >= 1) in super_90_load()
1342 if (rdev->sectors < ((sector_t)sb->size) * 2 && sb->level >= 1) in super_90_load()
1369 mdp_super_t *sb = page_address(rdev->sb_page); in super_90_validate() local
1370 __u64 ev1 = md_event(sb); in super_90_validate()
1380 mddev->minor_version = sb->minor_version; in super_90_validate()
1381 mddev->patch_version = sb->patch_version; in super_90_validate()
1383 mddev->chunk_sectors = sb->chunk_size >> 9; in super_90_validate()
1384 mddev->ctime = sb->ctime; in super_90_validate()
1385 mddev->utime = sb->utime; in super_90_validate()
1386 mddev->level = sb->level; in super_90_validate()
1388 mddev->layout = sb->layout; in super_90_validate()
1389 mddev->raid_disks = sb->raid_disks; in super_90_validate()
1390 mddev->dev_sectors = ((sector_t)sb->size) * 2; in super_90_validate()
1400 mddev->reshape_position = sb->reshape_position; in super_90_validate()
1401 mddev->delta_disks = sb->delta_disks; in super_90_validate()
1402 mddev->new_level = sb->new_level; in super_90_validate()
1403 mddev->new_layout = sb->new_layout; in super_90_validate()
1404 mddev->new_chunk_sectors = sb->new_chunk >> 9; in super_90_validate()
1417 if (sb->state & (1<<MD_SB_CLEAN)) in super_90_validate()
1420 if (sb->events_hi == sb->cp_events_hi && in super_90_validate()
1421 sb->events_lo == sb->cp_events_lo) { in super_90_validate()
1422 mddev->resync_offset = sb->resync_offset; in super_90_validate()
1427 memcpy(mddev->uuid+0, &sb->set_uuid0, 4); in super_90_validate()
1428 memcpy(mddev->uuid+4, &sb->set_uuid1, 4); in super_90_validate()
1429 memcpy(mddev->uuid+8, &sb->set_uuid2, 4); in super_90_validate()
1430 memcpy(mddev->uuid+12,&sb->set_uuid3, 4); in super_90_validate()
1434 if (sb->state & (1<<MD_SB_BITMAP_PRESENT) && in super_90_validate()
1446 if (sb->disks[rdev->desc_nr].state & ( in super_90_validate()
1464 desc = sb->disks + rdev->desc_nr; in super_90_validate()
1494 mdp_super_t *sb; in super_90_sync() local
1513 sb = page_address(rdev->sb_page); in super_90_sync()
1515 memset(sb, 0, sizeof(*sb)); in super_90_sync()
1517 sb->md_magic = MD_SB_MAGIC; in super_90_sync()
1518 sb->major_version = mddev->major_version; in super_90_sync()
1519 sb->patch_version = mddev->patch_version; in super_90_sync()
1520 sb->gvalid_words = 0; /* ignored */ in super_90_sync()
1521 memcpy(&sb->set_uuid0, mddev->uuid+0, 4); in super_90_sync()
1522 memcpy(&sb->set_uuid1, mddev->uuid+4, 4); in super_90_sync()
1523 memcpy(&sb->set_uuid2, mddev->uuid+8, 4); in super_90_sync()
1524 memcpy(&sb->set_uuid3, mddev->uuid+12,4); in super_90_sync()
1526 sb->ctime = clamp_t(time64_t, mddev->ctime, 0, U32_MAX); in super_90_sync()
1527 sb->level = mddev->level; in super_90_sync()
1528 sb->size = mddev->dev_sectors / 2; in super_90_sync()
1529 sb->raid_disks = mddev->raid_disks; in super_90_sync()
1530 sb->md_minor = mddev->md_minor; in super_90_sync()
1531 sb->not_persistent = 0; in super_90_sync()
1532 sb->utime = clamp_t(time64_t, mddev->utime, 0, U32_MAX); in super_90_sync()
1533 sb->state = 0; in super_90_sync()
1534 sb->events_hi = (mddev->events>>32); in super_90_sync()
1535 sb->events_lo = (u32)mddev->events; in super_90_sync()
1538 sb->minor_version = 90; in super_90_sync()
1540 sb->minor_version = 91; in super_90_sync()
1541 sb->reshape_position = mddev->reshape_position; in super_90_sync()
1542 sb->new_level = mddev->new_level; in super_90_sync()
1543 sb->delta_disks = mddev->delta_disks; in super_90_sync()
1544 sb->new_layout = mddev->new_layout; in super_90_sync()
1545 sb->new_chunk = mddev->new_chunk_sectors << 9; in super_90_sync()
1547 mddev->minor_version = sb->minor_version; in super_90_sync()
1550 sb->resync_offset = mddev->resync_offset; in super_90_sync()
1551 sb->cp_events_hi = (mddev->events>>32); in super_90_sync()
1552 sb->cp_events_lo = (u32)mddev->events; in super_90_sync()
1554 sb->state = (1<< MD_SB_CLEAN); in super_90_sync()
1556 sb->resync_offset = 0; in super_90_sync()
1558 sb->layout = mddev->layout; in super_90_sync()
1559 sb->chunk_size = mddev->chunk_sectors << 9; in super_90_sync()
1562 sb->state |= (1<<MD_SB_BITMAP_PRESENT); in super_90_sync()
1564 sb->disks[0].state = (1<<MD_DISK_REMOVED); in super_90_sync()
1571 sb->minor_version >= 91) in super_90_sync()
1585 d = &sb->disks[rdev2->desc_nr]; in super_90_sync()
1614 mdp_disk_t *d = &sb->disks[i]; in super_90_sync()
1623 sb->nr_disks = nr_disks; in super_90_sync()
1624 sb->active_disks = active; in super_90_sync()
1625 sb->working_disks = working; in super_90_sync()
1626 sb->failed_disks = failed; in super_90_sync()
1627 sb->spare_disks = spare; in super_90_sync()
1629 sb->this_disk = sb->disks[rdev->desc_nr]; in super_90_sync()
1630 sb->sb_csum = calc_sb_csum(sb); in super_90_sync()
1669 static __le32 calc_sb_1_csum(struct mdp_superblock_1 *sb) in calc_sb_1_csum() argument
1674 int size = 256 + le32_to_cpu(sb->max_dev)*2; in calc_sb_1_csum()
1675 __le32 *isuper = (__le32*)sb; in calc_sb_1_csum()
1677 disk_csum = sb->sb_csum; in calc_sb_1_csum()
1678 sb->sb_csum = 0; in calc_sb_1_csum()
1687 sb->sb_csum = disk_csum; in calc_sb_1_csum()
1693 struct mdp_superblock_1 *sb; in super_1_load() local
1730 sb = page_address(rdev->sb_page); in super_1_load()
1732 if (sb->magic != cpu_to_le32(MD_SB_MAGIC) || in super_1_load()
1733 sb->major_version != cpu_to_le32(1) || in super_1_load()
1734 le32_to_cpu(sb->max_dev) > (4096-256)/2 || in super_1_load()
1735 le64_to_cpu(sb->super_offset) != rdev->sb_start || in super_1_load()
1736 (le32_to_cpu(sb->feature_map) & ~MD_FEATURE_ALL) != 0) in super_1_load()
1739 if (calc_sb_1_csum(sb) != sb->sb_csum) { in super_1_load()
1744 if (le64_to_cpu(sb->data_size) < 10) { in super_1_load()
1749 if (sb->pad0 || in super_1_load()
1750 sb->pad3[0] || in super_1_load()
1751 memcmp(sb->pad3, sb->pad3+1, sizeof(sb->pad3) - sizeof(sb->pad3[1]))) in super_1_load()
1756 rdev->data_offset = le64_to_cpu(sb->data_offset); in super_1_load()
1758 if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_RESHAPE_ACTIVE) && in super_1_load()
1759 (le32_to_cpu(sb->feature_map) & MD_FEATURE_NEW_OFFSET)) in super_1_load()
1760 rdev->new_data_offset += (s32)le32_to_cpu(sb->new_offset); in super_1_load()
1761 atomic_set(&rdev->corrected_errors, le32_to_cpu(sb->cnt_corrected_read)); in super_1_load()
1763 rdev->sb_size = le32_to_cpu(sb->max_dev) * 2 + 256; in super_1_load()
1775 rdev->desc_nr = le32_to_cpu(sb->dev_number); in super_1_load()
1782 if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_BAD_BLOCKS) && in super_1_load()
1791 int sectors = le16_to_cpu(sb->bblog_size); in super_1_load()
1794 offset = le32_to_cpu(sb->bblog_offset); in super_1_load()
1802 rdev->badblocks.shift = sb->bblog_shift; in super_1_load()
1807 sector <<= sb->bblog_shift; in super_1_load()
1808 count <<= sb->bblog_shift; in super_1_load()
1814 } else if (sb->bblog_offset != 0) in super_1_load()
1817 if ((le32_to_cpu(sb->feature_map) & in super_1_load()
1819 rdev->ppl.offset = (__s16)le16_to_cpu(sb->ppl.offset); in super_1_load()
1820 rdev->ppl.size = le16_to_cpu(sb->ppl.size); in super_1_load()
1824 if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_RAID0_LAYOUT) && in super_1_load()
1825 sb->level != 0) in super_1_load()
1829 if (rdev->desc_nr >= 0 && rdev->desc_nr < le32_to_cpu(sb->max_dev) && in super_1_load()
1830 (le16_to_cpu(sb->dev_roles[rdev->desc_nr]) < MD_DISK_ROLE_MAX || in super_1_load()
1831 le16_to_cpu(sb->dev_roles[rdev->desc_nr]) == MD_DISK_ROLE_JOURNAL)) in super_1_load()
1843 if (memcmp(sb->set_uuid, refsb->set_uuid, 16) != 0 || in super_1_load()
1844 sb->level != refsb->level || in super_1_load()
1845 sb->layout != refsb->layout || in super_1_load()
1846 sb->chunksize != refsb->chunksize) { in super_1_load()
1852 ev1 = le64_to_cpu(sb->events); in super_1_load()
1864 if (sectors < le64_to_cpu(sb->data_size)) in super_1_load()
1866 rdev->sectors = le64_to_cpu(sb->data_size); in super_1_load()
1872 struct mdp_superblock_1 *sb = page_address(rdev->sb_page); in super_1_validate() local
1873 __u64 ev1 = le64_to_cpu(sb->events); in super_1_validate()
1886 mddev->chunk_sectors = le32_to_cpu(sb->chunksize); in super_1_validate()
1887 mddev->ctime = le64_to_cpu(sb->ctime); in super_1_validate()
1888 mddev->utime = le64_to_cpu(sb->utime); in super_1_validate()
1889 mddev->level = le32_to_cpu(sb->level); in super_1_validate()
1891 mddev->layout = le32_to_cpu(sb->layout); in super_1_validate()
1892 mddev->raid_disks = le32_to_cpu(sb->raid_disks); in super_1_validate()
1893 mddev->dev_sectors = le64_to_cpu(sb->size); in super_1_validate()
1904 mddev->resync_offset = le64_to_cpu(sb->resync_offset); in super_1_validate()
1905 memcpy(mddev->uuid, sb->set_uuid, 16); in super_1_validate()
1909 if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_BITMAP_OFFSET) && in super_1_validate()
1912 (__s32)le32_to_cpu(sb->bitmap_offset); in super_1_validate()
1928 if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_RESHAPE_ACTIVE)) { in super_1_validate()
1929 mddev->reshape_position = le64_to_cpu(sb->reshape_position); in super_1_validate()
1930 mddev->delta_disks = le32_to_cpu(sb->delta_disks); in super_1_validate()
1931 mddev->new_level = le32_to_cpu(sb->new_level); in super_1_validate()
1932 mddev->new_layout = le32_to_cpu(sb->new_layout); in super_1_validate()
1933 mddev->new_chunk_sectors = le32_to_cpu(sb->new_chunk); in super_1_validate()
1936 (le32_to_cpu(sb->feature_map) in super_1_validate()
1948 !(le32_to_cpu(sb->feature_map) & MD_FEATURE_RAID0_LAYOUT)) in super_1_validate()
1951 if (le32_to_cpu(sb->feature_map) & MD_FEATURE_JOURNAL) in super_1_validate()
1954 if (le32_to_cpu(sb->feature_map) & in super_1_validate()
1956 if (le32_to_cpu(sb->feature_map) & in super_1_validate()
1959 if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_PPL) && in super_1_validate()
1960 (le32_to_cpu(sb->feature_map) & in super_1_validate()
1972 rdev->desc_nr < le32_to_cpu(sb->max_dev) && in super_1_validate()
1973 (le16_to_cpu(sb->dev_roles[rdev->desc_nr]) < MD_DISK_ROLE_MAX || in super_1_validate()
1974 le16_to_cpu(sb->dev_roles[rdev->desc_nr]) == MD_DISK_ROLE_JOURNAL)) in super_1_validate()
1992 rdev->desc_nr >= le32_to_cpu(sb->max_dev)) { in super_1_validate()
2025 role = le16_to_cpu(sb->dev_roles[rdev->desc_nr]); in super_1_validate()
2034 if (!(le32_to_cpu(sb->feature_map) & MD_FEATURE_JOURNAL)) { in super_1_validate()
2040 rdev->journal_tail = le64_to_cpu(sb->journal_tail); in super_1_validate()
2045 if ((le32_to_cpu(sb->feature_map) & in super_1_validate()
2047 rdev->recovery_offset = le64_to_cpu(sb->recovery_offset); in super_1_validate()
2048 if (!(le32_to_cpu(sb->feature_map) & in super_1_validate()
2063 if (sb->devflags & WriteMostly1) in super_1_validate()
2065 if (sb->devflags & FailFast1) in super_1_validate()
2067 if (le32_to_cpu(sb->feature_map) & MD_FEATURE_REPLACEMENT) in super_1_validate()
2075 struct mdp_superblock_1 *sb; in super_1_sync() local
2080 sb = page_address(rdev->sb_page); in super_1_sync()
2082 sb->feature_map = 0; in super_1_sync()
2083 sb->pad0 = 0; in super_1_sync()
2084 sb->recovery_offset = cpu_to_le64(0); in super_1_sync()
2085 memset(sb->pad3, 0, sizeof(sb->pad3)); in super_1_sync()
2087 sb->utime = cpu_to_le64((__u64)mddev->utime); in super_1_sync()
2088 sb->events = cpu_to_le64(mddev->events); in super_1_sync()
2090 sb->resync_offset = cpu_to_le64(mddev->resync_offset); in super_1_sync()
2092 sb->resync_offset = cpu_to_le64(MaxSector); in super_1_sync()
2094 sb->resync_offset = cpu_to_le64(0); in super_1_sync()
2096 sb->cnt_corrected_read = cpu_to_le32(atomic_read(&rdev->corrected_errors)); in super_1_sync()
2098 sb->raid_disks = cpu_to_le32(mddev->raid_disks); in super_1_sync()
2099 sb->size = cpu_to_le64(mddev->dev_sectors); in super_1_sync()
2100 sb->chunksize = cpu_to_le32(mddev->chunk_sectors); in super_1_sync()
2101 sb->level = cpu_to_le32(mddev->level); in super_1_sync()
2102 sb->layout = cpu_to_le32(mddev->layout); in super_1_sync()
2104 sb->devflags |= FailFast1; in super_1_sync()
2106 sb->devflags &= ~FailFast1; in super_1_sync()
2109 sb->devflags |= WriteMostly1; in super_1_sync()
2111 sb->devflags &= ~WriteMostly1; in super_1_sync()
2112 sb->data_offset = cpu_to_le64(rdev->data_offset); in super_1_sync()
2113 sb->data_size = cpu_to_le64(rdev->sectors); in super_1_sync()
2116 sb->bitmap_offset = cpu_to_le32((__u32)mddev->bitmap_info.offset); in super_1_sync()
2117 sb->feature_map = cpu_to_le32(MD_FEATURE_BITMAP_OFFSET); in super_1_sync()
2122 sb->feature_map |= in super_1_sync()
2124 sb->recovery_offset = in super_1_sync()
2127 sb->feature_map |= in super_1_sync()
2132 sb->journal_tail = cpu_to_le64(rdev->journal_tail); in super_1_sync()
2134 sb->feature_map |= in super_1_sync()
2138 sb->feature_map |= cpu_to_le32(MD_FEATURE_RESHAPE_ACTIVE); in super_1_sync()
2139 sb->reshape_position = cpu_to_le64(mddev->reshape_position); in super_1_sync()
2140 sb->new_layout = cpu_to_le32(mddev->new_layout); in super_1_sync()
2141 sb->delta_disks = cpu_to_le32(mddev->delta_disks); in super_1_sync()
2142 sb->new_level = cpu_to_le32(mddev->new_level); in super_1_sync()
2143 sb->new_chunk = cpu_to_le32(mddev->new_chunk_sectors); in super_1_sync()
2146 sb->feature_map in super_1_sync()
2149 sb->feature_map in super_1_sync()
2151 sb->new_offset = cpu_to_le32((__u32)(rdev->new_data_offset in super_1_sync()
2157 sb->feature_map |= cpu_to_le32(MD_FEATURE_CLUSTERED); in super_1_sync()
2161 else if (sb->bblog_offset == 0) in super_1_sync()
2168 sb->feature_map |= cpu_to_le32(MD_FEATURE_BAD_BLOCKS); in super_1_sync()
2188 (int)le32_to_cpu(sb->bblog_offset)); in super_1_sync()
2189 bb->size = le16_to_cpu(sb->bblog_size); in super_1_sync()
2198 if (max_dev > le32_to_cpu(sb->max_dev)) { in super_1_sync()
2200 sb->max_dev = cpu_to_le32(max_dev); in super_1_sync()
2206 max_dev = le32_to_cpu(sb->max_dev); in super_1_sync()
2209 sb->dev_roles[i] = cpu_to_le16(MD_DISK_ROLE_SPARE); in super_1_sync()
2212 sb->feature_map |= cpu_to_le32(MD_FEATURE_JOURNAL); in super_1_sync()
2216 sb->feature_map |= in super_1_sync()
2219 sb->feature_map |= cpu_to_le32(MD_FEATURE_PPL); in super_1_sync()
2220 sb->ppl.offset = cpu_to_le16(rdev->ppl.offset); in super_1_sync()
2221 sb->ppl.size = cpu_to_le16(rdev->ppl.size); in super_1_sync()
2227 sb->dev_roles[i] = cpu_to_le16(MD_DISK_ROLE_FAULTY); in super_1_sync()
2229 sb->dev_roles[i] = cpu_to_le16(rdev2->raid_disk); in super_1_sync()
2231 sb->dev_roles[i] = cpu_to_le16(MD_DISK_ROLE_JOURNAL); in super_1_sync()
2233 sb->dev_roles[i] = cpu_to_le16(rdev2->raid_disk); in super_1_sync()
2235 sb->dev_roles[i] = cpu_to_le16(MD_DISK_ROLE_SPARE); in super_1_sync()
2238 sb->sb_csum = calc_sb_1_csum(sb); in super_1_sync()
2262 struct mdp_superblock_1 *sb; in super_1_rdev_size_change() local
2296 sb = page_address(rdev->sb_page); in super_1_rdev_size_change()
2297 sb->data_size = cpu_to_le64(num_sectors); in super_1_rdev_size_change()
2298 sb->super_offset = cpu_to_le64(rdev->sb_start); in super_1_rdev_size_change()
2299 sb->sb_csum = calc_sb_1_csum(sb); in super_1_rdev_size_change()
2631 struct mdp_superblock_1 *sb; in does_sb_need_changing() local
2645 sb = page_address(rdev->sb_page); in does_sb_need_changing()
2648 role = le16_to_cpu(sb->dev_roles[rdev->desc_nr]); in does_sb_need_changing()
2659 if ((mddev->dev_sectors != le64_to_cpu(sb->size)) || in does_sb_need_changing()
2660 (mddev->reshape_position != le64_to_cpu(sb->reshape_position)) || in does_sb_need_changing()
2661 (mddev->layout != le32_to_cpu(sb->layout)) || in does_sb_need_changing()
2662 (mddev->raid_disks != le32_to_cpu(sb->raid_disks)) || in does_sb_need_changing()
2663 (mddev->chunk_sectors != le32_to_cpu(sb->chunksize))) in does_sb_need_changing()
10075 struct mdp_superblock_1 *sb = page_address(rdev->sb_page); in check_sb_changes() local
10083 if (mddev->dev_sectors != le64_to_cpu(sb->size)) { in check_sb_changes()
10084 ret = mddev->pers->resize(mddev, le64_to_cpu(sb->size)); in check_sb_changes()
10100 role = le16_to_cpu(sb->dev_roles[rdev2->desc_nr]); in check_sb_changes()
10118 !(le32_to_cpu(sb->feature_map) & in check_sb_changes()
10126 if ((le32_to_cpu(sb->feature_map) in check_sb_changes()
10152 if (mddev->raid_disks != le32_to_cpu(sb->raid_disks)) { in check_sb_changes()
10153 ret = update_raid_disks(mddev, le32_to_cpu(sb->raid_disks)); in check_sb_changes()
10163 (le32_to_cpu(sb->feature_map) & MD_FEATURE_RESHAPE_ACTIVE)) { in check_sb_changes()
10168 mddev->reshape_position = le64_to_cpu(sb->reshape_position); in check_sb_changes()
10175 !(le32_to_cpu(sb->feature_map) & MD_FEATURE_RESHAPE_ACTIVE)) { in check_sb_changes()
10183 mddev->events = le64_to_cpu(sb->events); in check_sb_changes()
10190 struct mdp_superblock_1 *sb; in read_rdev() local
10213 sb = page_address(rdev->sb_page); in read_rdev()
10218 if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_RECOVERY_OFFSET)) in read_rdev()
10219 rdev->recovery_offset = le64_to_cpu(sb->recovery_offset); in read_rdev()