summaryrefslogtreecommitdiffstats
path: root/sys/geom/mirror/g_mirror.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/geom/mirror/g_mirror.h')
-rw-r--r--sys/geom/mirror/g_mirror.h15
1 files changed, 10 insertions, 5 deletions
diff --git a/sys/geom/mirror/g_mirror.h b/sys/geom/mirror/g_mirror.h
index 5be5cda..77dc433 100644
--- a/sys/geom/mirror/g_mirror.h
+++ b/sys/geom/mirror/g_mirror.h
@@ -49,6 +49,7 @@
#define G_MIRROR_DISK_FLAG_SYNCHRONIZING 0x0000000000000002ULL
#define G_MIRROR_DISK_FLAG_FORCE_SYNC 0x0000000000000004ULL
#define G_MIRROR_DISK_FLAG_INACTIVE 0x0000000000000008ULL
+#define G_MIRROR_DISK_FLAG_HARDCODED 0x0000000000000010ULL
#define G_MIRROR_DISK_FLAG_MASK (G_MIRROR_DISK_FLAG_DIRTY | \
G_MIRROR_DISK_FLAG_SYNCHRONIZING | \
G_MIRROR_DISK_FLAG_FORCE_SYNC | \
@@ -210,6 +211,7 @@ struct g_mirror_metadata {
uint64_t md_sync_offset; /* Synchronized offset. */
uint64_t md_mflags; /* Additional mirror flags. */
uint64_t md_dflags; /* Additional disk flags. */
+ char md_provider[16]; /* Hardcoded provider. */
u_char md_hash[16]; /* MD5 hash. */
};
static __inline void
@@ -232,10 +234,11 @@ mirror_metadata_encode(struct g_mirror_metadata *md, u_char *data)
le64enc(data + 67, md->md_sync_offset);
le64enc(data + 75, md->md_mflags);
le64enc(data + 83, md->md_dflags);
+ bcopy(md->md_provider, data + 91, 16);
MD5Init(&ctx);
- MD5Update(&ctx, data, 91);
+ MD5Update(&ctx, data, 107);
MD5Final(md->md_hash, &ctx);
- bcopy(md->md_hash, data + 91, 16);
+ bcopy(md->md_hash, data + 107, 16);
}
static __inline int
mirror_metadata_decode(const u_char *data, struct g_mirror_metadata *md)
@@ -257,11 +260,12 @@ mirror_metadata_decode(const u_char *data, struct g_mirror_metadata *md)
md->md_sync_offset = le64dec(data + 67);
md->md_mflags = le64dec(data + 75);
md->md_dflags = le64dec(data + 83);
- bcopy(data + 91, md->md_hash, 16);
+ bcopy(data + 91, md->md_provider, 16);
+ bcopy(data + 107, md->md_hash, 16);
MD5Init(&ctx);
- MD5Update(&ctx, data, 91);
+ MD5Update(&ctx, data, 107);
MD5Final(md->md_hash, &ctx);
- if (bcmp(md->md_hash, data + 91, 16) != 0)
+ if (bcmp(md->md_hash, data + 107, 16) != 0)
return (EINVAL);
return (0);
}
@@ -345,6 +349,7 @@ mirror_metadata_dump(const struct g_mirror_metadata *md)
printf(" INACTIVE");
}
printf("\n");
+ printf("hcprovider: %s\n", md->md_provider);
bzero(hash, sizeof(hash));
for (i = 0; i < 16; i++) {
hash[i * 2] = hex[md->md_hash[i] >> 4];
OpenPOWER on IntegriCloud