projects
/
lttng-modules.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: out of memory error handling
[lttng-modules.git]
/
lib
/
ringbuffer
/
ring_buffer_backend.c
diff --git
a/lib/ringbuffer/ring_buffer_backend.c
b/lib/ringbuffer/ring_buffer_backend.c
index f760836cfe50032e18c9d3774a0e1cd7c6338ed5..7394c86033d24c1f97ff03b80767381e2fabf2b5 100644
(file)
--- a/
lib/ringbuffer/ring_buffer_backend.c
+++ b/
lib/ringbuffer/ring_buffer_backend.c
@@
-71,7
+71,7
@@
int lib_ring_buffer_backend_allocate(const struct lib_ring_buffer_config *config
if (unlikely(!pages))
goto pages_error;
if (unlikely(!pages))
goto pages_error;
- bufb->array =
k
malloc_node(ALIGN(sizeof(*bufb->array)
+ bufb->array =
lttng_kv
malloc_node(ALIGN(sizeof(*bufb->array)
* num_subbuf_alloc,
1 << INTERNODE_CACHE_SHIFT),
GFP_KERNEL | __GFP_NOWARN,
* num_subbuf_alloc,
1 << INTERNODE_CACHE_SHIFT),
GFP_KERNEL | __GFP_NOWARN,
@@
-90,7
+90,7
@@
int lib_ring_buffer_backend_allocate(const struct lib_ring_buffer_config *config
/* Allocate backend pages array elements */
for (i = 0; i < num_subbuf_alloc; i++) {
bufb->array[i] =
/* Allocate backend pages array elements */
for (i = 0; i < num_subbuf_alloc; i++) {
bufb->array[i] =
-
k
zalloc_node(ALIGN(
+
lttng_kv
zalloc_node(ALIGN(
sizeof(struct lib_ring_buffer_backend_pages) +
sizeof(struct lib_ring_buffer_backend_page)
* num_pages_per_subbuf,
sizeof(struct lib_ring_buffer_backend_pages) +
sizeof(struct lib_ring_buffer_backend_page)
* num_pages_per_subbuf,
@@
-102,7
+102,7
@@
int lib_ring_buffer_backend_allocate(const struct lib_ring_buffer_config *config
}
/* Allocate write-side subbuffer table */
}
/* Allocate write-side subbuffer table */
- bufb->buf_wsb =
k
zalloc_node(ALIGN(
+ bufb->buf_wsb =
lttng_kv
zalloc_node(ALIGN(
sizeof(struct lib_ring_buffer_backend_subbuffer)
* num_subbuf,
1 << INTERNODE_CACHE_SHIFT),
sizeof(struct lib_ring_buffer_backend_subbuffer)
* num_subbuf,
1 << INTERNODE_CACHE_SHIFT),
@@
-122,7
+122,7
@@
int lib_ring_buffer_backend_allocate(const struct lib_ring_buffer_config *config
bufb->buf_rsb.id = subbuffer_id(config, 0, 1, 0);
/* Allocate subbuffer packet counter table */
bufb->buf_rsb.id = subbuffer_id(config, 0, 1, 0);
/* Allocate subbuffer packet counter table */
- bufb->buf_cnt =
k
zalloc_node(ALIGN(
+ bufb->buf_cnt =
lttng_kv
zalloc_node(ALIGN(
sizeof(struct lib_ring_buffer_backend_counts)
* num_subbuf,
1 << INTERNODE_CACHE_SHIFT),
sizeof(struct lib_ring_buffer_backend_counts)
* num_subbuf,
1 << INTERNODE_CACHE_SHIFT),
@@
-154,15
+154,15
@@
int lib_ring_buffer_backend_allocate(const struct lib_ring_buffer_config *config
return 0;
free_wsb:
return 0;
free_wsb:
-
k
free(bufb->buf_wsb);
+
lttng_kv
free(bufb->buf_wsb);
free_array:
for (i = 0; (i < num_subbuf_alloc && bufb->array[i]); i++)
free_array:
for (i = 0; (i < num_subbuf_alloc && bufb->array[i]); i++)
-
k
free(bufb->array[i]);
+
lttng_kv
free(bufb->array[i]);
depopulate:
/* Free all allocated pages */
for (i = 0; (i < num_pages && pages[i]); i++)
__free_page(pages[i]);
depopulate:
/* Free all allocated pages */
for (i = 0; (i < num_pages && pages[i]); i++)
__free_page(pages[i]);
-
k
free(bufb->array);
+
lttng_kv
free(bufb->array);
array_error:
vfree(pages);
pages_error:
array_error:
vfree(pages);
pages_error:
@@
-191,14
+191,14
@@
void lib_ring_buffer_backend_free(struct lib_ring_buffer_backend *bufb)
if (chanb->extra_reader_sb)
num_subbuf_alloc++;
if (chanb->extra_reader_sb)
num_subbuf_alloc++;
-
k
free(bufb->buf_wsb);
-
k
free(bufb->buf_cnt);
+
lttng_kv
free(bufb->buf_wsb);
+
lttng_kv
free(bufb->buf_cnt);
for (i = 0; i < num_subbuf_alloc; i++) {
for (j = 0; j < bufb->num_pages_per_subbuf; j++)
__free_page(pfn_to_page(bufb->array[i]->p[j].pfn));
for (i = 0; i < num_subbuf_alloc; i++) {
for (j = 0; j < bufb->num_pages_per_subbuf; j++)
__free_page(pfn_to_page(bufb->array[i]->p[j].pfn));
-
k
free(bufb->array[i]);
+
lttng_kv
free(bufb->array[i]);
}
}
-
k
free(bufb->array);
+
lttng_kv
free(bufb->array);
bufb->allocated = 0;
}
bufb->allocated = 0;
}
@@
-468,9
+468,11
@@
int channel_backend_init(struct channel_backend *chanb,
free_bufs:
if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) {
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0))
free_bufs:
if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) {
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0))
- ret = cpuhp_state_remove_instance(lttng_rb_hp_prepare,
- &chanb->cpuhp_prepare.node);
- WARN_ON(ret);
+ /*
+ * Teardown of lttng_rb_hp_prepare instance
+ * on "add" error is handled within cpu hotplug,
+ * no teardown to do from the caller.
+ */
#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */
#ifdef CONFIG_HOTPLUG_CPU
put_online_cpus();
#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */
#ifdef CONFIG_HOTPLUG_CPU
put_online_cpus();
This page took
0.026449 seconds
and
4
git commands to generate.