|
@@ -394,6 +394,9 @@ int nd_pfn_validate(struct nd_pfn *nd_pfn)
|
|
pfn_sb->end_trunc = 0;
|
|
pfn_sb->end_trunc = 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (__le16_to_cpu(pfn_sb->version_minor) < 2)
|
|
|
|
+ pfn_sb->align = 0;
|
|
|
|
+
|
|
switch (le32_to_cpu(pfn_sb->mode)) {
|
|
switch (le32_to_cpu(pfn_sb->mode)) {
|
|
case PFN_MODE_RAM:
|
|
case PFN_MODE_RAM:
|
|
case PFN_MODE_PMEM:
|
|
case PFN_MODE_PMEM:
|
|
@@ -433,7 +436,7 @@ int nd_pfn_validate(struct nd_pfn *nd_pfn)
|
|
return -EBUSY;
|
|
return -EBUSY;
|
|
}
|
|
}
|
|
|
|
|
|
- nd_pfn->align = 1UL << ilog2(offset);
|
|
|
|
|
|
+ nd_pfn->align = le32_to_cpu(pfn_sb->align);
|
|
if (!is_power_of_2(offset) || offset < PAGE_SIZE) {
|
|
if (!is_power_of_2(offset) || offset < PAGE_SIZE) {
|
|
dev_err(&nd_pfn->dev, "bad offset: %#llx dax disabled\n",
|
|
dev_err(&nd_pfn->dev, "bad offset: %#llx dax disabled\n",
|
|
offset);
|
|
offset);
|
|
@@ -629,9 +632,10 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn)
|
|
memcpy(pfn_sb->uuid, nd_pfn->uuid, 16);
|
|
memcpy(pfn_sb->uuid, nd_pfn->uuid, 16);
|
|
memcpy(pfn_sb->parent_uuid, nd_dev_to_uuid(&ndns->dev), 16);
|
|
memcpy(pfn_sb->parent_uuid, nd_dev_to_uuid(&ndns->dev), 16);
|
|
pfn_sb->version_major = cpu_to_le16(1);
|
|
pfn_sb->version_major = cpu_to_le16(1);
|
|
- pfn_sb->version_minor = cpu_to_le16(1);
|
|
|
|
|
|
+ pfn_sb->version_minor = cpu_to_le16(2);
|
|
pfn_sb->start_pad = cpu_to_le32(start_pad);
|
|
pfn_sb->start_pad = cpu_to_le32(start_pad);
|
|
pfn_sb->end_trunc = cpu_to_le32(end_trunc);
|
|
pfn_sb->end_trunc = cpu_to_le32(end_trunc);
|
|
|
|
+ pfn_sb->align = cpu_to_le32(nd_pfn->align);
|
|
checksum = nd_sb_checksum((struct nd_gen_sb *) pfn_sb);
|
|
checksum = nd_sb_checksum((struct nd_gen_sb *) pfn_sb);
|
|
pfn_sb->checksum = cpu_to_le64(checksum);
|
|
pfn_sb->checksum = cpu_to_le64(checksum);
|
|
|
|
|