• Dan Williams's avatar
    libnvdimm/namespace: Fix reaping of invalidated block-window-namespace labels · 2dd2a174
    Dan Williams authored
    A recent change to ndctl to attempt to reconfigure namespaces in place
    uncovered a label accounting problem in block-window-type namespaces.
    The ndctl "create.sh" test is able to trigger this signature:
    
     WARNING: CPU: 34 PID: 9167 at drivers/nvdimm/label.c:1100 __blk_label_update+0x9a3/0xbc0 [libnvdimm]
     [..]
     RIP: 0010:__blk_label_update+0x9a3/0xbc0 [libnvdimm]
     [..]
     Call Trace:
      uuid_store+0x21b/0x2f0 [libnvdimm]
      kernfs_fop_write+0xcf/0x1c0
      vfs_write+0xcc/0x380
      ksys_write+0x68/0xe0
    
    When allocated capacity for a namespace is renamed (new UUID) the labels
    with the old UUID need to be deleted. The ndctl behavior to always
    destroy namespaces on reconfiguration hid this problem.
    
    The immediate impact of this bug is limited since block-window-type
    namespaces only seem to exist in the specification and not in any
    shipping products. However, the label handling code is being reused for
    other technologies like CXL region labels, so there is a benefit to
    making sure both vertical labels sets (block-window) and horizontal
    label sets (pmem) have a functional reference implementation in
    libnvdimm.
    
    Fixes: c4703ce1 ("libnvdimm/namespace: Fix label tracking error")
    Cc: <stable@vger.kernel.org>
    Cc: Vishal Verma <vishal.l.verma@intel.com>
    Cc: Dave Jiang <dave.jiang@intel.com>
    Cc: Ira Weiny <ira.weiny@intel.com>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    2dd2a174
label.c 35.5 KB