From: Dan Williams <dan.j.williams@intel.com> To: linux-nvdimm@lists.01.org Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/7] libnvdimm/pfn: Introduce super-block minimum version requirements Date: Tue, 12 Feb 2019 13:25:01 -0800 [thread overview] Message-ID: <155000670159.348031.17631616775326330606.stgit@dwillia2-desk3.amr.corp.intel.com> (raw) In-Reply-To: <155000668075.348031.9371497273408112600.stgit@dwillia2-desk3.amr.corp.intel.com> In support of fixing a pfn info-block interpretation problem that requires a backwards incompatible format change introduce a mechanism to indicate a minimum support level to the parsing agent. Hopefully this mechanism never needs to be used, but it otherwise prevents the need to hunt for a state that causes old implementations to bail out. For now, the method chosen to make implementations prior to this introduction fail is to use new PFN3_MODE_* values. The use of 'mode' ensures that older Linux fails, but agents like the EFI driver that only care about 'data_offset' can continue to ignore the requirement. That is to say 'data_offset' should always be valid, but the interpretation of values that older Linux kernels use to setup the dev_pagemap and perform sector-to-pfn translations is going to change. Cc: Jeff Moyer <jmoyer@redhat.com> Cc: Johannes Thumshirn <jthumshirn@suse.de> Signed-off-by: Dan Williams <dan.j.williams@intel.com> --- drivers/nvdimm/pfn.h | 4 +++- drivers/nvdimm/pfn_devs.c | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/nvdimm/pfn.h b/drivers/nvdimm/pfn.h index dde9853453d3..710cb743fad6 100644 --- a/drivers/nvdimm/pfn.h +++ b/drivers/nvdimm/pfn.h @@ -20,6 +20,7 @@ #define PFN_SIG_LEN 16 #define PFN_SIG "NVDIMM_PFN_INFO\0" #define DAX_SIG "NVDIMM_DAX_INFO\0" +#define PFN_VERSION_SUPPORT 2 struct nd_pfn_sb { u8 signature[PFN_SIG_LEN]; @@ -36,7 +37,8 @@ struct nd_pfn_sb { __le32 end_trunc; /* minor-version-2 record the base alignment of the mapping */ __le32 align; - u8 padding[4000]; + __le16 min_version; + u8 padding[3998]; __le64 checksum; }; diff --git a/drivers/nvdimm/pfn_devs.c b/drivers/nvdimm/pfn_devs.c index ba74a341da5d..108f9f7ed064 100644 --- a/drivers/nvdimm/pfn_devs.c +++ b/drivers/nvdimm/pfn_devs.c @@ -459,6 +459,12 @@ int nd_pfn_validate(struct nd_pfn *nd_pfn, const char *sig) if (__le16_to_cpu(pfn_sb->version_minor) < 2) pfn_sb->align = 0; + if (__le16_to_cpu(pfn_sb->version_major) != 1) + return -EINVAL; + + if (__le16_to_cpu(pfn_sb->min_version) > PFN_VERSION_SUPPORT) + return -EINVAL; + switch (le32_to_cpu(pfn_sb->mode)) { case PFN_MODE_RAM: case PFN_MODE_PMEM: @@ -771,6 +777,7 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn) memcpy(pfn_sb->parent_uuid, nd_dev_to_uuid(&ndns->dev), 16); pfn_sb->version_major = cpu_to_le16(1); pfn_sb->version_minor = cpu_to_le16(2); + pfn_sb->min_version = cpu_to_le16(2); pfn_sb->start_pad = cpu_to_le32(start_pad); pfn_sb->end_trunc = cpu_to_le32(end_trunc); pfn_sb->align = cpu_to_le32(nd_pfn->align); _______________________________________________ Linux-nvdimm mailing list Linux-nvdimm@lists.01.org https://lists.01.org/mailman/listinfo/linux-nvdimm
WARNING: multiple messages have this Message-ID (diff)
From: Dan Williams <dan.j.williams@intel.com> To: linux-nvdimm@lists.01.org Cc: Jeff Moyer <jmoyer@redhat.com>, Johannes Thumshirn <jthumshirn@suse.de>, linux-kernel@vger.kernel.org, vishal.l.verma@intel.com, linux-fsdevel@vger.kernel.org Subject: [PATCH 4/7] libnvdimm/pfn: Introduce super-block minimum version requirements Date: Tue, 12 Feb 2019 13:25:01 -0800 [thread overview] Message-ID: <155000670159.348031.17631616775326330606.stgit@dwillia2-desk3.amr.corp.intel.com> (raw) In-Reply-To: <155000668075.348031.9371497273408112600.stgit@dwillia2-desk3.amr.corp.intel.com> In support of fixing a pfn info-block interpretation problem that requires a backwards incompatible format change introduce a mechanism to indicate a minimum support level to the parsing agent. Hopefully this mechanism never needs to be used, but it otherwise prevents the need to hunt for a state that causes old implementations to bail out. For now, the method chosen to make implementations prior to this introduction fail is to use new PFN3_MODE_* values. The use of 'mode' ensures that older Linux fails, but agents like the EFI driver that only care about 'data_offset' can continue to ignore the requirement. That is to say 'data_offset' should always be valid, but the interpretation of values that older Linux kernels use to setup the dev_pagemap and perform sector-to-pfn translations is going to change. Cc: Jeff Moyer <jmoyer@redhat.com> Cc: Johannes Thumshirn <jthumshirn@suse.de> Signed-off-by: Dan Williams <dan.j.williams@intel.com> --- drivers/nvdimm/pfn.h | 4 +++- drivers/nvdimm/pfn_devs.c | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/nvdimm/pfn.h b/drivers/nvdimm/pfn.h index dde9853453d3..710cb743fad6 100644 --- a/drivers/nvdimm/pfn.h +++ b/drivers/nvdimm/pfn.h @@ -20,6 +20,7 @@ #define PFN_SIG_LEN 16 #define PFN_SIG "NVDIMM_PFN_INFO\0" #define DAX_SIG "NVDIMM_DAX_INFO\0" +#define PFN_VERSION_SUPPORT 2 struct nd_pfn_sb { u8 signature[PFN_SIG_LEN]; @@ -36,7 +37,8 @@ struct nd_pfn_sb { __le32 end_trunc; /* minor-version-2 record the base alignment of the mapping */ __le32 align; - u8 padding[4000]; + __le16 min_version; + u8 padding[3998]; __le64 checksum; }; diff --git a/drivers/nvdimm/pfn_devs.c b/drivers/nvdimm/pfn_devs.c index ba74a341da5d..108f9f7ed064 100644 --- a/drivers/nvdimm/pfn_devs.c +++ b/drivers/nvdimm/pfn_devs.c @@ -459,6 +459,12 @@ int nd_pfn_validate(struct nd_pfn *nd_pfn, const char *sig) if (__le16_to_cpu(pfn_sb->version_minor) < 2) pfn_sb->align = 0; + if (__le16_to_cpu(pfn_sb->version_major) != 1) + return -EINVAL; + + if (__le16_to_cpu(pfn_sb->min_version) > PFN_VERSION_SUPPORT) + return -EINVAL; + switch (le32_to_cpu(pfn_sb->mode)) { case PFN_MODE_RAM: case PFN_MODE_PMEM: @@ -771,6 +777,7 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn) memcpy(pfn_sb->parent_uuid, nd_dev_to_uuid(&ndns->dev), 16); pfn_sb->version_major = cpu_to_le16(1); pfn_sb->version_minor = cpu_to_le16(2); + pfn_sb->min_version = cpu_to_le16(2); pfn_sb->start_pad = cpu_to_le32(start_pad); pfn_sb->end_trunc = cpu_to_le32(end_trunc); pfn_sb->align = cpu_to_le32(nd_pfn->align);
next prev parent reply other threads:[~2019-02-12 21:37 UTC|newest] Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-02-12 21:24 [PATCH 0/7] libnvdimm/pfn: Fix section-alignment padding Dan Williams 2019-02-12 21:24 ` Dan Williams 2019-02-12 21:24 ` [PATCH 1/7] libnvdimm/pfn: Account for PAGE_SIZE > info-block-size in nd_pfn_init() Dan Williams 2019-02-12 21:24 ` Dan Williams 2019-02-12 21:24 ` [PATCH 2/7] libnvdimm/pmem: Honor force_raw for legacy pmem regions Dan Williams 2019-02-12 21:24 ` Dan Williams [not found] ` <155000669130.348031.13764885263577554365.stgit-p8uTFz9XbKj2zm6wflaqv1nYeNYlB/vhral2JQCrhuEAvxtiuMwx3w@public.gmane.org> 2019-02-15 15:48 ` Sasha Levin 2019-02-18 21:14 ` Sasha Levin 2019-02-12 21:24 ` [PATCH 3/7] dax: Check the end of the block-device capacity with dax_direct_access() Dan Williams 2019-02-12 21:24 ` Dan Williams 2019-02-13 10:22 ` Jan Kara 2019-02-13 10:22 ` Jan Kara 2019-02-13 16:49 ` Dan Williams 2019-02-13 16:49 ` Dan Williams 2019-02-21 5:15 ` [PATCH v2] " Dan Williams 2019-02-21 5:15 ` Dan Williams 2019-02-12 21:25 ` Dan Williams [this message] 2019-02-12 21:25 ` [PATCH 4/7] libnvdimm/pfn: Introduce super-block minimum version requirements Dan Williams 2019-02-12 21:25 ` [PATCH 5/7] libnvdimm/pfn: Remove dax_label_reserve Dan Williams 2019-02-12 21:25 ` Dan Williams 2019-02-12 21:25 ` [PATCH 6/7] libnvdimm/pfn: Introduce 'struct pfn_map_info' Dan Williams 2019-02-12 21:25 ` Dan Williams 2019-02-12 21:25 ` [PATCH 7/7] libnvdimm/pfn: Fix 'start_pad' implementation Dan Williams 2019-02-12 21:25 ` Dan Williams 2019-02-21 23:47 ` Jeff Moyer 2019-02-21 23:47 ` Jeff Moyer 2019-02-22 3:58 ` Dan Williams 2019-02-22 3:58 ` Dan Williams 2019-02-22 3:58 ` Dan Williams 2019-02-22 15:42 ` Jeff Moyer 2019-02-22 15:42 ` Jeff Moyer 2019-02-22 17:12 ` Dan Williams 2019-02-22 17:12 ` Dan Williams 2019-02-22 17:12 ` Dan Williams 2019-02-22 17:21 ` Jeff Moyer 2019-02-22 17:21 ` Jeff Moyer 2019-02-22 17:21 ` Jeff Moyer 2019-02-20 17:11 ` [PATCH 0/7] libnvdimm/pfn: Fix section-alignment padding Dan Williams 2019-02-20 17:11 ` Dan Williams 2019-02-20 17:19 ` Johannes Thumshirn 2019-02-20 17:19 ` Johannes Thumshirn 2019-02-20 17:45 ` Jeff Moyer 2019-02-20 17:45 ` Jeff Moyer
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=155000670159.348031.17631616775326330606.stgit@dwillia2-desk3.amr.corp.intel.com \ --to=dan.j.williams@intel.com \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-nvdimm@lists.01.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.