Thu, Jan 17, 2019 at 10:59:10PM CET, era...@mellanox.com wrote:

[...]

>+static void
>+devlink_health_buffers_destroy(struct devlink_health_buffer **buffers_list,
>+                             u64 size);

Avoid fwd declarations.


>+
>+static struct devlink_health_buffer **
>+devlink_health_buffers_create(u64 size)
>+{
>+      struct devlink_health_buffer **buffers_list;
>+      u64 num_of_buffers = DEVLINK_HEALTH_SIZE_TO_BUFFERS(size);
>+      u64 i;
>+
>+      buffers_list = kcalloc(num_of_buffers,
>+                             sizeof(struct devlink_health_buffer *),
>+                             GFP_KERNEL);
>+      if (!buffers_list)
>+              return NULL;
>+
>+      for (i = 0; i < num_of_buffers; i++) {
>+              struct devlink_health_buffer *buffer;
>+              void *data;
>+
>+              buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
>+              data = kzalloc(DEVLINK_HEALTH_BUFFER_SIZE, GFP_KERNEL);
>+              if (!buffer || !data) {
>+                      kfree(buffer);
>+                      kfree(data);
>+                      goto buffers_cleanup;
>+              }
>+              buffers_list[i] = buffer;
>+              buffer->data = data;
>+      }
>+      devlink_health_buffers_reset(buffers_list, num_of_buffers);
>+
>+      return buffers_list;
>+
>+buffers_cleanup:
>+      devlink_health_buffers_destroy(buffers_list, --i);

Just do for-kfree here.


>+      kfree(buffers_list);
>+      return NULL;
>+}
>+
>+static void
>+devlink_health_buffers_destroy(struct devlink_health_buffer **buffers_list,
>+                             u64 num_of_buffers)
>+{
>+      u64 i;
>+
>+      for (i = 0; i < num_of_buffers; i++) {
>+              kfree(buffers_list[i]->data);
>+              kfree(buffers_list[i]);
>+      }
>+}
>+

[...]

Reply via email to