diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index d1e527cf2aae..fe593dd2c387 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -8776,8 +8776,17 @@ static void tracing_buffers_mmap_close(struct vm_area_struct *vma) { struct ftrace_buffer_info *info = vma->vm_file->private_data; struct trace_iterator *iter = &info->iter; + int ret; - WARN_ON(ring_buffer_unmap(iter->array_buffer->buffer, iter->cpu_file)); + ret = ring_buffer_unmap(iter->array_buffer->buffer, iter->cpu_file); + if (ret == -ENODEV) { + /* + * This VMA was split from the original mapping. Since + * ring buffer mappings do not support partial mappings, + * the split VMA does not hold a reference. + */ + return; + } put_snapshot_map(iter->tr); }