• Robert Elliott's avatar
    linvdimm, pmem: Preserve read-only setting for pmem devices · 254a4cd5
    Robert Elliott authored
    The pmem driver does not honor a forced read-only setting for very long:
    	$ blockdev --setro /dev/pmem0
    	$ blockdev --getro /dev/pmem0
    	1
    
    followed by various commands like these:
    	$ blockdev --rereadpt /dev/pmem0
    	or
    	$ mkfs.ext4 /dev/pmem0
    
    results in this in the kernel serial log:
    	 nd_pmem namespace0.0: region0 read-write, marking pmem0 read-write
    
    with the read-only setting lost:
    	$ blockdev --getro /dev/pmem0
    	0
    
    That's from bus.c nvdimm_revalidate_disk(), which always applies the
    setting from nd_region (which is initially based on the ACPI NFIT
    NVDIMM state flags not_armed bit).
    
    In contrast, commit 20bd1d02 ("scsi: sd: Keep disk read-only when
    re-reading partition") fixed this issue for SCSI devices to preserve
    the previous setting if it was set to read-only.
    
    This patch modifies bus.c to preserve any previous read-only setting.
    It also eliminates the kernel serial log print except for cases where
    read-write is changed to read-only, so it doesn't print read-only to
    read-only non-changes.
    
    Cc: <stable@vger.kernel.org>
    Fixes: 58138820 ("libnvdimm, nfit: handle unarmed dimms, mark namespaces read-only")
    Signed-off-by: default avatarRobert Elliott <elliott@hpe.com>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    254a4cd5
bus.c 28.2 KB