From patchwork Sat Aug 27 19:44:16 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Golle X-Patchwork-Id: 663321 X-Patchwork-Delegate: blogic@openwrt.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from arrakis.dune.hu (arrakis.dune.hu [78.24.191.176]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3sM7fK4F03z9sDf for ; Sun, 28 Aug 2016 05:44:41 +1000 (AEST) Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 0FE11B8090A; Sat, 27 Aug 2016 21:44:36 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on arrakis.dune.hu X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.1 Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP; Sat, 27 Aug 2016 21:44:36 +0200 (CEST) Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id F05D8B808FD for ; Sat, 27 Aug 2016 21:44:34 +0200 (CEST) X-policyd-weight: using cached result; rate:hard: -6.1 Received: from fudo.makrotopia.org (fudo.makrotopia.org [185.142.180.71]) by arrakis.dune.hu (Postfix) with ESMTPS for ; Sat, 27 Aug 2016 21:44:34 +0200 (CEST) Received: from local by fudo.makrotopia.org with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.87) (envelope-from ) id 1bdjWm-0002vs-5U; Sat, 27 Aug 2016 21:44:29 +0200 Date: Sat, 27 Aug 2016 21:44:16 +0200 From: Daniel Golle To: linux-mtd@lists.infradead.org Message-ID: <20160827194407.GA17559@makrotopia.org> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.6.2 (2016-07-01) Subject: [OpenWrt-Devel] [PATCH 2/3] mtd: ubiblock: introduce ubiblock_create_dev X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Weinberger , lede-dev@lists.infradead.org, Hauke Mehrtens , openwrt-devel@lists.openwrt.org Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" Define function ubiblock_create_dev(char *name, dev_t *bdev) which returns the created device by setting the point bdev. This is useful for in-kernel users creating a ubiblock device in order to mount the root filesystem. Signed-off-by: Daniel Golle --- drivers/mtd/ubi/block.c | 11 ++++++++++- drivers/mtd/ubi/ubi.h | 2 ++ include/linux/mtd/ubi.h | 16 ++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/ubi/block.c b/drivers/mtd/ubi/block.c index ebf46ad..58b818f 100644 --- a/drivers/mtd/ubi/block.c +++ b/drivers/mtd/ubi/block.c @@ -49,6 +49,7 @@ #include #include #include +#include #include #include "ubi-media.h" @@ -356,7 +357,11 @@ static struct blk_mq_ops ubiblock_mq_ops = { static DEFINE_IDR(ubiblock_minor_idr); -int ubiblock_create(struct ubi_volume_info *vi) +int ubiblock_create(struct ubi_volume_info *vi) { + return ubiblock_create_dev(vi, NULL); +} + +int ubiblock_create_dev(struct ubi_volume_info *vi, dev_t *bdev) { struct ubiblock *dev; struct gendisk *gd; @@ -448,6 +453,10 @@ int ubiblock_create(struct ubi_volume_info *vi) add_disk(dev->gd); dev_info(disk_to_dev(dev->gd), "created from ubi%d:%d(%s)", dev->ubi_num, dev->vol_id, vi->name); + + if (bdev) + *bdev = MKDEV(gd->major, gd->first_minor); + return 0; out_free_queue: diff --git a/drivers/mtd/ubi/ubi.h b/drivers/mtd/ubi/ubi.h index de1ea2e4..7700752 100644 --- a/drivers/mtd/ubi/ubi.h +++ b/drivers/mtd/ubi/ubi.h @@ -39,6 +39,7 @@ #include #include #include +#include #include #include "ubi-media.h" @@ -917,6 +918,7 @@ static inline int ubi_update_fastmap(struct ubi_device *ubi) { return 0; } int ubiblock_init(void); void ubiblock_exit(void); int ubiblock_create(struct ubi_volume_info *vi); +int ubiblock_create_dev(struct ubi_volume_info *vi, dev_t *bdev); int ubiblock_remove(struct ubi_volume_info *vi); #else static inline int ubiblock_init(void) { return 0; } diff --git a/include/linux/mtd/ubi.h b/include/linux/mtd/ubi.h index 0b92aa5..3d6444f 100644 --- a/include/linux/mtd/ubi.h +++ b/include/linux/mtd/ubi.h @@ -21,7 +21,9 @@ #ifndef __LINUX_UBI_H__ #define __LINUX_UBI_H__ +#include #include +#include #include #include #include @@ -282,4 +284,18 @@ static inline int ubi_read_sg(struct ubi_volume_desc *desc, int lnum, { return ubi_leb_read_sg(desc, lnum, sgl, offset, len, 0); } + + +/* + * This function allows in-kernel users to create a ubiblock device and + * get to know about the created device. + */ +#ifdef CONFIG_MTD_UBI_BLOCK +int ubiblock_create_dev(struct ubi_volume_info *vi, dev_t *bdev); +#else +int ubiblock_create_dev(struct ubi_volume_info *vi, dev_t *bdev) { + return -ENOTSUPP; +} +#endif + #endif /* !__LINUX_UBI_H__ */