Lines Matching defs:meta

191 g_raid_md_promise_print(struct promise_raid_conf *meta)
199 printf("promise_id <%.24s>\n", meta->promise_id);
201 meta->disk.flags, meta->disk.number, meta->disk.channel,
202 meta->disk.device, meta->disk.id);
203 printf("disk_offset %u\n", meta->disk_offset);
204 printf("disk_sectors %u\n", meta->disk_sectors);
205 printf("disk_rebuild %u\n", meta->disk_rebuild);
206 printf("generation %u\n", meta->generation);
207 printf("status 0x%02x\n", meta->status);
208 printf("type %u\n", meta->type);
209 printf("total_disks %u\n", meta->total_disks);
210 printf("stripe_shift %u\n", meta->stripe_shift);
211 printf("array_width %u\n", meta->array_width);
212 printf("array_number %u\n", meta->array_number);
213 printf("total_sectors %u\n", meta->total_sectors);
214 printf("cylinders %u\n", meta->cylinders);
215 printf("heads %u\n", meta->heads);
216 printf("sectors %u\n", meta->sectors);
217 printf("volume_id 0x%016jx\n", meta->volume_id);
221 meta->disks[i].flags, meta->disks[i].number,
222 meta->disks[i].channel, meta->disks[i].device,
223 meta->disks[i].id);
225 printf("name <%.32s>\n", meta->name);
226 printf("magic_3 0x%08x\n", meta->magic_3);
227 printf("rebuild_lba64 %ju\n", meta->rebuild_lba64);
228 printf("magic_4 0x%08x\n", meta->magic_4);
229 printf("magic_5 0x%08x\n", meta->magic_5);
230 printf("total_sectors_high 0x%08x\n", meta->total_sectors_high);
231 printf("sector_size %u\n", meta->sector_size);
232 printf("backup_time %d\n", meta->backup_time);
233 printf("disk_offset_high 0x%08x\n", meta->disk_offset_high);
234 printf("disk_sectors_high 0x%08x\n", meta->disk_sectors_high);
235 printf("disk_rebuild_high 0x%08x\n", meta->disk_rebuild_high);
240 promise_meta_copy(struct promise_raid_conf *meta)
245 memcpy(nmeta, meta, sizeof(*nmeta));
250 promise_meta_find_disk(struct promise_raid_conf *meta, uint64_t id)
254 for (pos = 0; pos < meta->total_disks; pos++) {
255 if (meta->disks[pos].id == id)
312 promise_meta_get_name(struct promise_raid_conf *meta, char *buf)
316 strncpy(buf, meta->name, 32);
326 promise_meta_put_name(struct promise_raid_conf *meta, char *buf)
329 memset(meta->name, 0x20, 32);
330 memcpy(meta->name, buf, MIN(strlen(buf), 32));
337 struct promise_raid_conf *meta;
354 meta = (struct promise_raid_conf *)buf;
357 if (strncmp(meta->promise_id, PROMISE_MAGIC, strlen(PROMISE_MAGIC)) &&
358 strncmp(meta->promise_id, FREEBSD_MAGIC, strlen(FREEBSD_MAGIC))) {
365 meta = malloc(sizeof(*meta), M_MD_PROMISE, M_WAITOK);
366 memcpy(meta, buf, MIN(sizeof(*meta), pp->sectorsize * 4));
370 for (checksum = 0, ptr = (uint32_t *)meta, i = 0; i < 511; i++)
372 if (checksum != meta->checksum) {
374 free(meta, M_MD_PROMISE);
378 if ((meta->integrity & PROMISE_I_VALID) == 0) {
380 free(meta, M_MD_PROMISE);
384 if (meta->total_disks > PROMISE_MAX_DISKS) {
386 pp->name, meta->total_disks);
387 free(meta, M_MD_PROMISE);
392 if (meta->disk_offset_high == 0x8b8c8d8e &&
393 meta->disk_sectors_high == 0x8788898a &&
394 meta->disk_rebuild_high == 0x83848586) {
395 meta->disk_offset_high = 0;
396 meta->disk_sectors_high = 0;
397 if (meta->disk_rebuild == UINT32_MAX)
398 meta->disk_rebuild_high = UINT32_MAX;
400 meta->disk_rebuild_high = 0;
401 if (meta->total_sectors_high == 0x15161718) {
402 meta->total_sectors_high = 0;
403 meta->backup_time = 0;
404 if (meta->rebuild_lba64 == 0x2122232425262728)
405 meta->rebuild_lba64 = UINT64_MAX;
408 if (meta->sector_size < 1 || meta->sector_size > 8)
409 meta->sector_size = 1;
412 *metaarr = meta;
426 struct promise_raid_conf *meta;
437 meta = NULL;
439 meta = metaarr[subdisk];
444 meta = (struct promise_raid_conf *)buf;
445 memcpy(&meta->promise_id[0], PROMISE_MAGIC,
447 meta->dummy_0 = 0x00020000;
448 meta->integrity = PROMISE_I_VALID;
449 meta->disk.flags = PROMISE_F_ONLINE | PROMISE_F_VALID;
450 meta->disk.number = 0xff;
451 arc4rand(&meta->disk.id, sizeof(meta->disk.id), 0);
452 meta->disk_offset_high = off >> 32;
453 meta->disk_offset = (uint32_t)off;
454 meta->disk_sectors_high = size >> 32;
455 meta->disk_sectors = (uint32_t)size;
456 meta->disk_rebuild_high = UINT32_MAX;
457 meta->disk_rebuild = UINT32_MAX;
460 if (meta != NULL) {
462 meta->checksum = 0;
463 for (checksum = 0, ptr = (uint32_t *)meta, i = 0; i < 511; i++)
465 meta->checksum = checksum;
466 memcpy(buf, meta, MIN(pp->sectorsize * 4, sizeof(*meta)));
509 struct promise_raid_conf *meta;
513 meta = malloc(sizeof(*meta), M_MD_PROMISE, M_WAITOK | M_ZERO);
514 memcpy(&meta->promise_id[0], PROMISE_MAGIC, sizeof(PROMISE_MAGIC) - 1);
515 meta->dummy_0 = 0x00020000;
516 meta->integrity = PROMISE_I_VALID;
517 meta->disk.flags = PROMISE_F_SPARE | PROMISE_F_ONLINE | PROMISE_F_VALID;
518 meta->disk.number = 0xff;
519 arc4rand(&meta->disk.id, sizeof(meta->disk.id), 0);
521 meta->disk_sectors_high = tmp >> 32;
522 meta->disk_sectors = (uint32_t)tmp;
523 meta->disk_rebuild_high = UINT32_MAX;
524 meta->disk_rebuild = UINT32_MAX;
525 error = promise_meta_write(cp, &meta, 1);
526 free(meta, M_MD_PROMISE);
665 struct promise_raid_conf *meta;
673 meta = pv->pv_meta;
677 md_disk_pos = promise_meta_find_disk(meta, pd->pd_meta[sdn]->disk.id);
768 else if (meta->disks[md_disk_pos].flags & PROMISE_F_DOWN)
787 } else if (meta->disks[md_disk_pos].flags & PROMISE_F_DOWN) {
791 } else if (meta->disks[md_disk_pos].flags & PROMISE_F_REDIR) {
795 if (pd->pd_meta[sdn]->generation != meta->generation)
802 } else if (!(meta->disks[md_disk_pos].flags & PROMISE_F_ONLINE)) {
806 } else if (pd->pd_meta[sdn]->generation != meta->generation ||
807 (meta->status & PROMISE_S_MARKED)) {
895 struct promise_raid_conf *meta;
901 meta = pv->pv_meta;
904 if (meta->type == PROMISE_T_RAID0)
906 else if (meta->type == PROMISE_T_RAID1) {
907 if (meta->array_width == 1)
911 } else if (meta->type == PROMISE_T_RAID3)
913 else if (meta->type == PROMISE_T_RAID5) {
916 } else if (meta->type == PROMISE_T_SPAN)
918 else if (meta->type == PROMISE_T_JBOD)
922 vol->v_strip_size = 512 << meta->stripe_shift; //ZZZ
923 vol->v_disks_count = meta->total_disks;
924 vol->v_mediasize = (off_t)meta->total_sectors * 512; //ZZZ
925 if (meta->total_sectors_high < 256) /* If value looks sane. */
927 ((off_t)meta->total_sectors_high << 32) * 512; //ZZZ
928 vol->v_sectorsize = 512 * meta->sector_size;
931 sd->sd_offset = (((off_t)meta->disk_offset_high << 32) +
932 meta->disk_offset) * 512;
933 sd->sd_size = (((off_t)meta->disk_sectors_high << 32) +
934 meta->disk_sectors) * 512;
942 if (pd->pd_meta[i]->volume_id == meta->volume_id)
1096 struct promise_raid_conf *meta, *metaarr[4];
1107 meta = NULL;
1699 struct promise_raid_conf *meta;
1730 meta = malloc(sizeof(*meta), M_MD_PROMISE, M_WAITOK | M_ZERO);
1732 memcpy(meta, pv->pv_meta, sizeof(*meta));
1733 memcpy(meta->promise_id, PROMISE_MAGIC,
1735 meta->dummy_0 = 0x00020000;
1736 meta->integrity = PROMISE_I_VALID;
1738 meta->generation = pv->pv_generation;
1739 meta->status = PROMISE_S_VALID | PROMISE_S_ONLINE |
1742 meta->status |= PROMISE_S_DEGRADED;
1744 meta->status |= PROMISE_S_MARKED; /* XXX: INVENTED! */
1747 meta->type = PROMISE_T_RAID0;
1750 meta->type = PROMISE_T_RAID1;
1752 meta->type = PROMISE_T_RAID3;
1754 meta->type = PROMISE_T_RAID5;
1756 meta->type = PROMISE_T_SPAN;
1758 meta->type = PROMISE_T_JBOD;
1759 meta->total_disks = vol->v_disks_count;
1760 meta->stripe_shift = ffs(vol->v_strip_size / 1024);
1761 meta->array_width = vol->v_disks_count;
1764 meta->array_width /= 2;
1765 meta->array_number = vol->v_global_id;
1766 meta->total_sectors = vol->v_mediasize / 512;
1767 meta->total_sectors_high = (vol->v_mediasize / 512) >> 32;
1768 meta->sector_size = vol->v_sectorsize / 512;
1769 meta->cylinders = meta->total_sectors / (255 * 63) - 1;
1770 meta->heads = 254;
1771 meta->sectors = 63;
1772 meta->volume_id = pv->pv_id;
1779 meta->disks[pos].flags = PROMISE_F_VALID |
1782 meta->disks[pos].flags |= 0;
1784 meta->disks[pos].flags |=
1787 meta->disks[pos].flags |=
1796 meta->disks[pos].flags |= PROMISE_F_ONLINE;
1798 meta->status |= PROMISE_S_MARKED;
1807 meta->disks[pos].id = pv->pv_meta->disks[pos].id;
1809 meta->disks[pos].number = i * 2;
1810 arc4rand(&meta->disks[pos].id,
1811 sizeof(meta->disks[pos].id), 0);
1814 promise_meta_put_name(meta, vol->v_name);
1819 meta->magic_3 = 0x03040010UL; /* Rebuild? */
1821 meta->magic_3 = 0x03040008UL; /* Resync? */
1825 rebuild_lba64 *= meta->array_width;
1828 rebuild_lba64 *= meta->array_width - 1;
1832 meta->magic_3 = 0x03000000UL;
1833 meta->rebuild_lba64 = rebuild_lba64;
1834 meta->magic_4 = 0x04010101UL;
1839 pv->pv_meta = meta;
1851 if (pd->pd_meta[j]->volume_id == meta->volume_id)
1858 pd->pd_meta[j] = promise_meta_copy(meta);
1859 pd->pd_meta[j]->disk = meta->disks[pos];