Le 02/10/2026 à 03:40, Alison Schofield a écrit :
On Fri, Sep 11, 2026 at 01:55:43PM +0530, Hemanth Selam wrote:
pmem_attach_disk() allocates the gendisk with blk_alloc_disk() and hands
it to devres only once device_add_disk() has succeeded.  Until that
point the probe path owns the disk itself, which is why every failure
after the allocation jumps to the out: label and puts it there.

The devm_init_badblocks() failure returns directly instead, so the disk
allocated a few lines earlier is never released.  Nothing releases it
afterwards either: the devres action that would have done so has not
been registered yet, so unbinding the namespace or destroying it does
not reach the disk, and it stays allocated along with its queue and its
bdev inode until the machine is rebooted.

devm_init_badblocks() only fails when a single page allocation fails, so
reaching this at all needs memory exhaustion during namespace probe, and
because device_add_disk() has not run there is nothing user visible left
behind: no device node, no sysfs entry, only the leaked memory.

Release the gendisk through the existing cleanup path on this failure.

Fixes: 3dd60fb9d95d ("nvdimm/pmem: stop using q_usage_count as external pgmap 
refcount")
Signed-off-by: Hemanth Selam <[email protected]>


Applied to libnvdimm-for-next:
https://git.kernel.org/nvdimm/nvdimm/c/855a46681e0b

Hi,

For the records and if it sounds better patch, see [1] which propagates the error code from devm_init_badblocks() instead of hard-coding a -ENOMEM;

CJ

[1]: https://lore.kernel.org/lkml/f1933a01d9cefe24970ee93d741babb8fe9c1b32.1636219557.git.christophe.jail...@wanadoo.fr/

Reply via email to