int ret;
        struct btt_sb *super;
        struct nd_btt *nd_btt = arena->nd_btt;
+       const u8 *parent_uuid = nd_dev_to_uuid(&nd_btt->ndns->dev);
 
        ret = btt_map_init(arena);
        if (ret)
 
        strncpy(super->signature, BTT_SIG, BTT_SIG_LEN);
        memcpy(super->uuid, nd_btt->uuid, 16);
+       memcpy(super->parent_uuid, parent_uuid, 16);
        super->flags = cpu_to_le32(arena->flags);
        super->version_major = cpu_to_le16(arena->version_major);
        super->version_minor = cpu_to_le16(arena->version_minor);
 
        return dev;
 }
 
+static bool uuid_is_null(u8 *uuid)
+{
+       static const u8 null_uuid[16];
+
+       return (memcmp(uuid, null_uuid, 16) == 0);
+}
+
 /**
  * nd_btt_arena_is_valid - check if the metadata layout is valid
  * @nd_btt:    device with BTT geometry and backing device info
  * @super:     pointer to the arena's info block being tested
  *
  * Check consistency of the btt info block with itself by validating
- * the checksum.
+ * the checksum, and with the parent namespace by verifying the
+ * parent_uuid contained in the info block with the one supplied in.
  *
  * Returns:
  * false for an invalid info block, true for a valid one
  */
 bool nd_btt_arena_is_valid(struct nd_btt *nd_btt, struct btt_sb *super)
 {
+       const u8 *parent_uuid = nd_dev_to_uuid(&nd_btt->ndns->dev);
        u64 checksum;
 
        if (memcmp(super->signature, BTT_SIG, BTT_SIG_LEN) != 0)
                return false;
 
+       if (!uuid_is_null(super->parent_uuid))
+               if (memcmp(super->parent_uuid, parent_uuid, 16) != 0)
+                       return false;
+
        checksum = le64_to_cpu(super->checksum);
        super->checksum = 0;
        if (checksum != nd_btt_sb_checksum(super))
 
 }
 EXPORT_SYMBOL(nvdimm_namespace_disk_name);
 
+const u8 *nd_dev_to_uuid(struct device *dev)
+{
+       static const u8 null_uuid[16];
+
+       if (!dev)
+               return null_uuid;
+
+       if (is_namespace_pmem(dev)) {
+               struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev);
+
+               return nspm->uuid;
+       } else if (is_namespace_blk(dev)) {
+               struct nd_namespace_blk *nsblk = to_nd_namespace_blk(dev);
+
+               return nsblk->uuid;
+       } else
+               return null_uuid;
+}
+EXPORT_SYMBOL(nd_dev_to_uuid);
+
 static ssize_t nstype_show(struct device *dev,
                struct device_attribute *attr, char *buf)
 {
 
 }
 void nd_iostat_end(struct bio *bio, unsigned long start);
 resource_size_t nd_namespace_blk_validate(struct nd_namespace_blk *nsblk);
+const u8 *nd_dev_to_uuid(struct device *dev);
 #endif /* __ND_H__ */