diff options
author | Mike Marciniszyn <mike.marciniszyn@intel.com> | 2013-03-28 14:17:20 -0400 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2013-04-17 02:04:36 -0400 |
commit | c9bdad3c819cf63e2acea9994d2a60f23f1b7dd5 (patch) | |
tree | fa33fd93b1aa47ed904f52e0c13f36e058a19846 | |
parent | 137200a4bb74c6d3c13a8eea1edd617a15fdf3e2 (diff) |
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>
-rw-r--r-- | drivers/infiniband/hw/qib/qib_sysfs.c | 6 | ||||
-rw-r--r-- | drivers/infiniband/hw/qib/qib_verbs.c | 3 |
2 files changed, 7 insertions, 2 deletions
diff --git a/drivers/infiniband/hw/qib/qib_sysfs.c b/drivers/infiniband/hw/qib/qib_sysfs.c index 034cc821de5c..3c8e4e3caca6 100644 --- a/drivers/infiniband/hw/qib/qib_sysfs.c +++ b/drivers/infiniband/hw/qib/qib_sysfs.c | |||
@@ -808,10 +808,14 @@ int qib_verbs_register_sysfs(struct qib_devdata *dd) | |||
808 | for (i = 0; i < ARRAY_SIZE(qib_attributes); ++i) { | 808 | for (i = 0; i < ARRAY_SIZE(qib_attributes); ++i) { |
809 | ret = device_create_file(&dev->dev, qib_attributes[i]); | 809 | ret = device_create_file(&dev->dev, qib_attributes[i]); |
810 | if (ret) | 810 | if (ret) |
811 | return ret; | 811 | goto bail; |
812 | } | 812 | } |
813 | 813 | ||
814 | return 0; | 814 | return 0; |
815 | bail: | ||
816 | for (i = 0; i < ARRAY_SIZE(qib_attributes); ++i) | ||
817 | device_remove_file(&dev->dev, qib_attributes[i]); | ||
818 | return ret; | ||
815 | } | 819 | } |
816 | 820 | ||
817 | /* | 821 | /* |
diff --git a/drivers/infiniband/hw/qib/qib_verbs.c b/drivers/infiniband/hw/qib/qib_verbs.c index 7c0ab16a2fe2..904c384aa361 100644 --- a/drivers/infiniband/hw/qib/qib_verbs.c +++ b/drivers/infiniband/hw/qib/qib_verbs.c | |||
@@ -2234,7 +2234,8 @@ int qib_register_ib_device(struct qib_devdata *dd) | |||
2234 | if (ret) | 2234 | if (ret) |
2235 | goto err_agents; | 2235 | goto err_agents; |
2236 | 2236 | ||
2237 | if (qib_verbs_register_sysfs(dd)) | 2237 | ret = qib_verbs_register_sysfs(dd); |
2238 | if (ret) | ||
2238 | goto err_class; | 2239 | goto err_class; |
2239 | 2240 | ||
2240 | goto bail; | 2241 | goto bail; |