All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@lst.de>
To: Jens Axboe <axboe@kernel.dk>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Chris Zankel <chris@zankel.net>,
	Max Filippov <jcmvbkbc@gmail.com>,
	Philipp Reisner <philipp.reisner@linbit.com>,
	Lars Ellenberg <lars.ellenberg@linbit.com>,
	Jim Paris <jim@jtan.com>,
	Joshua Morris <josh.h.morris@us.ibm.com>,
	Philip Kelleher <pjk1939@linux.ibm.com>,
	Minchan Kim <minchan@kernel.org>, Nitin Gupta <ngupta@vflare.org>,
	Matias Bjorling <mb@lightnvm.io>, Coly Li <colyli@suse.de>,
	Mike Snitzer <snitzer@redhat.com>, Song Liu <song@kernel.org>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Alex Dubov <oakad@yahoo.com>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Dan Williams <dan.j.williams@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Dave Jiang <dave.jiang@intel.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>
Cc: linux-block@vger.kernel.org, dm-devel@redhat.com,
	linux-m68k@lists.linux-m68k.org, linux-xtensa@linux-xtensa.org,
	drbd-dev@lists.linbit.com, linuxppc-dev@lists.ozlabs.org,
	linux-bcache@vger.kernel.org, linux-raid@vger.kernel.org,
	linux-mmc@vger.kernel.org, nvdimm@lists.linux.dev,
	linux-nvme@lists.infradead.org, linux-s390@vger.kernel.org
Subject: [PATCH 01/26] block: refactor device number setup in __device_add_disk
Date: Fri, 21 May 2021 07:50:51 +0200	[thread overview]
Message-ID: <20210521055116.1053587-2-hch@lst.de> (raw)
In-Reply-To: <20210521055116.1053587-1-hch@lst.de>

Untangle the mess around blk_alloc_devt by moving the check for
the used allocation scheme into the callers.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 block/blk.h             |  4 +-
 block/genhd.c           | 96 ++++++++++++++++-------------------------
 block/partitions/core.c | 15 +++++--
 3 files changed, 49 insertions(+), 66 deletions(-)

diff --git a/block/blk.h b/block/blk.h
index 8b3591aee0a5..cba3a94aabfa 100644
--- a/block/blk.h
+++ b/block/blk.h
@@ -343,8 +343,8 @@ static inline void blk_queue_free_zone_bitmaps(struct request_queue *q) {}
 static inline void blk_queue_clear_zone_settings(struct request_queue *q) {}
 #endif
 
-int blk_alloc_devt(struct block_device *part, dev_t *devt);
-void blk_free_devt(dev_t devt);
+int blk_alloc_ext_minor(void);
+void blk_free_ext_minor(unsigned int minor);
 char *disk_name(struct gendisk *hd, int partno, char *buf);
 #define ADDPART_FLAG_NONE	0
 #define ADDPART_FLAG_RAID	1
diff --git a/block/genhd.c b/block/genhd.c
index 39ca97b0edc6..2c00bc3261d9 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -335,52 +335,22 @@ static int blk_mangle_minor(int minor)
 	return minor;
 }
 
-/**
- * blk_alloc_devt - allocate a dev_t for a block device
- * @bdev: block device to allocate dev_t for
- * @devt: out parameter for resulting dev_t
- *
- * Allocate a dev_t for block device.
- *
- * RETURNS:
- * 0 on success, allocated dev_t is returned in *@devt.  -errno on
- * failure.
- *
- * CONTEXT:
- * Might sleep.
- */
-int blk_alloc_devt(struct block_device *bdev, dev_t *devt)
+int blk_alloc_ext_minor(void)
 {
-	struct gendisk *disk = bdev->bd_disk;
 	int idx;
 
-	/* in consecutive minor range? */
-	if (bdev->bd_partno < disk->minors) {
-		*devt = MKDEV(disk->major, disk->first_minor + bdev->bd_partno);
-		return 0;
-	}
-
 	idx = ida_alloc_range(&ext_devt_ida, 0, NR_EXT_DEVT, GFP_KERNEL);
-	if (idx < 0)
-		return idx == -ENOSPC ? -EBUSY : idx;
-
-	*devt = MKDEV(BLOCK_EXT_MAJOR, blk_mangle_minor(idx));
-	return 0;
+	if (idx < 0) {
+		if (idx == -ENOSPC)
+			return -EBUSY;
+		return idx;
+	}
+	return blk_mangle_minor(idx);
 }
 
-/**
- * blk_free_devt - free a dev_t
- * @devt: dev_t to free
- *
- * Free @devt which was allocated using blk_alloc_devt().
- *
- * CONTEXT:
- * Might sleep.
- */
-void blk_free_devt(dev_t devt)
+void blk_free_ext_minor(unsigned int minor)
 {
-	if (MAJOR(devt) == BLOCK_EXT_MAJOR)
-		ida_free(&ext_devt_ida, blk_mangle_minor(MINOR(devt)));
+	ida_free(&ext_devt_ida, blk_mangle_minor(minor));
 }
 
 static char *bdevt_str(dev_t devt, char *buf)
