Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp773116ybz; Wed, 15 Apr 2020 18:42:05 -0700 (PDT) X-Google-Smtp-Source: APiQypKK7X6NIo2tT9AayQaxlRIHxo2OTwThAqLBTQr/sK1A9MPDZ8ZwiA59rs5r9F0UZRPDcU/P X-Received: by 2002:a17:906:31d7:: with SMTP id f23mr1279187ejf.118.1587001325349; Wed, 15 Apr 2020 18:42:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1587001325; cv=none; d=google.com; s=arc-20160816; b=d6eD4vdHHi0LWeDYM52toPCVdoB6hTMGIZi9x+g1ROhEps/0TkmKnN5ggVZKRz75dc ZtmSv/CqxbYKiP6vyFjYTjB9QLGfiQVD+lvtDDGvpIU6ifzmmzarYtnrpF2Ocdpi+Mi3 Dh6OYLdvKmhdcVegBVFt3zp3nQGVk0fVm33h3/5TAALrY2Fi0/H+YNIywc9t2bAqTiQ9 ZB++SNJ81afnfnSQdNX5u6x64tLT0WBTxV81JiMA/IQKqvHFfIntsHTHvXItf/YgrbXG OIGKycnpXq2k6vEO+dag1Ums9kHfARTXTSsErICGkKuxPkaMDpqB+WvSi/0ZQ92GZigU ACzg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:subject:cc:to:from:date; bh=rl/atg3WrsEHDoRA7t3cEdtojn2Bwa+qtCMq5HRX3XA=; b=TCs+8nDVlLoL+8YK/DzNMA8zlGyHXmsi+YP2n4k+QTa91lJo7iShxFzetmQHWn/kmu JSU05/3kGYDXFeqdS6TryKGfnnTBIvHBcisDFzHLlb/4L7mMxJWoqKkMStOt0e4I7R5c l8FYkDNusg2FFMDjSwRUCsu+WBtgoSCMuW7/ytKZs6ODm8OM/8+9QnHniDqDQxEW1CIK jcmoR71Py7BIhOMi7v6ML5nSYaUvWyEJL9DewsBR9oIYr/JETiRGUqUndJyhRaUIg/ZF zOFI7SqHlv1f9SuTlvfZZEdquv+iHW33HlygmqFX4fQdE38GvwQISzLzrMRj2CtOP0Aw Ge7A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id q7si3204901edr.137.2020.04.15.18.41.42; Wed, 15 Apr 2020 18:42:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732910AbgDPBkl (ORCPT + 99 others); Wed, 15 Apr 2020 21:40:41 -0400 Received: from mail.kernel.org ([198.145.29.99]:53270 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731710AbgDPBkg (ORCPT ); Wed, 15 Apr 2020 21:40:36 -0400 Received: from oasis.local.home (cpe-66-24-58-225.stny.res.rr.com [66.24.58.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id DAC1520656; Thu, 16 Apr 2020 01:40:34 +0000 (UTC) Date: Wed, 15 Apr 2020 21:40:33 -0400 From: Steven Rostedt To: Linus Torvalds Cc: LKML , Ingo Molnar , Andrew Morton , Xiao Yang Subject: [GIT PULL] tracing: Fix the race between registering 'snapshot' event trigger and triggering 'snapshot' operation Message-ID: <20200415214033.47e3f95f@oasis.local.home> X-Mailer: Claws Mail 3.17.3 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Linus, This fixes a small race between allocating a snapshot buffer and setting the snapshot trigger. On a slow machine, the trigger can occur before the snapshot is allocated causing a warning to be displayed in the ring buffer, and no snapshot triggering. Reversing the allocation and the enabling of the trigger fixes the problem. Please pull the latest trace-v5.7-rc1 tree, which can be found at: git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace.git trace-v5.7-rc1 Tag SHA1: c27f0128144b8ec3d133d39c81ccdbb53ce811e8 Head SHA1: 0bbe7f719985efd9adb3454679ecef0984cb6800 Xiao Yang (1): tracing: Fix the race between registering 'snapshot' event trigger and triggering 'snapshot' operation ---- kernel/trace/trace_events_trigger.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) --------------------------- commit 0bbe7f719985efd9adb3454679ecef0984cb6800 Author: Xiao Yang Date: Tue Apr 14 09:51:45 2020 +0800 tracing: Fix the race between registering 'snapshot' event trigger and triggering 'snapshot' operation Traced event can trigger 'snapshot' operation(i.e. calls snapshot_trigger() or snapshot_count_trigger()) when register_snapshot_trigger() has completed registration but doesn't allocate buffer for 'snapshot' event trigger. In the rare case, 'snapshot' operation always detects the lack of allocated buffer so make register_snapshot_trigger() allocate buffer first. trigger-snapshot.tc in kselftest reproduces the issue on slow vm: ----------------------------------------------------------- cat trace ... ftracetest-3028 [002] .... 236.784290: sched_process_fork: comm=ftracetest pid=3028 child_comm=ftracetest child_pid=3036 <...>-2875 [003] .... 240.460335: tracing_snapshot_instance_cond: *** SNAPSHOT NOT ALLOCATED *** <...>-2875 [003] .... 240.460338: tracing_snapshot_instance_cond: *** stopping trace here! *** ----------------------------------------------------------- Link: http://lkml.kernel.org/r/20200414015145.66236-1-yangx.jy@cn.fujitsu.com Cc: stable@vger.kernel.org Fixes: 93e31ffbf417a ("tracing: Add 'snapshot' event trigger command") Signed-off-by: Xiao Yang Signed-off-by: Steven Rostedt (VMware) diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_events_trigger.c index dd34a1b46a86..3a74736da363 100644 --- a/kernel/trace/trace_events_trigger.c +++ b/kernel/trace/trace_events_trigger.c @@ -1088,14 +1088,10 @@ register_snapshot_trigger(char *glob, struct event_trigger_ops *ops, struct event_trigger_data *data, struct trace_event_file *file) { - int ret = register_trigger(glob, ops, data, file); - - if (ret > 0 && tracing_alloc_snapshot_instance(file->tr) != 0) { - unregister_trigger(glob, ops, data, file); - ret = 0; - } + if (tracing_alloc_snapshot_instance(file->tr) != 0) + return 0; - return ret; + return register_trigger(glob, ops, data, file); } static int