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 'dax-and-nvdimm-fixes-v6.0-final' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm

Pull NVDIMM and DAX fixes from Dan Williams:
"A recently discovered one-line fix for devdax that further addresses a
v5.5 regression, and (a bit embarrassing) a small batch of fixes that
have been sitting in my fixes tree for weeks.

The older fixes have soaked in linux-next during that time and address
an fsdax infinite loop and some other minor fixups.

- Fix a infinite loop bug in fsdax

- Fix memory-type detection for devdax (EINJ regression)

- Small cleanups"

* tag 'dax-and-nvdimm-fixes-v6.0-final' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm:
devdax: Fix soft-reservation memory description
fsdax: Fix infinite loop in dax_iomap_rw()
nvdimm/namespace: drop nested variable in create_namespace_pmem()
ndtest: Cleanup all of blk namespace specific code
pmem: fix a name collision

+7 -82
+1
drivers/dax/hmem/device.c
··· 15 15 .start = r->start, 16 16 .end = r->end, 17 17 .flags = IORESOURCE_MEM, 18 + .desc = IORES_DESC_SOFT_RESERVED, 18 19 }; 19 20 struct platform_device *pdev; 20 21 struct memregion_info info;
-2
drivers/nvdimm/namespace_devs.c
··· 1712 1712 res->flags = IORESOURCE_MEM; 1713 1713 1714 1714 for (i = 0; i < nd_region->ndr_mappings; i++) { 1715 - uuid_t uuid; 1716 - 1717 1715 nsl_get_uuid(ndd, nd_label, &uuid); 1718 1716 if (has_uuid_at_pos(nd_region, &uuid, cookie, i)) 1719 1717 continue;
+3 -3
drivers/nvdimm/pmem.c
··· 45 45 return to_nd_region(to_dev(pmem)->parent); 46 46 } 47 47 48 - static phys_addr_t to_phys(struct pmem_device *pmem, phys_addr_t offset) 48 + static phys_addr_t pmem_to_phys(struct pmem_device *pmem, phys_addr_t offset) 49 49 { 50 50 return pmem->phys_addr + offset; 51 51 } ··· 63 63 static void pmem_mkpage_present(struct pmem_device *pmem, phys_addr_t offset, 64 64 unsigned int len) 65 65 { 66 - phys_addr_t phys = to_phys(pmem, offset); 66 + phys_addr_t phys = pmem_to_phys(pmem, offset); 67 67 unsigned long pfn_start, pfn_end, pfn; 68 68 69 69 /* only pmem in the linear map supports HWPoison */ ··· 97 97 static long __pmem_clear_poison(struct pmem_device *pmem, 98 98 phys_addr_t offset, unsigned int len) 99 99 { 100 - phys_addr_t phys = to_phys(pmem, offset); 100 + phys_addr_t phys = pmem_to_phys(pmem, offset); 101 101 long cleared = nvdimm_clear_poison(to_dev(pmem), phys, len); 102 102 103 103 if (cleared > 0) {
+3
fs/dax.c
··· 1445 1445 loff_t done = 0; 1446 1446 int ret; 1447 1447 1448 + if (!iomi.len) 1449 + return 0; 1450 + 1448 1451 if (iov_iter_rw(iter) == WRITE) { 1449 1452 lockdep_assert_held_write(&iomi.inode->i_rwsem); 1450 1453 iomi.flags |= IOMAP_WRITE;
-77
tools/testing/nvdimm/test/ndtest.c
··· 134 134 }, 135 135 }; 136 136 137 - static struct ndtest_mapping region2_mapping[] = { 138 - { 139 - .dimm = 0, 140 - .position = 0, 141 - .start = 0, 142 - .size = DIMM_SIZE, 143 - }, 144 - }; 145 - 146 - static struct ndtest_mapping region3_mapping[] = { 147 - { 148 - .dimm = 1, 149 - .start = 0, 150 - .size = DIMM_SIZE, 151 - } 152 - }; 153 - 154 - static struct ndtest_mapping region4_mapping[] = { 155 - { 156 - .dimm = 2, 157 - .start = 0, 158 - .size = DIMM_SIZE, 159 - } 160 - }; 161 - 162 - static struct ndtest_mapping region5_mapping[] = { 163 - { 164 - .dimm = 3, 165 - .start = 0, 166 - .size = DIMM_SIZE, 167 - } 168 - }; 169 - 170 137 static struct ndtest_region bus0_regions[] = { 171 138 { 172 139 .type = ND_DEVICE_NAMESPACE_PMEM, ··· 148 181 .mapping = region1_mapping, 149 182 .size = DIMM_SIZE * 2, 150 183 .range_index = 2, 151 - }, 152 - { 153 - .type = ND_DEVICE_NAMESPACE_BLK, 154 - .num_mappings = ARRAY_SIZE(region2_mapping), 155 - .mapping = region2_mapping, 156 - .size = DIMM_SIZE, 157 - .range_index = 3, 158 - }, 159 - { 160 - .type = ND_DEVICE_NAMESPACE_BLK, 161 - .num_mappings = ARRAY_SIZE(region3_mapping), 162 - .mapping = region3_mapping, 163 - .size = DIMM_SIZE, 164 - .range_index = 4, 165 - }, 166 - { 167 - .type = ND_DEVICE_NAMESPACE_BLK, 168 - .num_mappings = ARRAY_SIZE(region4_mapping), 169 - .mapping = region4_mapping, 170 - .size = DIMM_SIZE, 171 - .range_index = 5, 172 - }, 173 - { 174 - .type = ND_DEVICE_NAMESPACE_BLK, 175 - .num_mappings = ARRAY_SIZE(region5_mapping), 176 - .mapping = region5_mapping, 177 - .size = DIMM_SIZE, 178 - .range_index = 6, 179 184 }, 180 185 }; 181 186 ··· 440 501 nd_set->altcookie = nd_set->cookie1; 441 502 ndr_desc->nd_set = nd_set; 442 503 443 - if (region->type == ND_DEVICE_NAMESPACE_BLK) { 444 - mappings[0].start = 0; 445 - mappings[0].size = DIMM_SIZE; 446 - mappings[0].nvdimm = p->config->dimms[ndimm].nvdimm; 447 - 448 - ndr_desc->mapping = &mappings[0]; 449 - ndr_desc->num_mappings = 1; 450 - ndr_desc->num_lanes = 1; 451 - ndbr_desc.enable = ndtest_blk_region_enable; 452 - ndbr_desc.do_io = ndtest_blk_do_io; 453 - region->region = nvdimm_blk_region_create(p->bus, ndr_desc); 454 - 455 - goto done; 456 - } 457 - 458 504 for (i = 0; i < region->num_mappings; i++) { 459 505 ndimm = region->mapping[i].dimm; 460 506 mappings[i].start = region->mapping[i].start; ··· 451 527 ndr_desc->num_mappings = region->num_mappings; 452 528 region->region = nvdimm_pmem_region_create(p->bus, ndr_desc); 453 529 454 - done: 455 530 if (!region->region) { 456 531 dev_err(&p->pdev.dev, "Error registering region %pR\n", 457 532 ndr_desc->res);