return NULL;
 }
 
+static struct devlink_health_reporter *
+__devlink_health_reporter_create(struct devlink *devlink,
+                                const struct devlink_health_reporter_ops *ops,
+                                u64 graceful_period, void *priv)
+{
+       struct devlink_health_reporter *reporter;
+
+       if (WARN_ON(graceful_period && !ops->recover))
+               return ERR_PTR(-EINVAL);
+
+       reporter = kzalloc(sizeof(*reporter), GFP_KERNEL);
+       if (!reporter)
+               return ERR_PTR(-ENOMEM);
+
+       reporter->priv = priv;
+       reporter->ops = ops;
+       reporter->devlink = devlink;
+       reporter->graceful_period = graceful_period;
+       reporter->auto_recover = !!ops->recover;
+       reporter->auto_dump = !!ops->dump;
+       mutex_init(&reporter->dump_lock);
+       refcount_set(&reporter->refcount, 1);
+       return reporter;
+}
+
 /**
  *     devlink_health_reporter_create - create devlink health reporter
  *
                goto unlock;
        }
 
-       if (WARN_ON(graceful_period && !ops->recover)) {
-               reporter = ERR_PTR(-EINVAL);
+       reporter = __devlink_health_reporter_create(devlink, ops,
+                                                   graceful_period, priv);
+       if (IS_ERR(reporter))
                goto unlock;
-       }
-
-       reporter = kzalloc(sizeof(*reporter), GFP_KERNEL);
-       if (!reporter) {
-               reporter = ERR_PTR(-ENOMEM);
-               goto unlock;
-       }
 
-       reporter->priv = priv;
-       reporter->ops = ops;
-       reporter->devlink = devlink;
-       reporter->graceful_period = graceful_period;
-       reporter->auto_recover = !!ops->recover;
-       reporter->auto_dump = !!ops->dump;
-       mutex_init(&reporter->dump_lock);
-       refcount_set(&reporter->refcount, 1);
        list_add_tail(&reporter->list, &devlink->reporter_list);
 unlock:
        mutex_unlock(&devlink->reporters_lock);