@@ -501,8 +471,7 @@ static void __device_add_disk(struct device *parent, struct gendisk *disk,
 			      const struct attribute_group **groups,
 			      bool register_queue)
 {
-	dev_t devt;
-	int retval;
+	int ret;
 
 	/*
 	 * The disk queue should now be all set with enough information about
@@ -513,23 +482,29 @@ static void __device_add_disk(struct device *parent, struct gendisk *disk,
 	if (register_queue)
 		elevator_init_mq(disk->queue);
 
-	/* minors == 0 indicates to use ext devt from part0 and should
-	 * be accompanied with EXT_DEVT flag.  Make sure all
-	 * parameters make sense.
+	/*
+	 * If the driver provides an explicit major number it also must provide
+	 * the number of minors numbers supported, and those will be used to
+	 * setup the gendisk.
+	 * Otherwise just allocate the device numbers for both the whole device
+	 * and all partitions from the extended dev_t space.
 	 */
-	WARN_ON(disk->minors && !(disk->major || disk->first_minor));
-	WARN_ON(!disk->minors &&
-		!(disk->flags & (GENHD_FL_EXT_DEVT | GENHD_FL_HIDDEN)));
-
-	disk->flags |= GENHD_FL_UP;
+	if (disk->major) {
+		WARN_ON(!disk->minors);
+	} else {
+		WARN_ON(disk->minors);
+		WARN_ON(!(disk->flags & (GENHD_FL_EXT_DEVT | GENHD_FL_HIDDEN)));
 
-	retval = blk_alloc_devt(disk->part0, &devt);
-	if (retval) {
-		WARN_ON(1);
-		return;
+		ret = blk_alloc_ext_minor();
+		if (ret < 0) {
+			WARN_ON(1);
+			return;
+		}
+		disk->major = BLOCK_EXT_MAJOR;
+		disk->first_minor = MINOR(ret);
 	}
-	disk->major = MAJOR(devt);
-	disk->first_minor = MINOR(devt);
+
+	disk->flags |= GENHD_FL_UP;
 
 	disk_alloc_events(disk);
 
@@ -543,14 +518,14 @@ static void __device_add_disk(struct device *parent, struct gendisk *disk,
 	} else {
 		struct backing_dev_info *bdi = disk->queue->backing_dev_info;
 		struct device *dev = disk_to_dev(disk);
-		int ret;
 
 		/* Register BDI before referencing it from bdev */
-		dev->devt = devt;
-		ret = bdi_register(bdi, "%u:%u", MAJOR(devt), MINOR(devt));
+		dev->devt = MKDEV(disk->major, disk->first_minor);
+		ret = bdi_register(bdi, "%u:%u",
+				   disk->major, disk->first_minor);
 		WARN_ON(ret);
 		bdi_set_owner(bdi, dev);
-		bdev_add(disk->part0, devt);
+		bdev_add(disk->part0, dev->devt);
 	}
 	register_disk(parent, disk, groups);
 	if (register_queue)
@@ -1129,7 +1104,8 @@ static void disk_release(struct device *dev)
 
 	might_sleep();
 
-	blk_free_devt(dev->devt);
+	if (MAJOR(dev->devt) == BLOCK_EXT_MAJOR)
+		blk_free_ext_minor(MINOR(dev->devt));
 	disk_release_events(disk);
 	kfree(disk->random);
 	xa_destroy(&disk->part_tbl);
diff --git a/block/partitions/core.c b/block/partitions/core.c
index dc60ecf46fe6..504297bdc8bf 100644
--- a/block/partitions/core.c
+++ b/block/partitions/core.c
@@ -260,7 +260,8 @@ static const struct attribute_group *part_attr_groups[] = {
 
 static void part_release(struct device *dev)
 {
-	blk_free_devt(dev->devt);
+	if (MAJOR(dev->devt) == BLOCK_EXT_MAJOR)
+		blk_free_ext_minor(MINOR(dev->devt));
 	bdput(dev_to_bdev(dev));
 }
 
@@ -379,9 +380,15 @@ static struct block_device *add_partition(struct gendisk *disk, int partno,
 	pdev->type = &part_type;
 	pdev->parent = ddev;
 
-	err = blk_alloc_devt(bdev, &devt);
-	if (err)
-		goto out_put;
+	/* in consecutive minor range? */
+	if (bdev->bd_partno < disk->minors) {
+		devt = MKDEV(disk->major, disk->first_minor + bdev->bd_partno);
+	} else {
+		err = blk_alloc_ext_minor();
+		if (err < 0)
+			goto out_put;
+		devt = MKDEV(BLOCK_EXT_MAJOR, err);
+	}
 	pdev->devt = devt;
 
 	/* delay uevent until 'holders' subdir is created */
-- 
2.30.2


WARNING: multiple messages have this Message-ID (diff)
From: Christoph Hellwig <hch@lst.de>
To: Jens Axboe <axboe@kernel.dk>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Chris Zankel <chris@zankel.net>,
	Max Filippov <jcmvbkbc@gmail.com>,
	Philipp Reisner <philipp.reisner@linbit.com>,
	Lars Ellenberg <lars.ellenberg@linbit.com>,
	Jim Paris <jim@jtan.com>,
	Joshua Morris <josh.h.morris@us.ibm.com>,
	Philip Kelleher <pjk1939@linux.ibm.com>,
	Minchan Kim <minchan@kernel.org>, Nitin Gupta <ngupta@vflare.org>,
	Matias Bjorling <mb@lightnvm.io>, Coly Li <colyli@suse.de>,
	Mike Snitzer <snitzer@redhat.com>, Song Liu <song@kernel.org>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Alex Dubov <oakad@yahoo.com>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Dan Williams <dan.j.williams@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Dave Jiang <dave.jiang@intel.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>
Cc: linux-bcache@vger.kernel.org, linux-xtensa@linux-xtensa.org,
	linux-raid@vger.kernel.org, nvdimm@lists.linux.dev,
	linux-s390@vger.kernel.org, linux-mmc@vger.kernel.org,
	linux-m68k@lists.linux-m68k.org, linux-nvme@lists.infradead.org,
	linux-block@vger.kernel.org, dm-devel@redhat.com,
	linuxppc-dev@lists.ozlabs.org, drbd-dev@lists.linbit.com
Subject: [PATCH 01/26] block: refactor device number setup in __device_add_disk
Date: Fri, 21 May 2021 07:50:51 +0200	[thread overview]
Message-ID: <20210521055116.1053587-2-hch@lst.de> (raw)
In-Reply-To: <20210521055116.1053587-1-hch@lst.de>

Untangle the mess around blk_alloc_devt by moving the check for
the used allocation scheme into the callers.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 block/blk.h             |  4 +-
 block/genhd.c           | 96 ++++++++++++++++-------------------------
 block/partitions/core.c | 15 +++++--
 3 files changed, 49 insertions(+), 66 deletions(-)

diff --git a/block/blk.h b/block/blk.h
index 8b3591aee0a5..cba3a94aabfa 100644
--- a/block/blk.h
+++ b/block/blk.h
@@ -343,8 +343,8 @@ static inline void blk_queue_free_zone_bitmaps(struct request_queue *q) {}
 static inline void blk_queue_clear_zone_settings(struct request_queue *q) {}
 #endif
 
-int blk_alloc_devt(struct block_device *part, dev_t *devt);
-void blk_free_devt(dev_t devt);
+int blk_alloc_ext_minor(void);
+void blk_free_ext_minor(unsigned int minor);
 char *disk_name(struct gendisk *hd, int partno, char *buf);
 #define ADDPART_FLAG_NONE	0
 #define ADDPART_FLAG_RAID	1
diff --git a/block/genhd.c b/block/genhd.c
index 39ca97b0edc6..2c00bc3261d9 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -335,52 +335,22 @@ static int blk_mangle_minor(int minor)
 	return minor;
 }
 
-/**
- * blk_alloc_devt - allocate a dev_t for a block device
- * @bdev: block device to allocate dev_t for
- * @devt: out parameter for resulting dev_t
- *
- * Allocate a dev_t for block device.
- *
- * RETURNS:
- * 0 on success, allocated dev_t is returned in *@devt.  -errno on
- * failure.
- *
- * CONTEXT:
- * Might sleep.
- */
-int blk_alloc_devt(struct block_device *bdev, dev_t *devt)
+int blk_alloc_ext_minor(void)
 {
-	struct gendisk *disk = bdev->bd_disk;
 	int idx;
 
-	/* in consecutive minor range? */
-	if (bdev->bd_partno < disk->minors) {
-		*devt = MKDEV(disk->major, disk->first_minor + bdev->bd_partno);
-		return 0;
-	}
-
 	idx = ida_alloc_range(&ext_devt_ida, 0, NR_EXT_DEVT, GFP_KERNEL);
-	if (idx < 0)
-		return idx == -ENOSPC ? -EBUSY : idx;
-
-	*devt = MKDEV(BLOCK_EXT_MAJOR, blk_mangle_minor(idx));
-	return 0;
+	if (idx < 0) {
+		if (idx == -ENOSPC)
+			return -EBUSY;
+		return idx;
+	}
+	return blk_mangle_minor(idx);
 }
 
-/**
- * blk_free_devt - free a dev_t
- * @devt: dev_t to free
- *
- * Free @devt which was allocated using blk_alloc_devt().
- *
- * CONTEXT:
- * Might sleep.
- */
-void blk_free_devt(dev_t devt)
+void blk_free_ext_minor(unsigned int minor)
 {
-	if (MAJOR(devt) == BLOCK_EXT_MAJOR)
-		ida_free(&ext_devt_ida, blk_mangle_minor(MINOR(devt)));
+	ida_free(&ext_devt_ida, blk_mangle_minor(minor));
 }
 
 static char *bdevt_str(dev_t devt, char *buf)
@@ -501,8 +471,7 @@ static void __device_add_disk(struct device *parent, struct gendisk *disk,
 			      const struct attribute_group **groups,
 			      bool register_queue)
 {
-	dev_t devt;
-	int retval;
+	int ret;
 
 	/*
 	 * The disk queue should now be all set with enough information about
@@ -513,23 +482,29 @@ static void __device_add_disk(struct device *parent, struct gendisk *disk,
 	if (register_queue)
 		elevator_init_mq(disk->queue);
 
-	/* minors == 0 indicates to use ext devt from part0 and should
-	 * be accompanied with EXT_DEVT flag.  Make sure all
-	 * parameters make sense.
+	/*
+	 * If the driver provides an explicit major number it also must provide
+	 * the number of minors numbers supported, and those will be used to
+	 * setup the gendisk.
+	 * Otherwise just allocate the device numbers for both the whole device
+	 * and all partitions from the extended dev_t space.
 	 */
-	WARN_ON(disk->minors && !(disk->major || disk->first_minor));
-	WARN_ON(!disk->minors &&
-		!(disk->flags & (GENHD_FL_EXT_DEVT | GENHD_FL_HIDDEN)));
-
-	disk->flags |= GENHD_FL_UP;
+	if (disk->major) {
+		WARN_ON(!disk->minors);
+	} else {
+		WARN_ON(disk->minors);
+		WARN_ON(!(disk->flags & (GENHD_FL_EXT_DEVT | GENHD_FL_HIDDEN)));
 
-	retval = blk_alloc_devt(disk->part0, &devt);
-	if (retval) {
-		WARN_ON(1);
-		return;
+		ret = blk_alloc_ext_minor();
+		if (ret < 0) {
+			WARN_ON(1);
+			return;
+		}
+		disk->major = BLOCK_EXT_MAJOR;
+		disk->first_minor = MINOR(ret);
 	}
-	disk->major = MAJOR(devt);
-	disk->first_minor = MINOR(devt);
+
+	disk->flags |= GENHD_FL_UP;
 
 	disk_alloc_events(disk);
 
@@ -543,14 +518,14 @@ static void __device_add_disk(struct device *parent, struct gendisk *disk,
 	} else {
 		struct backing_dev_info *bdi = disk->queue->backing_dev_info;
 		struct device *dev = disk_to_dev(disk);
-		int ret;
 
 		/* Register BDI before referencing it from bdev */
-		dev->devt = devt;
-		ret = bdi_register(bdi, "%u:%u", MAJOR(devt), MINOR(devt));
+		dev->devt = MKDEV(disk->major, disk->first_minor);
+		ret = bdi_register(bdi, "%u:%u",
+				   disk->major, disk->first_minor);
 		WARN_ON(ret);
 		bdi_set_owner(bdi, dev);
-		bdev_add(disk->part0, devt);
+		bdev_add(disk->part0, dev->devt);
 	}
 	register_disk(parent, disk, groups);
 	if (register_queue)
@@ -1129,7 +1104,8 @@ static void disk_release(struct device *dev)
 
 	might_sleep();
 
-	blk_free_devt(dev->devt);
+	if (MAJOR(dev->devt) == BLOCK_EXT_MAJOR)
+		blk_free_ext_minor(MINOR(dev->devt));
 	disk_release_events(disk);
 	kfree(disk->random);
 	xa_destroy(&disk->part_tbl);
diff --git a/block/partitions/core.c b/block/partitions/core.c
index dc60ecf46fe6..504297bdc8bf 100644
--- a/block/partitions/core.c
+++ b/block/partitions/core.c
@@ -260,7 +260,8 @@ static const struct attribute_group *part_attr_groups[] = {
 
 static void part_release(struct device *dev)
 {
-	blk_free_devt(dev->devt);
+	if (MAJOR(dev->devt) == BLOCK_EXT_MAJOR)
+		blk_free_ext_minor(MINOR(dev->devt));
 	bdput(dev_to_bdev(dev));
 }
 
@@ -379,9 +380,15 @@ static struct block_device *add_partition(struct gendisk *disk, int partno,
 	pdev->type = &part_type;
 	pdev->parent = ddev;
 
-	err = blk_alloc_devt(bdev, &devt);
-	if (err)
-		goto out_put;
+	/* in consecutive minor range? */
+	if (bdev->bd_partno < disk->minors) {
+		devt = MKDEV(disk->major, disk->first_minor + bdev->bd_partno);
+	} else {
+		err = blk_alloc_ext_minor();
+		if (err < 0)
+			goto out_put;
+		devt = MKDEV(BLOCK_EXT_MAJOR, err);
+	}
 	pdev->devt = devt;
 
 	/* delay uevent until 'holders' subdir is created */
-- 
2.30.2


WARNING: multiple messages have this Message-ID (diff)
From: Christoph Hellwig <hch@lst.de>
To: Jens Axboe <axboe@kernel.dk>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Chris Zankel <chris@zankel.net>,
	Max Filippov <jcmvbkbc@gmail.com>,
	Philipp Reisner <philipp.reisner@linbit.com>,
	Lars Ellenberg <lars.ellenberg@linbit.com>,
	Jim Paris <jim@jtan.com>,
	Joshua Morris <josh.h.morris@us.ibm.com>,
	Philip Kelleher <pjk1939@linux.ibm.com>,
	Minchan Kim <minchan@kernel.org>, Nitin Gupta <ngupta@vflare.org>,
	Matias Bjorling <mb@lightnvm.io>, Coly Li <colyli@suse.de>,
	Mike Snitzer <snitzer@redhat.com>, Song Liu <song@kernel.org>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Alex Dubov <oakad@yahoo.com>,
	 Ulf Hansson <ulf.hansson@linaro.org>,
	Dan Williams <dan.j.williams@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Dave Jiang <dave.jiang@intel.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	 Vasily Gorbik <gor@linux.ibm.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>
Cc: linux-xtensa@linux-xtensa.org, linux-m68k@vger.kernel.org,
	linux-raid@vger.kernel.org, nvdimm@lists.linux.dev,
	linux-s390@vger.kernel.org, linux-mmc@vger.kernel.org,
	linux-bcache@vger.kernel.org, linux-nvme@lists.infradead.org,
	linux-block@vger.kernel.org, dm-devel@redhat.com,
	drbd-dev@tron.linbit.com, linuxppc-dev@lists.ozlabs.org
Subject: [dm-devel] [PATCH 01/26] block: refactor device number setup in __device_add_disk
Date: Fri, 21 May 2021 07:50:51 +0200	[thread overview]
Message-ID: <20210521055116.1053587-2-hch@lst.de> (raw)
In-Reply-To: <20210521055116.1053587-1-hch@lst.de>

Untangle the mess around blk_alloc_devt by moving the check for
the used allocation scheme into the callers.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 block/blk.h             |  4 +-
 block/genhd.c           | 96 ++++++++++++++++-------------------------
 block/partitions/core.c | 15 +++++--
 3 files changed, 49 insertions(+), 66 deletions(-)

diff --git a/block/blk.h b/block/blk.h
index 8b3591aee0a5..cba3a94aabfa 100644
--- a/block/blk.h
+++ b/block/blk.h
@@ -343,8 +343,8 @@ static inline void blk_queue_free_zone_bitmaps(struct request_queue *q) {}
 static inline void blk_queue_clear_zone_settings(struct request_queue *q) {}
 #endif
 
-int blk_alloc_devt(struct block_device *part, dev_t *devt);
-void blk_free_devt(dev_t devt);
+int blk_alloc_ext_minor(void);
+void blk_free_ext_minor(unsigned int minor);
 char *disk_name(struct gendisk *hd, int partno, char *buf);
 #define ADDPART_FLAG_NONE	0
 #define ADDPART_FLAG_RAID	1
diff --git a/block/genhd.c b/block/genhd.c
index 39ca97b0edc6..2c00bc3261d9 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -335,52 +335,22 @@ static int blk_mangle_minor(int minor)
 	return minor;
 }
 
-/**
- * blk_alloc_devt - allocate a dev_t for a block device
- * @bdev: block device to allocate dev_t for
- * @devt: out parameter for resulting dev_t
- *
- * Allocate a dev_t for block device.
- *
- * RETURNS:
- * 0 on success, allocated dev_t is returned in *@devt.  -errno on
- * failure.
- *
- * CONTEXT:
- * Might sleep.
- */
-int blk_alloc_devt(struct block_device *bdev, dev_t *devt)
+int blk_alloc_ext_minor(void)
 {
-	struct gendisk *disk = bdev->bd_disk;
 	int idx;
 
-	/* in consecutive minor range? */
-	if (bdev->bd_partno < disk->minors) {
-		*devt = MKDEV(disk->major, disk->first_minor + bdev->bd_partno);
-		return 0;
-	}
-
 	idx = ida_alloc_range(&ext_devt_ida, 0, NR_EXT_DEVT, GFP_KERNEL);
-	if (idx < 0)
-		return idx == -ENOSPC ? -EBUSY : idx;
-
-	*devt = MKDEV(BLOCK_EXT_MAJOR, blk_mangle_minor(idx));
-	return 0;
+	if (idx < 0) {
+		if (idx == -ENOSPC)
+			return -EBUSY;
+		return idx;
+	}
+	return blk_mangle_minor(idx);
 }
 
-/**
- * blk_free_devt - free a dev_t
- * @devt: dev_t to free
- *
- * Free @devt which was allocated using blk_alloc_devt().
- *
- * CONTEXT:
- * Might sleep.
- */
-void blk_free_devt(dev_t devt)
+void blk_free_ext_minor(unsigned int minor)
 {
-	if (MAJOR(devt) == BLOCK_EXT_MAJOR)
-		ida_free(&ext_devt_ida, blk_mangle_minor(MINOR(devt)));
+	ida_free(&ext_devt_ida, blk_mangle_minor(minor));
 }
 
 static char *bdevt_str(dev_t devt, char *buf)
@@ -501,8 +471,7 @@ static void __device_add_disk(struct device *parent, struct gendisk *disk,
 			      const struct attribute_group **groups,
 			      bool register_queue)
 {
-	dev_t devt;
-	int retval;
+	int ret;
 
 	/*
 	 * The disk queue should now be all set with enough information about
@@ -513,23 +482,29 @@ static void __device_add_disk(struct device *parent, struct gendisk *disk,
 	if (register_queue)
 		elevator_init_mq(disk->queue);
 
-	/* minors == 0 indicates to use ext devt from part0 and should
-	 * be accompanied with EXT_DEVT flag.  Make sure all
-	 * parameters make sense.
+	/*
+	 * If the driver provides an explicit major number it also must provide
+	 * the number of minors numbers supported, and those will be used to
+	 * setup the gendisk.
+	 * Otherwise just allocate the device numbers for both the whole device
+	 * and all partitions from the extended dev_t space.
 	 */
-	WARN_ON(disk->minors && !(disk->major || disk->first_minor));
-	WARN_ON(!disk->minors &&
-		!(disk->flags & (GENHD_FL_EXT_DEVT | GENHD_FL_HIDDEN)));
-
-	disk->flags |= GENHD_FL_UP;
+	if (disk->major) {
+		WARN_ON(!disk->minors);
+	} else {
+		WARN_ON(disk->minors);
+		WARN_ON(!(disk->flags & (GENHD_FL_EXT_DEVT | GENHD_FL_HIDDEN)));
 
-	retval = blk_alloc_devt(disk->part0, &devt);
-	if (retval) {
-		WARN_ON(1);
-		return;
+		ret = blk_alloc_ext_minor();
+		if (ret < 0) {
+			WARN_ON(1);
+			return;
+		}
+		disk->major = BLOCK_EXT_MAJOR;
+		disk->first_minor = MINOR(ret);
 	}
-	disk->major = MAJOR(devt);
-	disk->first_minor = MINOR(devt);
+
+	disk->flags |= GENHD_FL_UP;
 
 	disk_alloc_events(disk);
 
@@ -543,14 +518,14 @@ static void __device_add_disk(struct device *parent, struct gendisk *disk,
 	} else {
 		struct backing_dev_info *bdi = disk->queue->backing_dev_info;
 		struct device *dev = disk_to_dev(disk);
-		int ret;
 
 		/* Register BDI before referencing it from bdev */
-		dev->devt = devt;
-		ret = bdi_register(bdi, "%u:%u", MAJOR(devt), MINOR(devt));
+		dev->devt = MKDEV(disk->major, disk->first_minor);
+		ret = bdi_register(bdi, "%u:%u",
+				   disk->major, disk->first_minor);
 		WARN_ON(ret);
 		bdi_set_owner(bdi, dev);
-		bdev_add(disk->part0, devt);
+		bdev_add(disk->part0, dev->devt);
 	}
 	register_disk(parent, disk, groups);
 	if (register_queue)
@@ -1129,7 +1104,8 @@ static void disk_release(struct device *dev)
 
 	might_sleep();
 
-	blk_free_devt(dev->devt);
+	if (MAJOR(dev->devt) == BLOCK_EXT_MAJOR)
+		blk_free_ext_minor(MINOR(dev->devt));
 	disk_release_events(disk);
 	kfree(disk->random);
 	xa_destroy(&disk->part_tbl);
diff --git a/block/partitions/core.c b/block/partitions/core.c
index dc60ecf46fe6..504297bdc8bf 100644
--- a/block/partitions/core.c
+++ b/block/partitions/core.c
@@ -260,7 +260,8 @@ static const struct attribute_group *part_attr_groups[] = {
 
 static void part_release(struct device *dev)
 {
-	blk_free_devt(dev->devt);
+	if (MAJOR(dev->devt) == BLOCK_EXT_MAJOR)
+		blk_free_ext_minor(MINOR(dev->devt));
 	bdput(dev_to_bdev(dev));
 }
 
@@ -379,9 +380,15 @@ static struct block_device *add_partition(struct gendisk *disk, int partno,
 	pdev->type = &part_type;
 	pdev->parent = ddev;
 
-	err = blk_alloc_devt(bdev, &devt);
-	if (err)
-		goto out_put;
+	/* in consecutive minor range? */
+	if (bdev->bd_partno < disk->minors) {
+		devt = MKDEV(disk->major, disk->first_minor + bdev->bd_partno);
+	} else {
+		err = blk_alloc_ext_minor();
+		if (err < 0)
+			goto out_put;
+		devt = MKDEV(BLOCK_EXT_MAJOR, err);
+	}
 	pdev->devt = devt;
 
 	/* delay uevent until 'holders' subdir is created */
-- 
2.30.2

--
dm-devel mailing list
dm-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/dm-devel


  reply	other threads:[~2021-05-21  5:51 UTC|newest]

Thread overview: 275+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-21  5:50 simplify gendisk and request_queue allocation for bio based drivers Christoph Hellwig
2021-05-21  5:50 ` [dm-devel] " Christoph Hellwig
2021-05-21  5:50 ` Christoph Hellwig
2021-05-21  5:50 ` Christoph Hellwig [this message]
2021-05-21  5:50   ` [dm-devel] [PATCH 01/26] block: refactor device number setup in __device_add_disk Christoph Hellwig
2021-05-21  5:50   ` Christoph Hellwig
2021-05-21 17:16   ` [dm-devel] " Luis Chamberlain
2021-05-21 17:16     ` Luis Chamberlain
2021-05-21 17:16     ` Luis Chamberlain
2021-05-21 17:16     ` Luis Chamberlain
2021-05-24  7:20     ` Christoph Hellwig
2021-05-24  7:20       ` Christoph Hellwig
2021-05-24  7:20       ` Christoph Hellwig
2021-05-24  7:20       ` Christoph Hellwig
2021-05-23  7:46   ` Hannes Reinecke
2021-05-23  7:46     ` [dm-devel] " Hannes Reinecke
2021-05-23  7:46     ` Hannes Reinecke
2021-05-23  7:46     ` Hannes Reinecke
2021-05-24  7:22     ` Christoph Hellwig
2021-05-24  7:22       ` [dm-devel] " Christoph Hellwig
2021-05-24  7:22       ` Christoph Hellwig
2021-05-24  7:22       ` Christoph Hellwig
2021-05-21  5:50 ` [PATCH 02/26] block: move the DISK_MAX_PARTS sanity check into __device_add_disk Christoph Hellwig
2021-05-21  5:50   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:50   ` Christoph Hellwig
2021-05-21 17:18   ` [dm-devel] " Luis Chamberlain
2021-05-21 17:18     ` Luis Chamberlain
2021-05-21 17:18     ` Luis Chamberlain
2021-05-21 17:18     ` Luis Chamberlain
2021-05-23  7:48   ` Hannes Reinecke
2021-05-23  7:48     ` [dm-devel] " Hannes Reinecke
2021-05-23  7:48     ` Hannes Reinecke
2021-05-23  7:48     ` Hannes Reinecke
2021-05-21  5:50 ` [PATCH 03/26] block: automatically enable GENHD_FL_EXT_DEVT Christoph Hellwig
2021-05-21  5:50   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:50   ` Christoph Hellwig
2021-05-21 17:22   ` [dm-devel] " Luis Chamberlain
2021-05-21 17:22     ` Luis Chamberlain
2021-05-21 17:22     ` Luis Chamberlain
2021-05-21 17:22     ` Luis Chamberlain
2021-05-23  7:50   ` Hannes Reinecke
2021-05-23  7:50     ` [dm-devel] " Hannes Reinecke
2021-05-23  7:50     ` Hannes Reinecke
2021-05-23  7:50     ` Hannes Reinecke
2021-05-21  5:50 ` [PATCH 04/26] block: add a flag to make put_disk on partially initalized disks safer Christoph Hellwig
2021-05-21  5:50   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:50   ` Christoph Hellwig
2021-05-21 17:28   ` [dm-devel] " Luis Chamberlain
2021-05-21 17:28     ` Luis Chamberlain
2021-05-21 17:28     ` Luis Chamberlain
2021-05-21 17:28     ` Luis Chamberlain
2021-05-23  7:54   ` Hannes Reinecke
2021-05-23  7:54     ` [dm-devel] " Hannes Reinecke
2021-05-23  7:54     ` Hannes Reinecke
2021-05-23  7:54     ` Hannes Reinecke
2021-05-21  5:50 ` [PATCH 05/26] block: add blk_alloc_disk and blk_cleanup_disk APIs Christoph Hellwig
2021-05-21  5:50   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:50   ` Christoph Hellwig
2021-05-21 17:44   ` [dm-devel] " Luis Chamberlain
2021-05-21 17:44     ` Luis Chamberlain
2021-05-21 17:44     ` Luis Chamberlain
2021-05-21 17:44     ` Luis Chamberlain
2021-05-24  7:24     ` Christoph Hellwig
2021-05-24  7:24       ` Christoph Hellwig
2021-05-24  7:24       ` Christoph Hellwig
2021-05-24  7:24       ` Christoph Hellwig
2021-05-23  7:55   ` Hannes Reinecke
2021-05-23  7:55     ` [dm-devel] " Hannes Reinecke
2021-05-23  7:55     ` Hannes Reinecke
2021-05-23  7:55     ` Hannes Reinecke
2021-05-21  5:50 ` [PATCH 06/26] brd: convert to blk_alloc_disk/blk_cleanup_disk Christoph Hellwig
2021-05-21  5:50   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:50   ` Christoph Hellwig
2021-05-23  7:58   ` Hannes Reinecke
2021-05-23  7:58     ` [dm-devel] " Hannes Reinecke
2021-05-23  7:58     ` Hannes Reinecke
2021-05-23  7:58     ` Hannes Reinecke
2021-05-24  7:24     ` Christoph Hellwig
2021-05-24  7:24       ` [dm-devel] " Christoph Hellwig
2021-05-24  7:24       ` Christoph Hellwig
2021-05-24  7:24       ` Christoph Hellwig
2021-05-21  5:50 ` [PATCH 07/26] drbd: " Christoph Hellwig
2021-05-21  5:50   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:50   ` Christoph Hellwig
2021-05-23  7:59   ` Hannes Reinecke
2021-05-23  7:59     ` [dm-devel] " Hannes Reinecke
2021-05-23  7:59     ` Hannes Reinecke
2021-05-23  7:59     ` Hannes Reinecke
2021-05-21  5:50 ` [PATCH 08/26] pktcdvd: " Christoph Hellwig
2021-05-21  5:50   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:50   ` Christoph Hellwig
2021-05-23  8:00   ` Hannes Reinecke
2021-05-23  8:00     ` [dm-devel] " Hannes Reinecke
2021-05-23  8:00     ` Hannes Reinecke
2021-05-23  8:00     ` Hannes Reinecke
2021-05-21  5:50 ` [PATCH 09/26] rsxx: " Christoph Hellwig
2021-05-21  5:50   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:50   ` Christoph Hellwig
2021-05-23  8:01   ` Hannes Reinecke
2021-05-23  8:01     ` [dm-devel] " Hannes Reinecke
2021-05-23  8:01     ` Hannes Reinecke
2021-05-23  8:01     ` Hannes Reinecke
2021-05-21  5:51 ` [PATCH 10/26] zram: " Christoph Hellwig
2021-05-21  5:51   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:51   ` Christoph Hellwig
2021-05-23  8:01   ` Hannes Reinecke
2021-05-23  8:01     ` [dm-devel] " Hannes Reinecke
2021-05-23  8:01     ` Hannes Reinecke
2021-05-23  8:01     ` Hannes Reinecke
2021-05-21  5:51 ` [PATCH 11/26] lightnvm: " Christoph Hellwig
2021-05-21  5:51   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:51   ` Christoph Hellwig
2021-05-23  8:02   ` Hannes Reinecke
2021-05-23  8:02     ` [dm-devel] " Hannes Reinecke
2021-05-23  8:02     ` Hannes Reinecke
2021-05-23  8:02     ` Hannes Reinecke
2021-05-21  5:51 ` [PATCH 12/26] bcache: " Christoph Hellwig
2021-05-21  5:51   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:51   ` Christoph Hellwig
2021-05-21  6:15   ` Coly Li
2021-05-21  6:15     ` [dm-devel] " Coly Li
2021-05-21  6:15     ` Coly Li
2021-05-21  6:23     ` Christoph Hellwig
2021-05-21  6:23       ` [dm-devel] " Christoph Hellwig
2021-05-21  6:23       ` Christoph Hellwig
2021-05-23 16:19       ` Coly Li
2021-05-23  8:04   ` Hannes Reinecke
2021-05-23  8:04     ` [dm-devel] " Hannes Reinecke
2021-05-23  8:04     ` Hannes Reinecke
2021-05-23  8:04     ` Hannes Reinecke
2021-05-23 16:20   ` Coly Li
2021-05-23 16:20     ` [dm-devel] " Coly Li
2021-05-23 16:20     ` Coly Li
2021-05-23 16:20     ` Coly Li
2021-05-21  5:51 ` [PATCH 13/26] dm: " Christoph Hellwig
2021-05-21  5:51   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:51   ` Christoph Hellwig
2021-05-23  8:10   ` Hannes Reinecke
2021-05-23  8:10     ` [dm-devel] " Hannes Reinecke
2021-05-23  8:10     ` Hannes Reinecke
2021-05-23  8:10     ` Hannes Reinecke
2021-05-24  7:25     ` Christoph Hellwig
2021-05-24  7:25       ` [dm-devel] " Christoph Hellwig
2021-05-24  7:25       ` Christoph Hellwig
2021-05-24  7:25       ` Christoph Hellwig
2021-05-21  5:51 ` [PATCH 14/26] md: " Christoph Hellwig
2021-05-21  5:51   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:51   ` Christoph Hellwig
2021-05-23  8:12   ` Hannes Reinecke
2021-05-23  8:12     ` [dm-devel] " Hannes Reinecke
2021-05-23  8:12     ` Hannes Reinecke
2021-05-23  8:12     ` Hannes Reinecke
2021-05-24  7:26     ` Christoph Hellwig
2021-05-24  7:26       ` [dm-devel] " Christoph Hellwig
2021-05-24  7:26       ` Christoph Hellwig
2021-05-24  7:26       ` Christoph Hellwig
2021-05-24  8:27       ` Hannes Reinecke
2021-05-24  8:27         ` [dm-devel] " Hannes Reinecke
2021-05-24  8:27         ` Hannes Reinecke
2021-05-24  8:27         ` Hannes Reinecke
2021-05-21  5:51 ` [PATCH 15/26] nvdimm-blk: " Christoph Hellwig
2021-05-21  5:51   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:51   ` Christoph Hellwig
2021-05-23  8:13   ` Hannes Reinecke
2021-05-23  8:13     ` [dm-devel] " Hannes Reinecke
2021-05-23  8:13     ` Hannes Reinecke
2021-05-23  8:13     ` Hannes Reinecke
2021-05-21  5:51 ` [PATCH 16/26] nvdimm-btt: " Christoph Hellwig
2021-05-21  5:51   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:51   ` Christoph Hellwig
2021-05-23  8:14   ` Hannes Reinecke
2021-05-23  8:14     ` [dm-devel] " Hannes Reinecke
2021-05-23  8:14     ` Hannes Reinecke
2021-05-23  8:14     ` Hannes Reinecke
2021-05-21  5:51 ` [PATCH 17/26] nvdimm-pmem: " Christoph Hellwig
2021-05-21  5:51   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:51   ` Christoph Hellwig
2021-05-23  8:14   ` Hannes Reinecke
2021-05-23  8:14     ` [dm-devel] " Hannes Reinecke
2021-05-23  8:14     ` Hannes Reinecke
2021-05-23  8:14     ` Hannes Reinecke
2021-06-07  4:43   ` Dan Williams
2021-06-07  4:43     ` Dan Williams
2021-06-07  4:43     ` [dm-devel] " Dan Williams
2021-06-07  4:43     ` Dan Williams
2021-06-07  4:43     ` Dan Williams
2021-05-21  5:51 ` [PATCH 18/26] nvme-multipath: " Christoph Hellwig
2021-05-21  5:51   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:51   ` Christoph Hellwig
2021-05-23  8:20   ` Hannes Reinecke
2021-05-23  8:20     ` [dm-devel] " Hannes Reinecke
2021-05-23  8:20     ` Hannes Reinecke
2021-05-23  8:20     ` Hannes Reinecke
2021-05-24  7:29     ` Christoph Hellwig
2021-05-24  7:29       ` [dm-devel] " Christoph Hellwig
2021-05-24  7:29       ` Christoph Hellwig
2021-05-24  7:29       ` Christoph Hellwig
2021-05-21  5:51 ` [PATCH 19/26] nfblock: " Christoph Hellwig
2021-05-21  5:51   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:51   ` Christoph Hellwig
2021-05-21  8:37   ` Geert Uytterhoeven
2021-05-21  8:37     ` [dm-devel] " Geert Uytterhoeven
2021-05-21  8:37     ` Geert Uytterhoeven
2021-05-21  8:37     ` Geert Uytterhoeven
2021-05-21  8:37     ` Geert Uytterhoeven
2021-05-23  8:21   ` Hannes Reinecke
2021-05-23  8:21     ` [dm-devel] " Hannes Reinecke
2021-05-23  8:21     ` Hannes Reinecke
2021-05-23  8:21     ` Hannes Reinecke
2021-05-21  5:51 ` [PATCH 20/26] simdisk: " Christoph Hellwig
2021-05-21  5:51   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:51   ` Christoph Hellwig
2021-05-23  8:22   ` Hannes Reinecke
2021-05-23  8:22     ` [dm-devel] " Hannes Reinecke
2021-05-23  8:22     ` Hannes Reinecke
2021-05-23  8:22     ` Hannes Reinecke
2021-05-21  5:51 ` [PATCH 21/26] n64cart: convert to blk_alloc_disk Christoph Hellwig
2021-05-21  5:51   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:51   ` Christoph Hellwig
2021-05-23  8:22   ` Hannes Reinecke
2021-05-23  8:22     ` [dm-devel] " Hannes Reinecke
2021-05-23  8:22     ` Hannes Reinecke
2021-05-23  8:22     ` Hannes Reinecke
2021-05-21  5:51 ` [PATCH 22/26] ps3vram: convert to blk_alloc_disk/blk_cleanup_disk Christoph Hellwig
2021-05-21  5:51   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:51   ` Christoph Hellwig
2021-05-23  8:23   ` Hannes Reinecke
2021-05-23  8:23     ` [dm-devel] " Hannes Reinecke
2021-05-23  8:23     ` Hannes Reinecke
2021-05-23  8:23     ` Hannes Reinecke
2021-05-21  5:51 ` [PATCH 23/26] dcssblk: " Christoph Hellwig
2021-05-21  5:51   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:51   ` Christoph Hellwig
2021-05-23  8:23   ` Hannes Reinecke
2021-05-23  8:23     ` [dm-devel] " Hannes Reinecke
2021-05-23  8:23     ` Hannes Reinecke
2021-05-23  8:23     ` Hannes Reinecke
2021-05-21  5:51 ` [PATCH 24/26] xpram: " Christoph Hellwig
2021-05-21  5:51   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:51   ` Christoph Hellwig
2021-05-23  8:24   ` Hannes Reinecke
2021-05-23  8:24     ` [dm-devel] " Hannes Reinecke
2021-05-23  8:24     ` Hannes Reinecke
2021-05-23  8:24     ` Hannes Reinecke
2021-05-21  5:51 ` [PATCH 25/26] null_blk: " Christoph Hellwig
2021-05-21  5:51   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:51   ` Christoph Hellwig
2021-05-23  8:25   ` Hannes Reinecke
2021-05-23  8:25     ` [dm-devel] " Hannes Reinecke
2021-05-23  8:25     ` Hannes Reinecke
2021-05-23  8:25     ` Hannes Reinecke
2021-05-21  5:51 ` [PATCH 26/26] block: unexport blk_alloc_queue Christoph Hellwig
2021-05-21  5:51   ` [dm-devel] " Christoph Hellwig
2021-05-21  5:51   ` Christoph Hellwig
2021-05-23  8:26   ` Hannes Reinecke
2021-05-23  8:26     ` [dm-devel] " Hannes Reinecke
2021-05-23  8:26     ` Hannes Reinecke
2021-05-23  8:26     ` Hannes Reinecke
2021-05-25 22:41 ` simplify gendisk and request_queue allocation for bio based drivers Ulf Hansson
2021-05-25 22:41   ` [dm-devel] " Ulf Hansson
2021-05-25 22:41   ` Ulf Hansson
2021-05-25 22:41   ` Ulf Hansson
2021-05-25 22:41   ` Ulf Hansson
2021-05-26  4:49   ` Christoph Hellwig
2021-05-26  4:49     ` [dm-devel] " Christoph Hellwig
2021-05-26  4:49     ` Christoph Hellwig
2021-05-26  4:49     ` Christoph Hellwig
2021-05-26  8:07     ` Ulf Hansson
2021-05-26  8:07       ` Ulf Hansson
2021-05-26  8:07       ` [dm-devel] " Ulf Hansson
2021-05-26  8:07       ` Ulf Hansson
2021-05-26  8:07       ` Ulf Hansson
2021-06-01 13:48 ` Jens Axboe
2021-06-01 13:48   ` [dm-devel] " Jens Axboe
2021-06-01 13:48   ` Jens Axboe

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=20210521055116.1053587-2-hch@lst.de \
    --to=hch@lst.de \
    --cc=axboe@kernel.dk \
    --cc=borntraeger@de.ibm.com \
    --cc=chris@zankel.net \
    --cc=colyli@suse.de \
    --cc=dan.j.williams@intel.com \
    --cc=dave.jiang@intel.com \
    --cc=dm-devel@redhat.com \
    --cc=drbd-dev@lists.linbit.com \
    --cc=geert@linux-m68k.org \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=jcmvbkbc@gmail.com \
    --cc=jim@jtan.com \
    --cc=josh.h.morris@us.ibm.com \
    --cc=lars.ellenberg@linbit.com \
    --cc=linux-bcache@vger.kernel.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-m68k@lists.linux-m68k.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=linux-nvme@lists.infradead.org \
    --cc=linux-raid@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=linux-xtensa@linux-xtensa.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=maximlevitsky@gmail.com \
    --cc=mb@lightnvm.io \
    --cc=minchan@kernel.org \
    --cc=ngupta@vflare.org \
    --cc=nvdimm@lists.linux.dev \
    --cc=oakad@yahoo.com \
    --cc=philipp.reisner@linbit.com \
    --cc=pjk1939@linux.ibm.com \
    --cc=snitzer@redhat.com \
    --cc=song@kernel.org \
    --cc=ulf.hansson@linaro.org \
    --cc=vishal.l.verma@intel.com \
    /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.