[v2] libnvdimm/region: Initialize bad block for volatile namespaces
diff mbox series

Message ID 20190917152544.11216-1-aneesh.kumar@linux.ibm.com
State Superseded
Headers show
Series
  • [v2] libnvdimm/region: Initialize bad block for volatile namespaces
Related show

Commit Message

Aneesh Kumar K.V Sept. 17, 2019, 3:25 p.m. UTC
We do check for a bad block during namespace init and that use
region bad block list. We need to initialize the bad block
for volatile regions for this to work. We also observe a lockdep
warning as below because the lock is not initialized correctly
since we skip bad block init for volatile regions.

 INFO: trying to register non-static key.
 the code is fine but needs lockdep annotation.
 turning off the locking correctness validator.
 CPU: 2 PID: 1 Comm: swapper/0 Not tainted 5.3.0-rc1-15699-g3dee241c937e #149
 Call Trace:
 [c0000000f95cb250] [c00000000147dd84] dump_stack+0xe8/0x164 (unreliable)
 [c0000000f95cb2a0] [c00000000022ccd8] register_lock_class+0x308/0xa60
 [c0000000f95cb3a0] [c000000000229cc0] __lock_acquire+0x170/0x1ff0
 [c0000000f95cb4c0] [c00000000022c740] lock_acquire+0x220/0x270
 [c0000000f95cb580] [c000000000a93230] badblocks_check+0xc0/0x290
 [c0000000f95cb5f0] [c000000000d97540] nd_pfn_validate+0x5c0/0x7f0
 [c0000000f95cb6d0] [c000000000d98300] nd_dax_probe+0xd0/0x1f0
 [c0000000f95cb760] [c000000000d9b66c] nd_pmem_probe+0x10c/0x160
 [c0000000f95cb790] [c000000000d7f5ec] nvdimm_bus_probe+0x10c/0x240
 [c0000000f95cb820] [c000000000d0f844] really_probe+0x254/0x4e0
 [c0000000f95cb8b0] [c000000000d0fdfc] driver_probe_device+0x16c/0x1e0
 [c0000000f95cb930] [c000000000d10238] device_driver_attach+0x68/0xa0
 [c0000000f95cb970] [c000000000d1040c] __driver_attach+0x19c/0x1c0
 [c0000000f95cb9f0] [c000000000d0c4c4] bus_for_each_dev+0x94/0x130
 [c0000000f95cba50] [c000000000d0f014] driver_attach+0x34/0x50
 [c0000000f95cba70] [c000000000d0e208] bus_add_driver+0x178/0x2f0
 [c0000000f95cbb00] [c000000000d117c8] driver_register+0x108/0x170
 [c0000000f95cbb70] [c000000000d7edb0] __nd_driver_register+0xe0/0x100
 [c0000000f95cbbd0] [c000000001a6baa4] nd_pmem_driver_init+0x34/0x48
 [c0000000f95cbbf0] [c0000000000106f4] do_one_initcall+0x1d4/0x4b0
 [c0000000f95cbcd0] [c0000000019f499c] kernel_init_freeable+0x544/0x65c
 [c0000000f95cbdb0] [c000000000010d6c] kernel_init+0x2c/0x180
 [c0000000f95cbe20] [c00000000000b954] ret_from_kernel_thread+0x5c/0x68

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
---
Changes from V1:
* update commit subject

 drivers/nvdimm/region.c      | 4 ++--
 drivers/nvdimm/region_devs.c | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

Comments

