IB/ipath: Correct ipath_verbs_register_sysfs() error handling
ipath_verbs_register_sysfs() never returned the correct error code from device_create_file and never cleaned up from a failure. Additionally, the caller of ipath_verbs_register_sysfs() doesn't return the correct "ret" value. This patch resolves all of these issues. Reported-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn> Reviewed-by: Dean Luick <dean.luick@intel.com> Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
parent
41ef2d5678
commit
137200a4bb
|
@ -2187,7 +2187,8 @@ int ipath_register_ib_device(struct ipath_devdata *dd)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_reg;
|
goto err_reg;
|
||||||
|
|
||||||
if (ipath_verbs_register_sysfs(dev))
|
ret = ipath_verbs_register_sysfs(dev);
|
||||||
|
if (ret)
|
||||||
goto err_class;
|
goto err_class;
|
||||||
|
|
||||||
enable_timer(dd);
|
enable_timer(dd);
|
||||||
|
@ -2327,15 +2328,15 @@ static int ipath_verbs_register_sysfs(struct ib_device *dev)
|
||||||
int i;
|
int i;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(ipath_class_attributes); ++i)
|
for (i = 0; i < ARRAY_SIZE(ipath_class_attributes); ++i) {
|
||||||
if (device_create_file(&dev->dev,
|
ret = device_create_file(&dev->dev,
|
||||||
ipath_class_attributes[i])) {
|
ipath_class_attributes[i]);
|
||||||
ret = 1;
|
if (ret)
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
ret = 0;
|
|
||||||
|
|
||||||
bail:
|
bail:
|
||||||
|
for (i = 0; i < ARRAY_SIZE(ipath_class_attributes); ++i)
|
||||||
|
device_remove_file(&dev->dev, ipath_class_attributes[i]);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue