From patchwork Fri Jun 4 01:18:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiyang Ruan X-Patchwork-Id: 12298507 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 83C8DC47082 for ; Fri, 4 Jun 2021 01:20:56 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 303B5610E7 for ; Fri, 4 Jun 2021 01:20:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 303B5610E7 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=fujitsu.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id CACE56B0072; Thu, 3 Jun 2021 21:20:55 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C364A6B0075; Thu, 3 Jun 2021 21:20:55 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id AFDD76B0080; Thu, 3 Jun 2021 21:20:55 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0140.hostedemail.com [216.40.44.140]) by kanga.kvack.org (Postfix) with ESMTP id 8082A6B0072 for ; Thu, 3 Jun 2021 21:20:55 -0400 (EDT) Received: from smtpin24.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id 2DA2DD21D for ; Fri, 4 Jun 2021 01:20:55 +0000 (UTC) X-FDA: 78214287270.24.E391DEA Received: from heian.cn.fujitsu.com (unknown [183.91.158.132]) by imf05.hostedemail.com (Postfix) with ESMTP id 22B6DE0004D7 for ; Fri, 4 Jun 2021 01:20:33 +0000 (UTC) IronPort-HdrOrdr: A9a23:JRAGG6qYgVw+29Uknxze6CEaV5pOeYIsimQD101hICG9E/b5qynAppkmPHPP4gr5O0tApTnjAsa9qBrnnPYf3WB4B8bAYOCMggeVxe9Zg7ff/w== X-IronPort-AV: E=Sophos;i="5.83,246,1616428800"; d="scan'208";a="109209807" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 04 Jun 2021 09:19:06 +0800 Received: from G08CNEXMBPEKD05.g08.fujitsu.local (unknown [10.167.33.204]) by cn.fujitsu.com (Postfix) with ESMTP id 77CCF4C369E0; Fri, 4 Jun 2021 09:19:06 +0800 (CST) Received: from G08CNEXCHPEKD07.g08.fujitsu.local (10.167.33.80) by G08CNEXMBPEKD05.g08.fujitsu.local (10.167.33.204) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 4 Jun 2021 09:18:55 +0800 Received: from irides.mr.mr.mr (10.167.225.141) by G08CNEXCHPEKD07.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Fri, 4 Jun 2021 09:18:55 +0800 From: Shiyang Ruan To: , , , , , CC: , , , , , , Subject: [PATCH v4 06/10] fs/dax: Implement dax_holder_operations Date: Fri, 4 Jun 2021 09:18:40 +0800 Message-ID: <20210604011844.1756145-7-ruansy.fnst@fujitsu.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210604011844.1756145-1-ruansy.fnst@fujitsu.com> References: <20210604011844.1756145-1-ruansy.fnst@fujitsu.com> MIME-Version: 1.0 X-yoursite-MailScanner-ID: 77CCF4C369E0.A2269 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: ruansy.fnst@fujitsu.com Authentication-Results: imf05.hostedemail.com; dkim=none; dmarc=none; spf=temperror (imf05.hostedemail.com: error in processing during lookup of ruansy.fnst@fujitsu.com: DNS error) smtp.mailfrom=ruansy.fnst@fujitsu.com X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: 22B6DE0004D7 X-Stat-Signature: h1t4m8sqnyfmw9ouxcj57hc1agjobpi6 X-HE-Tag: 1622769633-103521 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: This is the case where the holder represents a filesystem. The offset translation from disk to block device is needed before we calling ->corrupted_range(). When a specific filesystem is being mounted, we use dax_set_holder() to associate it with the dax_device. Signed-off-by: Shiyang Ruan --- fs/dax.c | 16 ++++++++++++++++ include/linux/dax.h | 2 ++ 2 files changed, 18 insertions(+) diff --git a/fs/dax.c b/fs/dax.c index 58faca85455a..1a7473f46df2 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -1762,3 +1762,19 @@ vm_fault_t dax_finish_sync_fault(struct vm_fault *vmf, return dax_insert_pfn_mkwrite(vmf, pfn, order); } EXPORT_SYMBOL_GPL(dax_finish_sync_fault); + +static int fs_dax_corrupted_range(struct dax_device *dax_dev, + struct block_device *bdev, loff_t offset, size_t size, + void *data) +{ + struct super_block *sb = dax_get_holder(dax_dev); + loff_t bdev_off = offset - (get_start_sect(bdev) << SECTOR_SHIFT); + + if (!sb->s_op->corrupted_range) + return -EOPNOTSUPP; + return sb->s_op->corrupted_range(sb, bdev, bdev_off, size, data); +} + +const struct dax_holder_operations fs_dax_holder_ops = { + .corrupted_range = fs_dax_corrupted_range, +}; \ No newline at end of file diff --git a/include/linux/dax.h b/include/linux/dax.h index 6e758daa5004..b35b3b8959a5 100644 --- a/include/linux/dax.h +++ b/include/linux/dax.h @@ -254,6 +254,8 @@ static inline bool dax_mapping(struct address_space *mapping) return mapping->host && IS_DAX(mapping->host); } +extern const struct dax_holder_operations fs_dax_holder_ops; + #ifdef CONFIG_DEV_DAX_HMEM_DEVICES void hmem_register_device(int target_nid, struct resource *r); #else