return sector_count(__le32_to_cpu(mpb->mpb_size));
}
+static struct superswitch super_imsm_volume;
+
/* internal representation of IMSM metadata */
struct intel_super {
union {
printf("%s\n", __FUNCTION__);
}
+#if 0
static void
get_imsm_numerical_version(struct imsm_super *mpb, int *m, int *p)
{
*m = strtol(minor, NULL, 0);
*p = strtol(patch, NULL, 0);
}
+#endif
static int imsm_level_to_layout(int level)
{
struct intel_super *super = st->sb;
struct imsm_super *mpb = super->mpb;
struct imsm_disk *disk;
+ int sect = mpb_sectors(mpb);
__u32 s;
- info->array.major_version = 2000;
- get_imsm_numerical_version(mpb, &info->array.minor_version,
- &info->array.patch_version);
info->array.raid_disks = mpb->num_disks;
info->array.level = LEVEL_CONTAINER;
info->array.layout = 0;
info->disk.number = -1;
info->disk.state = 0;
+ info->data_offset = __le32_to_cpu(get_imsm_disk(super->mpb,
+ super->disks->index)
+ ->total_blocks) - (2 + sect - 1);
+ info->component_size = sect;
+
if (super->disks) {
info->disk.number = super->disks->index;
info->disk.raid_disk = super->disks->index;
struct imsm_dev *dev = get_imsm_dev(mpb, info->container_member);
struct imsm_map *map = &dev->vol.map[0];
- info->array.major_version = 2000;
- get_imsm_numerical_version(mpb, &info->array.minor_version,
- &info->array.patch_version);
info->array.raid_disks = map->num_members;
info->array.level = get_imsm_raid_level(map);
info->array.layout = imsm_level_to_layout(info->array.level);
close(dfd);
}
+ if (st->subarray[0]) {
+ /* FIXME */
+ }
+
*sbp = super;
if (st->ss == NULL) {
st->ss = &super_imsm_container;
if (load_super_imsm_all(st, fd, &st->sb, devname, 1) == 0)
return 0;
#endif
+ if (st->subarray[0])
+ return 1; /* FIXME */
super = alloc_super(0);
if (!super) {
memset(buf, 0, sizeof(buf));
if (write(fd, buf, sizeof(buf)) != sizeof(buf))
return 1;
-
return 0;
}
-static void getinfo_super_n_imsm_container(struct supertype *st, struct mdinfo *info)
-{
- /* just need offset and size...
- * of the metadata
- */
- struct intel_super *super = st->sb;
- struct imsm_super *mpb = super->mpb;
- struct imsm_disk *disk = get_imsm_disk(mpb, info->disk.number);
-
- info->data_offset = __le32_to_cpu(disk->total_blocks) -
- (MPB_SECTOR_CNT + IMSM_RESERVED_SECTORS);
- info->component_size = MPB_SECTOR_CNT + IMSM_RESERVED_SECTORS;
-}
-
-static void getinfo_super_n_imsm_volume(struct supertype *st, struct mdinfo *info)
-{
- /* Find the particular details for info->disk.raid_disk.
- * This includes data_offset, component_size,
- */
- struct intel_super *super = st->sb;
- struct imsm_super *mpb = super->mpb;
- struct imsm_dev *dev = get_imsm_dev(mpb, super->creating_dev);
- struct imsm_map *map = &dev->vol.map[0];
-
- info->data_offset = __le32_to_cpu(map->pba_of_lba0);
- info->component_size = __le32_to_cpu(map->blocks_per_member);
-}
-
static int validate_geometry_imsm(struct supertype *st, int level, int layout,
int raiddisks, int chunk, unsigned long long size,
char *dev, unsigned long long *freesize)
this->next = rest;
rest = this;
- this->array.major_version = 2000;
- get_imsm_numerical_version(mpb, &this->array.minor_version,
- &this->array.patch_version);
this->array.level = get_imsm_raid_level(map);
this->array.raid_disks = map->num_members;
this->array.layout = imsm_level_to_layout(this->array.level);
.store_super = store_zero_imsm,
.free_super = free_super_imsm,
.match_metadata_desc = match_metadata_desc_imsm,
- .getinfo_super_n = getinfo_super_n_imsm_container,
.validate_geometry = validate_geometry_imsm,
- .swapuuid = 0,
.external = 1,
/* for mdmon */
.add_to_super = add_to_super_imsm,
.write_init_super = write_init_super_imsm,
.getinfo_super = getinfo_super_imsm,
- .getinfo_super_n = getinfo_super_n_imsm_container,
.load_super = load_super_imsm,
#ifndef MDASSEMBLE
.container_content = container_content_imsm,
- .swapuuid = 0,
.external = 1,
};
-struct superswitch super_imsm_volume = {
+static struct superswitch super_imsm_volume = {
.update_super = update_super_imsm,
.init_super = init_super_imsm_volume,
.add_to_super = add_to_super_imsm_volume,
.getinfo_super = getinfo_super_imsm_volume,
- .getinfo_super_n = getinfo_super_n_imsm_volume,
.write_init_super = write_init_super_imsm,
.load_super = load_super_imsm,
.validate_geometry = validate_geometry_imsm_volume,
- .swapuuid = 0,
.external = 2,
};