Date: Wed, 22 Dec 2010 18:42:23 +0000 (UTC) From: Alexander Motin <mav@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r216670 - projects/graid/head/sys/geom/raid Message-ID: <201012221842.oBMIgN5a031344@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: mav Date: Wed Dec 22 18:42:23 2010 New Revision: 216670 URL: http://svn.freebsd.org/changeset/base/216670 Log: Some MD structures formatting and size calculation. Modified: projects/graid/head/sys/geom/raid/md_intel.c Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Wed Dec 22 17:59:38 2010 (r216669) +++ projects/graid/head/sys/geom/raid/md_intel.c Wed Dec 22 18:42:23 2010 (r216670) @@ -42,41 +42,6 @@ __FBSDID("$FreeBSD$"); static MALLOC_DEFINE(M_MD_INTEL, "md_intel_data", "GEOM_RAID Intel metadata"); -struct intel_raid_conf { - uint8_t intel_id[24]; -#define INTEL_MAGIC "Intel Raid ISM Cfg Sig. " - - uint8_t version[6]; -#define INTEL_VERSION_1100 "1.1.00" -#define INTEL_VERSION_1201 "1.2.01" -#define INTEL_VERSION_1202 "1.2.02" - - uint8_t dummy_0[2]; - uint32_t checksum; - uint32_t config_size; - uint32_t config_id; - uint32_t generation; - uint32_t dummy_1[2]; - uint8_t total_disks; - uint8_t total_volumes; - uint8_t dummy_2[2]; - uint32_t filler_0[39]; - struct { -#define INTEL_SERIAL_LEN 16 - uint8_t serial[INTEL_SERIAL_LEN]; - uint32_t sectors; - uint32_t id; - uint32_t flags; -#define INTEL_F_SPARE 0x01 -#define INTEL_F_ASSIGNED 0x02 -#define INTEL_F_DOWN 0x04 -#define INTEL_F_ONLINE 0x08 - - uint32_t filler[5]; - } __packed disk[1]; - uint32_t filler_1[62]; -} __packed; - struct intel_raid_map { uint32_t offset; uint32_t disk_sectors; @@ -98,7 +63,7 @@ struct intel_raid_map { uint8_t failed_disk_num; uint8_t ddf; uint32_t filler_2[7]; - uint32_t disk_idx[1]; + uint32_t disk_idx[1]; /* total_disks entries. */ #define INTEL_DI_IDX 0x00ffffff #define INTEL_DI_RBLD 0x01000000 } __packed; @@ -132,9 +97,53 @@ struct intel_raid_vol { uint16_t verify_errors; uint16_t bad_blocks; uint32_t filler_1[4]; - struct intel_raid_map map[1]; + struct intel_raid_map map[1]; /* 2 entries if migr_state != 0. */ +} __packed; + +struct intel_raid_disk { +#define INTEL_SERIAL_LEN 16 + uint8_t serial[INTEL_SERIAL_LEN]; + uint32_t sectors; + uint32_t id; + uint32_t flags; +#define INTEL_F_SPARE 0x01 +#define INTEL_F_ASSIGNED 0x02 +#define INTEL_F_DOWN 0x04 +#define INTEL_F_ONLINE 0x08 + + uint32_t filler[5]; } __packed; +struct intel_raid_conf { + uint8_t intel_id[24]; +#define INTEL_MAGIC "Intel Raid ISM Cfg Sig. " + + uint8_t version[6]; +#define INTEL_VERSION_1100 "1.1.00" +#define INTEL_VERSION_1201 "1.2.01" +#define INTEL_VERSION_1202 "1.2.02" + + uint8_t dummy_0[2]; + uint32_t checksum; + uint32_t config_size; + uint32_t config_id; + uint32_t generation; + uint32_t dummy_1[2]; + uint8_t total_disks; + uint8_t total_volumes; + uint8_t dummy_2[2]; + uint32_t filler_0[39]; + struct intel_raid_disk disk[1]; /* total_disks entries. */ + /* Here goes total_volumes of struct intel_raid_vol. */ +} __packed; + +#define INTEL_MAX_MD_SIZE(ndisks) \ + (sizeof(struct intel_raid_conf) + \ + sizeof(struct intel_raid_disk) * (ndisks - 1) + \ + sizeof(struct intel_raid_vol) * 2 + \ + sizeof(struct intel_raid_map) * 2 + \ + sizeof(uint32_t) * (ndisks - 1) * 4) + struct g_raid_md_intel_perdisk { struct intel_raid_conf *pd_meta; int pd_disk_pos;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201012221842.oBMIgN5a031344>