| From: Julian Wiedmann <jwi@linux.ibm.com> |
| Date: Thu, 19 Apr 2018 12:52:08 +0200 |
| Subject: s390/qeth: handle failure on workqueue creation |
| |
| commit a936b1ef37ce1e996533878f4b23944f9444dcdf upstream. |
| |
| Creating the global workqueue during driver init may fail, deal with it. |
| Also, destroy the created workqueue on any subsequent error. |
| |
| Fixes: 0f54761d167f ("qeth: Support VEPA mode") |
| Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/s390/net/qeth_core_main.c | 8 +++++++- |
| 1 file changed, 7 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/s390/net/qeth_core_main.c |
| +++ b/drivers/s390/net/qeth_core_main.c |
| @@ -5832,10 +5832,14 @@ static int __init qeth_core_init(void) |
| mutex_init(&qeth_mod_mutex); |
| |
| qeth_wq = create_singlethread_workqueue("qeth_wq"); |
| + if (!qeth_wq) { |
| + rc = -ENOMEM; |
| + goto out_err; |
| + } |
| |
| rc = qeth_register_dbf_views(); |
| if (rc) |
| - goto out_err; |
| + goto dbf_err; |
| qeth_core_root_dev = root_device_register("qeth"); |
| rc = PTR_ERR_OR_ZERO(qeth_core_root_dev); |
| if (rc) |
| @@ -5872,6 +5876,8 @@ slab_err: |
| root_device_unregister(qeth_core_root_dev); |
| register_err: |
| qeth_unregister_dbf_views(); |
| +dbf_err: |
| + destroy_workqueue(qeth_wq); |
| out_err: |
| pr_err("Initializing the qeth device driver failed\n"); |
| return rc; |