From: Jane Chu <jane.chu@oracle.com>
To: david@fromorbit.com, djwong@kernel.org, dan.j.williams@intel.com,
hch@infradead.org, vishal.l.verma@intel.com,
dave.jiang@intel.com, agk@redhat.com, snitzer@redhat.com,
dm-devel@redhat.com, ira.weiny@intel.com, willy@infradead.org,
vgoyal@redhat.com, linux-fsdevel@vger.kernel.org,
nvdimm@lists.linux.dev, linux-kernel@vger.kernel.org,
linux-xfs@vger.kernel.org
Subject: [dm-devel] [PATCH v4 7/7] pmem: fix pmem_do_write() avoid writing to 'np' page
Date: Wed, 26 Jan 2022 14:11:16 -0700 [thread overview]
Message-ID: <20220126211116.860012-8-jane.chu@oracle.com> (raw)
In-Reply-To: <20220126211116.860012-1-jane.chu@oracle.com>
Since poisoned page is marked as not-present, the first of the
two back-to-back write_pmem() calls can only be made when there
is no poison in the range, otherwise kernel Oops.
Signed-off-by: Jane Chu <jane.chu@oracle.com>
---
drivers/nvdimm/pmem.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c
index f2d6b34d48de..283890084d58 100644
--- a/drivers/nvdimm/pmem.c
+++ b/drivers/nvdimm/pmem.c
@@ -187,10 +187,15 @@ static blk_status_t pmem_do_write(struct pmem_device *pmem,
* after clear poison.
*/
flush_dcache_page(page);
- write_pmem(pmem_addr, page, page_off, len);
- if (unlikely(bad_pmem)) {
- rc = pmem_clear_poison(pmem, pmem_off, len);
+ if (!bad_pmem) {
write_pmem(pmem_addr, page, page_off, len);
+ } else {
+ rc = pmem_clear_poison(pmem, pmem_off, len);
+ if (rc == BLK_STS_OK)
+ write_pmem(pmem_addr, page, page_off, len);
+ else
+ pr_warn("%s: failed to clear poison\n",
+ __func__);
}
return rc;
--
2.18.4
--
dm-devel mailing list
dm-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/dm-devel
WARNING: multiple messages have this Message-ID (diff)
From: Jane Chu <jane.chu@oracle.com>
To: david@fromorbit.com, djwong@kernel.org, dan.j.williams@intel.com,
hch@infradead.org, vishal.l.verma@intel.com,
dave.jiang@intel.com, agk@redhat.com, snitzer@redhat.com,
dm-devel@redhat.com, ira.weiny@intel.com, willy@infradead.org,
vgoyal@redhat.com, linux-fsdevel@vger.kernel.org,
nvdimm@lists.linux.dev, linux-kernel@vger.kernel.org,
linux-xfs@vger.kernel.org
Subject: [PATCH v4 7/7] pmem: fix pmem_do_write() avoid writing to 'np' page
Date: Wed, 26 Jan 2022 14:11:16 -0700 [thread overview]
Message-ID: <20220126211116.860012-8-jane.chu@oracle.com> (raw)
In-Reply-To: <20220126211116.860012-1-jane.chu@oracle.com>
Since poisoned page is marked as not-present, the first of the
two back-to-back write_pmem() calls can only be made when there
is no poison in the range, otherwise kernel Oops.
Signed-off-by: Jane Chu <jane.chu@oracle.com>
---
drivers/nvdimm/pmem.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c
index f2d6b34d48de..283890084d58 100644
--- a/drivers/nvdimm/pmem.c
+++ b/drivers/nvdimm/pmem.c
@@ -187,10 +187,15 @@ static blk_status_t pmem_do_write(struct pmem_device *pmem,
* after clear poison.
*/
flush_dcache_page(page);
- write_pmem(pmem_addr, page, page_off, len);
- if (unlikely(bad_pmem)) {
- rc = pmem_clear_poison(pmem, pmem_off, len);
+ if (!bad_pmem) {
write_pmem(pmem_addr, page, page_off, len);
+ } else {
+ rc = pmem_clear_poison(pmem, pmem_off, len);
+ if (rc == BLK_STS_OK)
+ write_pmem(pmem_addr, page, page_off, len);
+ else
+ pr_warn("%s: failed to clear poison\n",
+ __func__);
}
return rc;
--
2.18.4
next prev parent reply other threads:[~2022-01-26 21:12 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-26 21:11 [dm-devel] [PATCH v4 0/7] DAX poison recovery Jane Chu
2022-01-26 21:11 ` Jane Chu
2022-01-26 21:11 ` [dm-devel] [PATCH v4 1/7] mce: fix set_mce_nospec to always unmap the whole page Jane Chu
2022-01-26 21:11 ` Jane Chu
2022-01-26 21:11 ` [dm-devel] [PATCH v4 2/7] dax: introduce dax device flag DAXDEV_RECOVERY Jane Chu
2022-01-26 21:11 ` Jane Chu
2022-01-27 0:19 ` kernel test robot
2022-01-27 0:19 ` kernel test robot
2022-01-26 21:11 ` [dm-devel] [PATCH v4 3/7] dm: make dm aware of target's DAXDEV_RECOVERY capability Jane Chu
2022-01-26 21:11 ` Jane Chu
2022-01-27 1:00 ` kernel test robot
2022-01-26 21:11 ` [dm-devel] [PATCH v4 4/7] dax: add dax_recovery_write to dax_op and dm target type Jane Chu
2022-01-26 21:11 ` Jane Chu
2022-01-26 21:11 ` [dm-devel] [PATCH v4 5/7] pmem: add pmem_recovery_write() dax op Jane Chu
2022-01-26 21:11 ` Jane Chu
2022-01-26 21:11 ` [dm-devel] [PATCH v4 6/7] dax: add recovery_write to dax_iomap_iter in failure path Jane Chu
2022-01-26 21:11 ` Jane Chu
2022-01-26 21:11 ` Jane Chu [this message]
2022-01-26 21:11 ` [PATCH v4 7/7] pmem: fix pmem_do_write() avoid writing to 'np' page Jane Chu
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=20220126211116.860012-8-jane.chu@oracle.com \
--to=jane.chu@oracle.com \
--cc=agk@redhat.com \
--cc=dan.j.williams@intel.com \
--cc=dave.jiang@intel.com \
--cc=david@fromorbit.com \
--cc=djwong@kernel.org \
--cc=dm-devel@redhat.com \
--cc=hch@infradead.org \
--cc=ira.weiny@intel.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=nvdimm@lists.linux.dev \
--cc=snitzer@redhat.com \
--cc=vgoyal@redhat.com \
--cc=vishal.l.verma@intel.com \
--cc=willy@infradead.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: link
Be 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.