forked from luck/tmp_suning_uos_patched
libnvdimm/namsepace: Don't set claim_class on error
Don't leave claim_class set to an invalid value if an error occurs in btt_claim_class(). While we are here change the return type of __holder_class_store() to be clear about the values it is returning. This was found via code inspection. Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Reviewed-by: Vishal Verma <vishal.l.verma@intel.com> Signed-off-by: Ira Weiny <ira.weiny@intel.com> Link: https://lore.kernel.org/r/20190925211348.14082-1-ira.weiny@intel.com Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
d6d5df1db6
commit
ab84b77afc
|
@ -1510,16 +1510,20 @@ static ssize_t holder_show(struct device *dev,
|
|||
}
|
||||
static DEVICE_ATTR_RO(holder);
|
||||
|
||||
static ssize_t __holder_class_store(struct device *dev, const char *buf)
|
||||
static int __holder_class_store(struct device *dev, const char *buf)
|
||||
{
|
||||
struct nd_namespace_common *ndns = to_ndns(dev);
|
||||
|
||||
if (dev->driver || ndns->claim)
|
||||
return -EBUSY;
|
||||
|
||||
if (sysfs_streq(buf, "btt"))
|
||||
ndns->claim_class = btt_claim_class(dev);
|
||||
else if (sysfs_streq(buf, "pfn"))
|
||||
if (sysfs_streq(buf, "btt")) {
|
||||
int rc = btt_claim_class(dev);
|
||||
|
||||
if (rc < NVDIMM_CCLASS_NONE)
|
||||
return rc;
|
||||
ndns->claim_class = rc;
|
||||
} else if (sysfs_streq(buf, "pfn"))
|
||||
ndns->claim_class = NVDIMM_CCLASS_PFN;
|
||||
else if (sysfs_streq(buf, "dax"))
|
||||
ndns->claim_class = NVDIMM_CCLASS_DAX;
|
||||
|
@ -1528,10 +1532,6 @@ static ssize_t __holder_class_store(struct device *dev, const char *buf)
|
|||
else
|
||||
return -EINVAL;
|
||||
|
||||
/* btt_claim_class() could've returned an error */
|
||||
if (ndns->claim_class < 0)
|
||||
return ndns->claim_class;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1539,7 +1539,7 @@ static ssize_t holder_class_store(struct device *dev,
|
|||
struct device_attribute *attr, const char *buf, size_t len)
|
||||
{
|
||||
struct nd_region *nd_region = to_nd_region(dev->parent);
|
||||
ssize_t rc;
|
||||
int rc;
|
||||
|
||||
nd_device_lock(dev);
|
||||
nvdimm_bus_lock(dev);
|
||||
|
@ -1547,7 +1547,7 @@ static ssize_t holder_class_store(struct device *dev,
|
|||
rc = __holder_class_store(dev, buf);
|
||||
if (rc >= 0)
|
||||
rc = nd_namespace_label_update(nd_region, dev);
|
||||
dev_dbg(dev, "%s(%zd)\n", rc < 0 ? "fail " : "", rc);
|
||||
dev_dbg(dev, "%s(%d)\n", rc < 0 ? "fail " : "", rc);
|
||||
nvdimm_bus_unlock(dev);
|
||||
nd_device_unlock(dev);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user