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 71909C433E0 for ; Mon, 8 Feb 2021 10:55:57 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id D5F3C64E7B for ; Mon, 8 Feb 2021 10:55:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D5F3C64E7B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=cn.fujitsu.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 53C7B6B007E; Mon, 8 Feb 2021 05:55:51 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 3B4836B0080; Mon, 8 Feb 2021 05:55:51 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0CEEF6B0081; Mon, 8 Feb 2021 05:55:51 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0079.hostedemail.com [216.40.44.79]) by kanga.kvack.org (Postfix) with ESMTP id DAE2D6B0080 for ; Mon, 8 Feb 2021 05:55:50 -0500 (EST) Received: from smtpin22.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id A336C1EE6 for ; Mon, 8 Feb 2021 10:55:50 +0000 (UTC) X-FDA: 77794795260.22.spade51_1b10cac275fe Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin22.hostedemail.com (Postfix) with ESMTP id 7B77A18038E68 for ; Mon, 8 Feb 2021 10:55:50 +0000 (UTC) X-HE-Tag: spade51_1b10cac275fe X-Filterd-Recvd-Size: 4924 Received: from heian.cn.fujitsu.com (mail.cn.fujitsu.com [183.91.158.132]) by imf07.hostedemail.com (Postfix) with ESMTP for ; Mon, 8 Feb 2021 10:55:49 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.81,161,1610380800"; d="scan'208";a="104328077" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 08 Feb 2021 18:55:47 +0800 Received: from G08CNEXMBPEKD04.g08.fujitsu.local (unknown [10.167.33.201]) by cn.fujitsu.com (Postfix) with ESMTP id 5CF2A4CE6F80; Mon, 8 Feb 2021 18:55:42 +0800 (CST) Received: from G08CNEXCHPEKD04.g08.fujitsu.local (10.167.33.200) by G08CNEXMBPEKD04.g08.fujitsu.local (10.167.33.201) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 8 Feb 2021 18:55:44 +0800 Received: from irides.mr.mr.mr (10.167.225.141) by G08CNEXCHPEKD04.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 8 Feb 2021 18:55:44 +0800 From: Shiyang Ruan To: , , , , , CC: , , , , , , , , Subject: [PATCH v3 08/11] dm: Introduce ->rmap() to find bdev offset Date: Mon, 8 Feb 2021 18:55:27 +0800 Message-ID: <20210208105530.3072869-9-ruansy.fnst@cn.fujitsu.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210208105530.3072869-1-ruansy.fnst@cn.fujitsu.com> References: <20210208105530.3072869-1-ruansy.fnst@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain X-yoursite-MailScanner-ID: 5CF2A4CE6F80.AE3E8 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: ruansy.fnst@cn.fujitsu.com 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: Pmem device could be a target of mapped device. In order to obtain superblock on the mapped device, we introduce this to translate offset from target device to md device. Currently, we implement it on linear target, which is easy to do the translation. Other targets will be supported in the future. However, some targets may not support it because of the non-linear mapping. Signed-off-by: Shiyang Ruan --- drivers/md/dm-linear.c | 20 ++++++++++++++++++++ include/linux/device-mapper.h | 5 +++++ 2 files changed, 25 insertions(+) diff --git a/drivers/md/dm-linear.c b/drivers/md/dm-linear.c index 00774b5d7668..90fdb4700afd 100644 --- a/drivers/md/dm-linear.c +++ b/drivers/md/dm-linear.c @@ -5,6 +5,7 @@ */ =20 #include "dm.h" +#include "dm-core.h" #include #include #include @@ -119,6 +120,24 @@ static void linear_status(struct dm_target *ti, stat= us_type_t type, } } =20 +static int linear_rmap(struct dm_target *ti, sector_t offset, + rmap_callout_fn fn, void *data) +{ + struct linear_c *lc =3D (struct linear_c *) ti->private; + struct mapped_device *md =3D ti->table->md; + struct block_device *bdev; + sector_t disk_sect =3D offset - dm_target_offset(ti, lc->start); + int rc =3D -ENODEV; + + bdev =3D bdget_disk_sector(md->disk, offset); + if (!bdev) + return rc; + + rc =3D fn(ti, bdev, disk_sect, data); + bdput(bdev); + return rc; +} + static int linear_prepare_ioctl(struct dm_target *ti, struct block_devic= e **bdev) { struct linear_c *lc =3D (struct linear_c *) ti->private; @@ -238,6 +257,7 @@ static struct target_type linear_target =3D { .ctr =3D linear_ctr, .dtr =3D linear_dtr, .map =3D linear_map, + .rmap =3D linear_rmap, .status =3D linear_status, .prepare_ioctl =3D linear_prepare_ioctl, .iterate_devices =3D linear_iterate_devices, diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.= h index 61a66fb8ebb3..c5cd1009a08d 100644 --- a/include/linux/device-mapper.h +++ b/include/linux/device-mapper.h @@ -58,6 +58,10 @@ typedef void (*dm_dtr_fn) (struct dm_target *ti); * =3D 2: The target wants to push back the io */ typedef int (*dm_map_fn) (struct dm_target *ti, struct bio *bio); +typedef int (*rmap_callout_fn) (struct dm_target *ti, struct block_devic= e *bdev, + sector_t sect, void *data); +typedef int (*dm_rmap_fn) (struct dm_target *ti, sector_t offset, + rmap_callout_fn fn, void *data); typedef int (*dm_clone_and_map_request_fn) (struct dm_target *ti, struct request *rq, union map_info *map_context, @@ -175,6 +179,7 @@ struct target_type { dm_ctr_fn ctr; dm_dtr_fn dtr; dm_map_fn map; + dm_rmap_fn rmap; dm_clone_and_map_request_fn clone_and_map_rq; dm_release_clone_request_fn release_clone_rq; dm_endio_fn end_io; --=20 2.30.0