Re: [PATCH 1/3] pmem: Initial version of persistent memory driver

From: Ross Zwisler
Date: Mon May 04 2015 - 12:44:11 EST


On Thu, 2015-03-26 at 09:06 +0100, Christoph Hellwig wrote:
> On Wed, Mar 25, 2015 at 02:21:53PM -0600, Ross Zwisler wrote:
> > What needed to be fixed with the partition support? I used to have real
> > numbers for first_minor and passed into alloc_disk(), but simplified it based
> > on code found in this commit in the nvme driver:
> >
> > 469071a37afc NVMe: Dynamically allocate partition numbers
> >
> > This has worked fine for me - is there some test case in which it breaks?
>
> Yes, if CONFIG_DEBUG_BLOCK_EXT_DEVT isn't set that code doesn't work at all.

I can't figure out a use case that breaks when using dynamically allocated
minors without CONFIG_DEBUG_BLOCK_EXT_DEVT. The patch that I've been testing
against is at the bottom of this mail.

Here are the minors that I get when creating a bunch of partitions using the
current code with PMEM_MINORS=16, with CONFIG_DEBUG_BLOCK_EXT_DEVT turned off:

pmem0 249:0 0 63.5G 0 rom
ââpmem0p1 249:1 0 1G 0 part
ââpmem0p2 249:2 0 1G 0 part
ââpmem0p3 249:3 0 1G 0 part
ââpmem0p4 249:4 0 1G 0 part
ââpmem0p5 249:5 0 1G 0 part
ââpmem0p6 249:6 0 1G 0 part
ââpmem0p7 249:7 0 1G 0 part
ââpmem0p8 249:8 0 1G 0 part
ââpmem0p9 249:9 0 1G 0 part
ââpmem0p10 249:10 0 1G 0 part
ââpmem0p11 249:11 0 1G 0 part
ââpmem0p12 249:12 0 1G 0 part
ââpmem0p13 249:13 0 1G 0 part
ââpmem0p14 249:14 0 1G 0 part
ââpmem0p15 249:15 0 1G 0 part
ââpmem0p16 259:0 0 1G 0 part
ââpmem0p17 259:1 0 1G 0 part
ââpmem0p18 259:2 0 1G 0 part

With dynamic minor allocation, with CONFIG_DEBUG_BLOCK_EXT_DEVT turned off:

pmem0 259:0 0 63.5G 0 rom
ââpmem0p1 259:1 0 1G 0 part
ââpmem0p2 259:2 0 1G 0 part
ââpmem0p3 259:3 0 1G 0 part
ââpmem0p4 259:4 0 1G 0 part
ââpmem0p5 259:5 0 1G 0 part
ââpmem0p6 259:6 0 1G 0 part
ââpmem0p7 259:7 0 1G 0 part
ââpmem0p8 259:8 0 1G 0 part
ââpmem0p9 259:9 0 1G 0 part
ââpmem0p10 259:10 0 1G 0 part
ââpmem0p11 259:11 0 1G 0 part
ââpmem0p12 259:12 0 1G 0 part
ââpmem0p13 259:13 0 1G 0 part
ââpmem0p14 259:14 0 1G 0 part
ââpmem0p15 259:15 0 1G 0 part
ââpmem0p16 259:16 0 1G 0 part
ââpmem0p17 259:17 0 1G 0 part
ââpmem0p18 259:18 0 1G 0 part

And with CONFIG_DEBUG_BLOCK_EXT_DEVT turned on:

pmem0 259:262144 0 63.5G 0 rom
ââpmem0p1 259:786432 0 1G 0 part
ââpmem0p2 259:131072 0 1G 0 part
ââpmem0p3 259:655360 0 1G 0 part
ââpmem0p4 259:393216 0 1G 0 part
ââpmem0p5 259:917504 0 1G 0 part
ââpmem0p6 259:65536 0 1G 0 part
ââpmem0p7 259:589824 0 1G 0 part
ââpmem0p8 259:327680 0 1G 0 part
ââpmem0p9 259:851968 0 1G 0 part
ââpmem0p10 259:196608 0 1G 0 part
ââpmem0p11 259:720896 0 1G 0 part
ââpmem0p12 259:458752 0 1G 0 part
ââpmem0p13 259:983040 0 1G 0 part
ââpmem0p14 259:32768 0 1G 0 part
ââpmem0p15 259:557056 0 1G 0 part
ââpmem0p16 259:294912 0 1G 0 part
ââpmem0p17 259:819200 0 1G 0 part
ââpmem0p18 259:163840 0 1G 0 part

With CONFIG_DEBUG_BLOCK_EXT_DEVT the minors are all mangled due to
blk_mangle_minor(), but I think that all three configs work?

Was there maybe confusion between that config option and the GENHD_FL_EXT_DEVT
gendisk flag, which AFAIK are independent?

Is there a use case that breaks when using dynamic minors without
CONFIG_DEBUG_BLOCK_EXT_DEVT?

Thanks,
- Ross

--- >8 ---