Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'libnvdimm-fixes-5.15-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm

Pull libnvdimm fix from Dan Williams:

- Fix a regression introduced in v5.15-rc6 that caused nvdimm namespace
shutdown to hang due to reworks in the block layer q_usage_count.

* tag 'libnvdimm-fixes-5.15-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm:
nvdimm/pmem: stop using q_usage_count as external pgmap refcount

+2 -31
+2 -31
drivers/nvdimm/pmem.c
··· 333 333 NULL, 334 334 }; 335 335 336 - static void pmem_pagemap_cleanup(struct dev_pagemap *pgmap) 337 - { 338 - struct pmem_device *pmem = pgmap->owner; 339 - 340 - blk_cleanup_disk(pmem->disk); 341 - } 342 - 343 - static void pmem_release_queue(void *pgmap) 344 - { 345 - pmem_pagemap_cleanup(pgmap); 346 - } 347 - 348 - static void pmem_pagemap_kill(struct dev_pagemap *pgmap) 349 - { 350 - struct request_queue *q = 351 - container_of(pgmap->ref, struct request_queue, q_usage_counter); 352 - 353 - blk_freeze_queue_start(q); 354 - } 355 - 356 336 static void pmem_release_disk(void *__pmem) 357 337 { 358 338 struct pmem_device *pmem = __pmem; ··· 340 360 kill_dax(pmem->dax_dev); 341 361 put_dax(pmem->dax_dev); 342 362 del_gendisk(pmem->disk); 343 - } 344 363 345 - static const struct dev_pagemap_ops fsdax_pagemap_ops = { 346 - .kill = pmem_pagemap_kill, 347 - .cleanup = pmem_pagemap_cleanup, 348 - }; 364 + blk_cleanup_disk(pmem->disk); 365 + } 349 366 350 367 static int pmem_attach_disk(struct device *dev, 351 368 struct nd_namespace_common *ndns) ··· 404 427 pmem->disk = disk; 405 428 pmem->pgmap.owner = pmem; 406 429 pmem->pfn_flags = PFN_DEV; 407 - pmem->pgmap.ref = &q->q_usage_counter; 408 430 if (is_nd_pfn(dev)) { 409 431 pmem->pgmap.type = MEMORY_DEVICE_FS_DAX; 410 - pmem->pgmap.ops = &fsdax_pagemap_ops; 411 432 addr = devm_memremap_pages(dev, &pmem->pgmap); 412 433 pfn_sb = nd_pfn->pfn_sb; 413 434 pmem->data_offset = le64_to_cpu(pfn_sb->dataoff); ··· 419 444 pmem->pgmap.range.end = res->end; 420 445 pmem->pgmap.nr_range = 1; 421 446 pmem->pgmap.type = MEMORY_DEVICE_FS_DAX; 422 - pmem->pgmap.ops = &fsdax_pagemap_ops; 423 447 addr = devm_memremap_pages(dev, &pmem->pgmap); 424 448 pmem->pfn_flags |= PFN_MAP; 425 449 bb_range = pmem->pgmap.range; 426 450 } else { 427 451 addr = devm_memremap(dev, pmem->phys_addr, 428 452 pmem->size, ARCH_MEMREMAP_PMEM); 429 - if (devm_add_action_or_reset(dev, pmem_release_queue, 430 - &pmem->pgmap)) 431 - return -ENOMEM; 432 453 bb_range.start = res->start; 433 454 bb_range.end = res->end; 434 455 }