IB/qib: Correct qib_verbs_register_sysfs() error handling
qib_verbs_register_sysfs() never cleans up from a failure. Additionally, the caller of qib_verbs_register_sysfs() doesn't return the correct "ret" value. This patch resolves both of those 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
137200a4bb
commit
c9bdad3c81
|
@ -808,10 +808,14 @@ int qib_verbs_register_sysfs(struct qib_devdata *dd)
|
|||
for (i = 0; i < ARRAY_SIZE(qib_attributes); ++i) {
|
||||
ret = device_create_file(&dev->dev, qib_attributes[i]);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto bail;
|
||||
}
|
||||
|
||||
return 0;
|
||||
bail:
|
||||
for (i = 0; i < ARRAY_SIZE(qib_attributes); ++i)
|
||||
device_remove_file(&dev->dev, qib_attributes[i]);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -2234,7 +2234,8 @@ int qib_register_ib_device(struct qib_devdata *dd)
|
|||
if (ret)
|
||||
goto err_agents;
|
||||
|
||||
if (qib_verbs_register_sysfs(dd))
|
||||
ret = qib_verbs_register_sysfs(dd);
|
||||
if (ret)
|
||||
goto err_class;
|
||||
|
||||
goto bail;
|
||||
|
|
Loading…
Reference in New Issue