Dan Williams Sept. 18, 2019, 10:35 p.m. UTC | #1
On Tue, Sep 17, 2019 at 8:25 AM Aneesh Kumar K.V
<aneesh.kumar@linux.ibm.com> wrote:
>
> We do check for a bad block during namespace init and that use
> region bad block list. We need to initialize the bad block
> for volatile regions for this to work. We also observe a lockdep
> warning as below because the lock is not initialized correctly
> since we skip bad block init for volatile regions.
>
>  INFO: trying to register non-static key.
>  the code is fine but needs lockdep annotation.
>  turning off the locking correctness validator.
>  CPU: 2 PID: 1 Comm: swapper/0 Not tainted 5.3.0-rc1-15699-g3dee241c937e #149
>  Call Trace:
>  [c0000000f95cb250] [c00000000147dd84] dump_stack+0xe8/0x164 (unreliable)
>  [c0000000f95cb2a0] [c00000000022ccd8] register_lock_class+0x308/0xa60
>  [c0000000f95cb3a0] [c000000000229cc0] __lock_acquire+0x170/0x1ff0
>  [c0000000f95cb4c0] [c00000000022c740] lock_acquire+0x220/0x270
>  [c0000000f95cb580] [c000000000a93230] badblocks_check+0xc0/0x290
>  [c0000000f95cb5f0] [c000000000d97540] nd_pfn_validate+0x5c0/0x7f0
>  [c0000000f95cb6d0] [c000000000d98300] nd_dax_probe+0xd0/0x1f0
>  [c0000000f95cb760] [c000000000d9b66c] nd_pmem_probe+0x10c/0x160
>  [c0000000f95cb790] [c000000000d7f5ec] nvdimm_bus_probe+0x10c/0x240
>  [c0000000f95cb820] [c000000000d0f844] really_probe+0x254/0x4e0
>  [c0000000f95cb8b0] [c000000000d0fdfc] driver_probe_device+0x16c/0x1e0
>  [c0000000f95cb930] [c000000000d10238] device_driver_attach+0x68/0xa0
>  [c0000000f95cb970] [c000000000d1040c] __driver_attach+0x19c/0x1c0
>  [c0000000f95cb9f0] [c000000000d0c4c4] bus_for_each_dev+0x94/0x130
>  [c0000000f95cba50] [c000000000d0f014] driver_attach+0x34/0x50
>  [c0000000f95cba70] [c000000000d0e208] bus_add_driver+0x178/0x2f0
>  [c0000000f95cbb00] [c000000000d117c8] driver_register+0x108/0x170
>  [c0000000f95cbb70] [c000000000d7edb0] __nd_driver_register+0xe0/0x100
>  [c0000000f95cbbd0] [c000000001a6baa4] nd_pmem_driver_init+0x34/0x48
>  [c0000000f95cbbf0] [c0000000000106f4] do_one_initcall+0x1d4/0x4b0
>  [c0000000f95cbcd0] [c0000000019f499c] kernel_init_freeable+0x544/0x65c
>  [c0000000f95cbdb0] [c000000000010d6c] kernel_init+0x2c/0x180
>  [c0000000f95cbe20] [c00000000000b954] ret_from_kernel_thread+0x5c/0x68
>
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
> ---
> Changes from V1:
> * update commit subject

