media: v4l: async: Clean up error handling in v4l2_async_match_notify
authorSakari Ailus <sakari.ailus@linux.intel.com>
Mon, 17 Apr 2023 14:09:27 +0000 (16:09 +0200)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Fri, 28 Jul 2023 08:45:12 +0000 (10:45 +0200)
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>
drivers/media/v4l2-core/v4l2-async.c

index 9964d7f..0a9c9fb 100644 (file)
@@ -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. */