From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A4771C4320E for ; Fri, 30 Jul 2021 08:53:15 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 5502860FED for ; Fri, 30 Jul 2021 08:53:15 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 5502860FED Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=fujitsu.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id EB20B8E0003; Fri, 30 Jul 2021 04:53:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E62108E0001; Fri, 30 Jul 2021 04:53:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D51168E0003; Fri, 30 Jul 2021 04:53:14 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0098.hostedemail.com [216.40.44.98]) by kanga.kvack.org (Postfix) with ESMTP id B8C8E8E0001 for ; Fri, 30 Jul 2021 04:53:14 -0400 (EDT) Received: from smtpin18.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id 6889D27051 for ; Fri, 30 Jul 2021 08:53:14 +0000 (UTC) X-FDA: 78418639908.18.AC7A8BD Received: from heian.cn.fujitsu.com (mail.cn.fujitsu.com [183.91.158.132]) by imf14.hostedemail.com (Postfix) with ESMTP id 9438B600F2F0 for ; Fri, 30 Jul 2021 08:53:13 +0000 (UTC) IronPort-HdrOrdr: =?us-ascii?q?A9a23=3Ah8OWZK51DeltvZEXvwPXwPTXdLJyesId70hD?= =?us-ascii?q?6qkRc20wTiX8ra2TdZsguyMc9wx6ZJhNo7G90cq7MBbhHPxOkOos1N6ZNWGIhI?= =?us-ascii?q?LCFvAB0WKN+V3dMhy73utc+IMlSKJmFeD3ZGIQse/KpCW+DPYsqePqzJyV?= X-IronPort-AV: E=Sophos;i="5.84,281,1620662400"; d="scan'208";a="112070611" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 30 Jul 2021 16:53:12 +0800 Received: from G08CNEXMBPEKD06.g08.fujitsu.local (unknown [10.167.33.206]) by cn.fujitsu.com (Postfix) with ESMTP id 122854D0D4B9; Fri, 30 Jul 2021 16:53:09 +0800 (CST) Received: from G08CNEXCHPEKD09.g08.fujitsu.local (10.167.33.85) by G08CNEXMBPEKD06.g08.fujitsu.local (10.167.33.206) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Fri, 30 Jul 2021 16:53:02 +0800 Received: from irides.mr.mr.mr (10.167.225.141) by G08CNEXCHPEKD09.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.23 via Frontend Transport; Fri, 30 Jul 2021 16:53:02 +0800 From: Shiyang Ruan To: , , , , , CC: , , , , , Subject: [PATCH v6 4/9] pmem,mm: Implement ->memory_failure in pmem driver Date: Fri, 30 Jul 2021 16:52:40 +0800 Message-ID: <20210730085245.3069812-5-ruansy.fnst@fujitsu.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210730085245.3069812-1-ruansy.fnst@fujitsu.com> References: <20210730085245.3069812-1-ruansy.fnst@fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain X-yoursite-MailScanner-ID: 122854D0D4B9.A4972 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: ruansy.fnst@fujitsu.com X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 9438B600F2F0 Authentication-Results: imf14.hostedemail.com; dkim=none; spf=none (imf14.hostedemail.com: domain of ruansy.fnst@fujitsu.com has no SPF policy when checking 183.91.158.132) smtp.mailfrom=ruansy.fnst@fujitsu.com; dmarc=fail reason="No valid SPF, No valid DKIM" header.from=fujitsu.com (policy=none) X-Stat-Signature: w1pu6pcqanh5btnogkaxircm73m4837j X-HE-Tag: 1627635193-448889 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: With dax_holder notify support, we are able to notify the memory failure from pmem driver to upper layers. If there is something not support in the notify routine, memory_failure will fall back to the generic hanlder. Signed-off-by: Shiyang Ruan --- drivers/nvdimm/pmem.c | 13 +++++++++++++ mm/memory-failure.c | 14 ++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c index 1e0615b8565e..fea4ffc333b8 100644 --- a/drivers/nvdimm/pmem.c +++ b/drivers/nvdimm/pmem.c @@ -362,9 +362,22 @@ static void pmem_release_disk(void *__pmem) del_gendisk(pmem->disk); } =20 +static int pmem_pagemap_memory_failure(struct dev_pagemap *pgmap, + unsigned long pfn, unsigned long nr_pfns, int flags) +{ + struct pmem_device *pmem =3D + container_of(pgmap, struct pmem_device, pgmap); + loff_t offset =3D PFN_PHYS(pfn) - pmem->phys_addr - pmem->data_offset; + + return dax_holder_notify_failure(pmem->dax_dev, offset, + page_size(pfn_to_page(pfn)) * nr_pfns, + &flags); +} + static const struct dev_pagemap_ops fsdax_pagemap_ops =3D { .kill =3D pmem_pagemap_kill, .cleanup =3D pmem_pagemap_cleanup, + .memory_failure =3D pmem_pagemap_memory_failure, }; =20 static int pmem_attach_disk(struct device *dev, diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 3bdfcb45f66e..ab3eda335acd 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -1600,6 +1600,20 @@ static int memory_failure_dev_pagemap(unsigned lon= g pfn, int flags, */ SetPageHWPoison(page); =20 + /* + * Call driver's implementation to handle the memory failure, otherwise + * fall back to generic handler. + */ + if (pgmap->ops->memory_failure) { + rc =3D pgmap->ops->memory_failure(pgmap, pfn, 1, flags); + /* + * Fall back to generic handler too if operation is not + * supported inside the driver/device/filesystem. + */ + if (rc !=3D EOPNOTSUPP) + goto out; + } + mf_generic_kill_procs(pfn, flags); out: /* drop pgmap ref acquired in caller */ --=20 2.32.0