diff options
author | Sakari Ailus <sakari.ailus@linux.intel.com> | 2023-04-17 16:09:27 +0200 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@kernel.org> | 2023-07-28 10:45:12 +0200 |
commit | ed59bbe18df09e654ffb18f791f2b47ff59384b1 (patch) | |
tree | e680ceaf17091b41c59d04b355ca420eaec1e80e | |
parent | adb2dcd5f2d49d3ba3171160fabd4be0d4b2a86c (diff) | |
download | linux-ed59bbe18df09e654ffb18f791f2b47ff59384b1.tar.gz linux-ed59bbe18df09e654ffb18f791f2b47ff59384b1.tar.bz2 linux-ed59bbe18df09e654ffb18f791f2b47ff59384b1.zip |
media: v4l: async: Clean up error handling in v4l2_async_match_notify
Add labels for error handling instead of doing it all in individual cases.
Prepare for more functionality in this function.
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Tested-by: Philipp Zabel <p.zabel@pengutronix.de> # imx6qp
Tested-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> # rcar + adv746x
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Tested-by: Aishwarya Kothari <aishwarya.kothari@toradex.com> # Apalis i.MX6Q with TC358743
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> # Renesas RZ/G2L SMARC
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
-rw-r--r-- | drivers/media/v4l2-core/v4l2-async.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/drivers/media/v4l2-core/v4l2-async.c b/drivers/media/v4l2-core/v4l2-async.c index 9964d7f38480..0a9c9fb2a42c 100644 --- a/drivers/media/v4l2-core/v4l2-async.c +++ b/drivers/media/v4l2-core/v4l2-async.c @@ -320,10 +320,8 @@ static int v4l2_async_match_notify(struct v4l2_async_notifier *notifier, return ret; ret = v4l2_async_nf_call_bound(notifier, sd, asc); - if (ret < 0) { - v4l2_device_unregister_subdev(sd); - return ret; - } + if (ret < 0) + goto err_unregister_subdev; /* * Depending of the function of the entities involved, we may want to @@ -332,11 +330,8 @@ static int v4l2_async_match_notify(struct v4l2_async_notifier *notifier, * pad). */ ret = v4l2_async_create_ancillary_links(notifier, sd); - if (ret) { - v4l2_async_nf_call_unbind(notifier, sd, asc); - v4l2_device_unregister_subdev(sd); - return ret; - } + if (ret) + goto err_call_unbind; list_del(&asc->waiting_entry); sd->asd = asc; @@ -363,6 +358,14 @@ static int v4l2_async_match_notify(struct v4l2_async_notifier *notifier, subdev_notifier->parent = notifier; return v4l2_async_nf_try_all_subdevs(subdev_notifier); + +err_call_unbind: + v4l2_async_nf_call_unbind(notifier, sd, asc); + +err_unregister_subdev: + v4l2_device_unregister_subdev(sd); + + return ret; } /* Test all async sub-devices in a notifier for a match. */ |