devlink: Refactor devlink health reporter constructor
authorVladyslav Tarasiuk <vladyslavt@mellanox.com>
Fri, 10 Jul 2020 12:25:07 +0000 (15:25 +0300)
committerDavid S. Miller <davem@davemloft.net>
Fri, 10 Jul 2020 21:32:02 +0000 (14:32 -0700)
Prepare a common routine in devlink_health_reporter_create() for usage
in similar functions for devlink port health reporters.

Signed-off-by: Vladyslav Tarasiuk <vladyslavt@mellanox.com>
Reviewed-by: Moshe Shemesh <moshe@mellanox.com>
Reviewed-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/devlink.c

index 346d385ba09fcc10bc2292e8a2b7a94d0e36cbb3..a203d35fb56f3edcf27d41fa239874f2356f0c3b 100644 (file)
@@ -5321,6 +5321,31 @@ devlink_health_reporter_find_by_name(struct devlink *devlink,
        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
  *
@@ -5342,25 +5367,11 @@ devlink_health_reporter_create(struct devlink *devlink,
                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);