diff options
-rw-r--r-- | drivers/net/ethernet/hisilicon/hns/hnae.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/net/ethernet/hisilicon/hns/hnae.c b/drivers/net/ethernet/hisilicon/hns/hnae.c index c54c6fac0d1d..b6ed818f78ff 100644 --- a/drivers/net/ethernet/hisilicon/hns/hnae.c +++ b/drivers/net/ethernet/hisilicon/hns/hnae.c | |||
@@ -332,8 +332,10 @@ struct hnae_handle *hnae_get_handle(struct device *owner_dev, | |||
332 | return ERR_PTR(-ENODEV); | 332 | return ERR_PTR(-ENODEV); |
333 | 333 | ||
334 | handle = dev->ops->get_handle(dev, port_id); | 334 | handle = dev->ops->get_handle(dev, port_id); |
335 | if (IS_ERR(handle)) | 335 | if (IS_ERR(handle)) { |
336 | put_device(&dev->cls_dev); | ||
336 | return handle; | 337 | return handle; |
338 | } | ||
337 | 339 | ||
338 | handle->dev = dev; | 340 | handle->dev = dev; |
339 | handle->owner_dev = owner_dev; | 341 | handle->owner_dev = owner_dev; |
@@ -356,6 +358,8 @@ out_when_init_queue: | |||
356 | for (j = i - 1; j >= 0; j--) | 358 | for (j = i - 1; j >= 0; j--) |
357 | hnae_fini_queue(handle->qs[j]); | 359 | hnae_fini_queue(handle->qs[j]); |
358 | 360 | ||
361 | put_device(&dev->cls_dev); | ||
362 | |||
359 | return ERR_PTR(-ENOMEM); | 363 | return ERR_PTR(-ENOMEM); |
360 | } | 364 | } |
361 | EXPORT_SYMBOL(hnae_get_handle); | 365 | EXPORT_SYMBOL(hnae_get_handle); |
@@ -377,6 +381,8 @@ void hnae_put_handle(struct hnae_handle *h) | |||
377 | dev->ops->put_handle(h); | 381 | dev->ops->put_handle(h); |
378 | 382 | ||
379 | module_put(dev->owner); | 383 | module_put(dev->owner); |
384 | |||
385 | put_device(&dev->cls_dev); | ||
380 | } | 386 | } |
381 | EXPORT_SYMBOL(hnae_put_handle); | 387 | EXPORT_SYMBOL(hnae_put_handle); |
382 | 388 | ||