What about the is_nd_pmem() call in nvdimm_clear_badblocks_region()?
Aneesh Kumar K.V Sept. 19, 2019, 3:49 a.m. UTC | #2
On 9/19/19 4:05 AM, Dan Williams wrote:
> On Tue, Sep 17, 2019 at 8:25 AM Aneesh Kumar K.V
> <aneesh.kumar@linux.ibm.com> wrote:
>>
>> We do check for a bad block during namespace init and that use
>> region bad block list. We need to initialize the bad block
>> for volatile regions for this to work. We also observe a lockdep
>> warning as below because the lock is not initialized correctly
>> since we skip bad block init for volatile regions.
>>
>>   INFO: trying to register non-static key.
>>   the code is fine but needs lockdep annotation.
>>   turning off the locking correctness validator.
>>   CPU: 2 PID: 1 Comm: swapper/0 Not tainted 5.3.0-rc1-15699-g3dee241c937e #149
>>   Call Trace:
>>   [c0000000f95cb250] [c00000000147dd84] dump_stack+0xe8/0x164 (unreliable)
>>   [c0000000f95cb2a0] [c00000000022ccd8] register_lock_class+0x308/0xa60
>>   [c0000000f95cb3a0] [c000000000229cc0] __lock_acquire+0x170/0x1ff0
>>   [c0000000f95cb4c0] [c00000000022c740] lock_acquire+0x220/0x270
>>   [c0000000f95cb580] [c000000000a93230] badblocks_check+0xc0/0x290
>>   [c0000000f95cb5f0] [c000000000d97540] nd_pfn_validate+0x5c0/0x7f0
>>   [c0000000f95cb6d0] [c000000000d98300] nd_dax_probe+0xd0/0x1f0
>>   [c0000000f95cb760] [c000000000d9b66c] nd_pmem_probe+0x10c/0x160
>>   [c0000000f95cb790] [c000000000d7f5ec] nvdimm_bus_probe+0x10c/0x240
>>   [c0000000f95cb820] [c000000000d0f844] really_probe+0x254/0x4e0
>>   [c0000000f95cb8b0] [c000000000d0fdfc] driver_probe_device+0x16c/0x1e0
>>   [c0000000f95cb930] [c000000000d10238] device_driver_attach+0x68/0xa0
>>   [c0000000f95cb970] [c000000000d1040c] __driver_attach+0x19c/0x1c0
>>   [c0000000f95cb9f0] [c000000000d0c4c4] bus_for_each_dev+0x94/0x130
>>   [c0000000f95cba50] [c000000000d0f014] driver_attach+0x34/0x50
>>   [c0000000f95cba70] [c000000000d0e208] bus_add_driver+0x178/0x2f0
>>   [c0000000f95cbb00] [c000000000d117c8] driver_register+0x108/0x170
>>   [c0000000f95cbb70] [c000000000d7edb0] __nd_driver_register+0xe0/0x100
>>   [c0000000f95cbbd0] [c000000001a6baa4] nd_pmem_driver_init+0x34/0x48
>>   [c0000000f95cbbf0] [c0000000000106f4] do_one_initcall+0x1d4/0x4b0
>>   [c0000000f95cbcd0] [c0000000019f499c] kernel_init_freeable+0x544/0x65c
>>   [c0000000f95cbdb0] [c000000000010d6c] kernel_init+0x2c/0x180
>>   [c0000000f95cbe20] [c00000000000b954] ret_from_kernel_thread+0x5c/0x68
>>
>> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
>> ---
>> Changes from V1:
>> * update commit subject
> 
> What about the is_nd_pmem() call in nvdimm_clear_badblocks_region()?
> 

Missed that. Yes that also needs an updatet. Will you be able to update 
that or you want me to send a V3?

-aneesh
Dan Williams Sept. 19, 2019, 6:39 a.m. UTC | #3
On Wed, Sep 18, 2019, 8:49 PM Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
wrote:

