Patch "libnvdimm, namespace: do not delete namespace-id 0" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
libnvdimm, namespace: do not delete namespace-id 0
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
libnvdimm-namespace-do-not-delete-namespace-id-0.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
9d032f4201d39e5cf43a8709a047e481f5723fdcMon Sep 17 00:00:00 2001
From: Dan Williams <[email protected]>
Date: Wed, 25 Jan 2017 00:54:07 +0530
Subject: libnvdimm, namespace: do not delete namespace-id 0
From: Dan Williams <[email protected]>
commit 9d032f4201d39e5cf43a8709a047e481f5723fdc upstream.
Given that the naming of pmem devices changes from the pmemX form to the pmemX.Y form when namespace id is greater than 0, arrange for namespaces with id-0 to be exempt from deletion. Otherwise a simple reconfiguration of an existing namespace to a new mode results in a name change of the resulting block device:
# ndctl list --namespace=namespace1.0
{
"dev":"namespace1.0",
"mode":"raw",
"size":2147483648,
"uuid":"3dadf3dc-89b9-4b24-b20e-abc8a4707ce3",
"blockdev":"pmem1"
} # ndctl create-namespace --reconfig=namespace1.0 --mode=memory --force
{
"dev":"namespace1.1",
"mode":"memory",
"size":2111832064,
"uuid":"7b4a6341-7318-4219-a02c-fb57c0bbf613",
"blockdev":"pmem1.1"
}This change does require tooling changes to explicitly look for namespaceX.0 if the seed has already advanced to another namespace.
--- drivers/nvdimm/namespace_devs.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
drivers/nvdimm/namespace_devs.c +7 -4
@@ -962,8 +962,8 @@ static ssize_t __size_store(struct devicstruct nvdimm_drvdata *ndd;struct nd_label_id label_id;u32 flags =0 , remainder; +int rc, i, id =-1 ;u8 *uuid =NULL ; -int rc, i;if (dev->driver || ndns->claim)return -EBUSY ;
@@ -972,11 +972,13 @@ static ssize_t __size_store(struct devicstruct nd_namespace_pmem *nspm =to_nd_namespace_pmem (dev); uuid = nspm->uuid; + id = nspm->id; }else if (is_namespace_blk (dev)) {struct nd_namespace_blk *nsblk =to_nd_namespace_blk (dev); uuid = nsblk->uuid; flags =NSLABEL_FLAG_LOCAL ; + id = nsblk->id; }/*
@@ -1039,10 +1041,11 @@ static ssize_t __size_store(struct devic/* * Try to delete the namespace if we deleted all of its -* allocation, this is not the seed device for the region, and -* it is not actively claimed by a btt instance. +* allocation, this is not the seed or 0th device for the +* region, and it is not actively claimed by a btt, pfn, or dax +* instance. */ -if (val ==0 && nd_region->ns_seed != dev && !ndns->claim) +if (val ==0 && id !=0 && nd_region->ns_seed != dev && !ndns->claim)nd_device_unregister (dev,ND_ASYNC );return rc;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/libnvdimm-namespace-do-not-delete-namespace-id-0.patch queue-4.9/libnvdimm-pfn-fix-memmap-reservation-size-versus-4k-alignment.patch queue-4.9/acpi-nfit-fix-acpi_nfit_flush_probe-crash.patch