diff options
| author | Hemanth Selam <hemanth.selam@gmail.com> | 2026-09-11 13:55:43 +0530 |
|---|---|---|
| committer | Alison Schofield <alison.schofield@intel.com> | 2026-10-01 18:08:51 -0700 |
| commit | 855a46681e0ba601952c346e5b62d867e51ecb23 (patch) | |
| tree | 7cb37f94f24258ecf892fd7c7ba83769ab6a6cb1 /tools/perf/scripts/python | |
| parent | 72d3fcf802c45d00b300f25b848a93c3a2bd7c7e (diff) | |
| download | linux-next-855a46681e0ba601952c346e5b62d867e51ecb23.tar.gz linux-next-855a46681e0ba601952c346e5b62d867e51ecb23.zip | |
nvdimm/pmem: Release gendisk on probe failure
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 <hemanth.selam@gmail.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Link: https://patch.msgid.link/20260911082543.473670-1-hemanth.selam@gmail.com
Signed-off-by: Alison Schofield <alison.schofield@intel.com>
Diffstat (limited to 'tools/perf/scripts/python')
0 files changed, 0 insertions, 0 deletions