> On 9/19/19 4:05 AM, Dan Williams wrote:
> > On Tue, Sep 17, 2019 at 8:25 AM Aneesh Kumar K.V
> > <aneesh.kumar@linux.ibm.com> wrote:
> >>
> >> We do check for a bad block during namespace init and that use
> >> region bad block list. We need to initialize the bad block
> >> for volatile regions for this to work. We also observe a lockdep
> >> warning as below because the lock is not initialized correctly
> >> since we skip bad block init for volatile regions.
> >>
> >>   INFO: trying to register non-static key.
> >>   the code is fine but needs lockdep annotation.
> >>   turning off the locking correctness validator.
> >>   CPU: 2 PID: 1 Comm: swapper/0 Not tainted
> 5.3.0-rc1-15699-g3dee241c937e #149
> >>   Call Trace:
> >>   [c0000000f95cb250] [c00000000147dd84] dump_stack+0xe8/0x164
> (unreliable)
> >>   [c0000000f95cb2a0] [c00000000022ccd8] register_lock_class+0x308/0xa60
> >>   [c0000000f95cb3a0] [c000000000229cc0] __lock_acquire+0x170/0x1ff0
> >>   [c0000000f95cb4c0] [c00000000022c740] lock_acquire+0x220/0x270
> >>   [c0000000f95cb580] [c000000000a93230] badblocks_check+0xc0/0x290
> >>   [c0000000f95cb5f0] [c000000000d97540] nd_pfn_validate+0x5c0/0x7f0
> >>   [c0000000f95cb6d0] [c000000000d98300] nd_dax_probe+0xd0/0x1f0
> >>   [c0000000f95cb760] [c000000000d9b66c] nd_pmem_probe+0x10c/0x160
> >>   [c0000000f95cb790] [c000000000d7f5ec] nvdimm_bus_probe+0x10c/0x240
> >>   [c0000000f95cb820] [c000000000d0f844] really_probe+0x254/0x4e0
> >>   [c0000000f95cb8b0] [c000000000d0fdfc] driver_probe_device+0x16c/0x1e0
> >>   [c0000000f95cb930] [c000000000d10238] device_driver_attach+0x68/0xa0
> >>   [c0000000f95cb970] [c000000000d1040c] __driver_attach+0x19c/0x1c0
> >>   [c0000000f95cb9f0] [c000000000d0c4c4] bus_for_each_dev+0x94/0x130
> >>   [c0000000f95cba50] [c000000000d0f014] driver_attach+0x34/0x50
> >>   [c0000000f95cba70] [c000000000d0e208] bus_add_driver+0x178/0x2f0
> >>   [c0000000f95cbb00] [c000000000d117c8] driver_register+0x108/0x170
> >>   [c0000000f95cbb70] [c000000000d7edb0] __nd_driver_register+0xe0/0x100
> >>   [c0000000f95cbbd0] [c000000001a6baa4] nd_pmem_driver_init+0x34/0x48
> >>   [c0000000f95cbbf0] [c0000000000106f4] do_one_initcall+0x1d4/0x4b0
> >>   [c0000000f95cbcd0] [c0000000019f499c] kernel_init_freeable+0x544/0x65c
> >>   [c0000000f95cbdb0] [c000000000010d6c] kernel_init+0x2c/0x180
> >>   [c0000000f95cbe20] [c00000000000b954] ret_from_kernel_thread+0x5c/0x68
> >>
> >> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
> >> ---
> >> Changes from V1:
> >> * update commit subject
> >
> > What about the is_nd_pmem() call in nvdimm_clear_badblocks_region()?
> >
>
> Missed that. Yes that also needs an updatet. Will you be able to update
> that or you want me to send a V3?
>

v3 please so it will get superseded in patchwork, and can keep the
correlation between patchwork id and kernel commit.

(sent from my phone, forgive the HTML mail)

Patch
diff mbox series

diff --git a/drivers/nvdimm/region.c b/drivers/nvdimm/region.c
index 37bf8719a2a4..0f6978e72e7c 100644
--- a/drivers/nvdimm/region.c
+++ b/drivers/nvdimm/region.c
@@ -34,7 +34,7 @@  static int nd_region_probe(struct device *dev)
 	if (rc)
 		return rc;
 
-	if (is_nd_pmem(&nd_region->dev)) {
+	if (is_memory(&nd_region->dev)) {
 		struct resource ndr_res;
 
 		if (devm_init_badblocks(dev, &nd_region->bb))
@@ -123,7 +123,7 @@  static void nd_region_notify(struct device *dev, enum nvdimm_event event)
 		struct nd_region *nd_region = to_nd_region(dev);
 		struct resource res;
 
-		if (is_nd_pmem(&nd_region->dev)) {
+		if (is_memory(&nd_region->dev)) {
 			res.start = nd_region->ndr_start;
 			res.end = nd_region->ndr_start +
 				nd_region->ndr_size - 1;
diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c
index 9550202aa7be..f462b1354ab5 100644
--- a/drivers/nvdimm/region_devs.c
+++ b/drivers/nvdimm/region_devs.c
@@ -632,7 +632,7 @@  static umode_t region_visible(struct kobject *kobj, struct attribute *a, int n)
 	if (!is_memory(dev) && a == &dev_attr_dax_seed.attr)
 		return 0;
 
-	if (!is_nd_pmem(dev) && a == &dev_attr_badblocks.attr)
+	if (!is_memory(dev) && a == &dev_attr_badblocks.attr)
 		return 0;
 
 	if (a == &dev_attr_resource.attr) {