Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp3443889ybl; Mon, 3 Feb 2020 00:02:49 -0800 (PST) X-Google-Smtp-Source: APXvYqwskVZ8sZFm2B6N813YKwyLdyAZf9ueydflJiElDlu+v3II8LvAmKLullzAX0Z9iUEofr4o X-Received: by 2002:a05:6830:1218:: with SMTP id r24mr17387989otp.144.1580716968913; Mon, 03 Feb 2020 00:02:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1580716968; cv=none; d=google.com; s=arc-20160816; b=ufxckbBpiKhUgQfLFiJ8b4MuiuMfvOMo2UJoFwLmBRA6DqX/H4P44yuJj7vYg5Vfsy 7SQDLyz5mcIbNVDPbAqsMO4ZeI1T3K5jcCxXoIGs8/Sxf5Fz4kcC3PE1MEx8W73LnLBw u4z7Vshq4yLIjG7heiGVxb5MW6Qs/m2ntbEMJ0dygRehajzACXC5NEh9YPLT5tAQguon 1EoHrRGKCkYpLki2pIg7F0eZbp+IYaR4iZpBhbzanMinBMYuhfkBAYU44pBfnmecWqI2 qzOq8R/19otbICdfFyuqcLhbDmNw5FJZU08CfiMUtQYmdmesYKi5ZjYYMJhNrhGNdVCE 4pxg== 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:date:subject:cc:to:from:dkim-signature; bh=od7Z1FJ07CsMHs7dn27tq7etJRWPdotU0tt4EY8WHv4=; b=AFj7lEzkDJJpjDqG7jbPaEb8bENMjfDLcj+F7/LRc/NacrSbZ/5noxpD+zEmVneUPZ 7Abz6yywTdZd2z2PETUkE03SiJ79NqfdiSIDz/nJmjH1ymvgM5ZJD1EmwsgWUcoE6fYc VlCbp2oBZuaJ3r2a4Qocb8uPUC7k82+cCY8bHtEDJ+zW4NU7cmurh+VSGLoYevfBNc/g 0pXE/BGQN/D/C7vgw1PuFDoAxfiLPU2+iA6pc9u/cdgeSwt8W0REd8Uuivo0m8DKOnwW S2jVqSRXI5VjDxQguPr4kBQLddNU9Bq/1tdZ0rrtnyE8yRhXlKc+bsraqKeP3PQ+OfdJ VBgg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="EfW/QbJn"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 13si7826650oiy.28.2020.02.03.00.02.36; Mon, 03 Feb 2020 00:02:48 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="EfW/QbJn"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727505AbgBCFhW (ORCPT + 99 others); Mon, 3 Feb 2020 00:37:22 -0500 Received: from mail-pg1-f180.google.com ([209.85.215.180]:35973 "EHLO mail-pg1-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727496AbgBCFhW (ORCPT ); Mon, 3 Feb 2020 00:37:22 -0500 Received: by mail-pg1-f180.google.com with SMTP id k3so7182196pgc.3; Sun, 02 Feb 2020 21:37:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=od7Z1FJ07CsMHs7dn27tq7etJRWPdotU0tt4EY8WHv4=; b=EfW/QbJnbycVtEhwdvT/Iuqu1DJ4URWnMKchwUQQtssqvBzQ64W2xigdR2bH7l95Cx r6ONLAgI6LeLA30RMWWpXmMSv2/jhzwYOAaHjp4ZSdEgXE2iKVF6twj8iAcPXMqaclTD T0emWrDG8CT3JeUHv1r3jRzttg5N2jC5BKNgMt/HESEKhk+/xctzpIUYGnG4WlomLdiP Vg5fxmYAG3lJ4nNuenALh69xSw9GE0G4GDUDfEcqMS4JGAl+qpki6tNhuCFI6FxFkI16 wJd9wG/+f8Qn+c3kX+8Q7rmoq35gGeJZtwhzFi/mGbCZmm2djvxLFH3shX00/HgVmkeA jntg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=od7Z1FJ07CsMHs7dn27tq7etJRWPdotU0tt4EY8WHv4=; b=j0eaiRCJFeeZdvrltdtA0lpC0zOJPT2HarT/9AcxXwXNJHUsLjxn7P2U1ZkpAwx88k ILatYSlItYVZLyFN7ao32Zf+8D1m+EQ1LRXgK9VdbE8G+tBP9GppwwIKTGarFT7M/rP3 eAEPSrm0AfwKO1NiyVSsShETL2mHQeiAl/7RahvjziRbhwwyaYdkFNXGStkSEaAke48a XaL4GdFnuZRCtI8wxP5Whu43b9pWZL6CTkb9aQ7gAxgVlzgx09Heu2QjuQROxrSuVVHi HZfXsIPIlJ2iEp9M0ZVh04he5HlS7JgKEl37EJY46H0kvZvNl89xy5VXl3Hdke8gDsJi A8tw== X-Gm-Message-State: APjAAAX4b8gyDyUD5Yrg/1zKizenp6bDyXsddKQ9XGikfAdHZjt5wSTu lbbtgvg6zotoTOlQr5oeVZWipU6h X-Received: by 2002:aa7:85d8:: with SMTP id z24mr24091099pfn.202.1580708241194; Sun, 02 Feb 2020 21:37:21 -0800 (PST) Received: from tw-172-25-31-76.office.twttr.net ([8.25.197.24]) by smtp.gmail.com with ESMTPSA id gx18sm19816337pjb.8.2020.02.02.21.37.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Feb 2020 21:37:20 -0800 (PST) From: Cong Wang To: linux-block@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Cong Wang , Jens Axboe , Steven Rostedt Subject: [Patch v3] block: introduce block_rq_error tracepoint Date: Sun, 2 Feb 2020 21:36:50 -0800 Message-Id: <20200203053650.8923-1-xiyou.wangcong@gmail.com> X-Mailer: git-send-email 2.21.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently, rasdaemon uses the existing tracepoint block_rq_complete and filters out non-error cases in order to capture block disk errors. But there are a few problems with this approach: 1. Even kernel trace filter could do the filtering work, there is still some overhead after we enable this tracepoint. 2. The filter is merely based on errno, which does not align with kernel logic to check the errors for print_req_error(). 3. block_rq_complete only provides dev major and minor to identify the block device, it is not convenient to use in user-space. So introduce a new tracepoint block_rq_error just for the error case and provides the device name for convenience too. With this patch, rasdaemon could switch to block_rq_error. Cc: Jens Axboe Cc: Steven Rostedt Signed-off-by: Cong Wang --- block/blk-core.c | 4 +++- include/trace/events/block.h | 41 ++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/block/blk-core.c b/block/blk-core.c index 089e890ab208..0c7ad70d06be 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -1450,8 +1450,10 @@ bool blk_update_request(struct request *req, blk_status_t error, #endif if (unlikely(error && !blk_rq_is_passthrough(req) && - !(req->rq_flags & RQF_QUIET))) + !(req->rq_flags & RQF_QUIET))) { + trace_block_rq_error(req, blk_status_to_errno(error), nr_bytes); print_req_error(req, error, __func__); + } blk_account_io_completion(req, nr_bytes); diff --git a/include/trace/events/block.h b/include/trace/events/block.h index 81b43f5bdf23..575054e7cfa0 100644 --- a/include/trace/events/block.h +++ b/include/trace/events/block.h @@ -145,6 +145,47 @@ TRACE_EVENT(block_rq_complete, __entry->nr_sector, __entry->error) ); +/** + * block_rq_error - block IO operation error reported by device driver + * @rq: block operations request + * @error: status code + * @nr_bytes: number of completed bytes + * + * The block_rq_error tracepoint event indicates that some portion + * of operation request has failed as reported by the device driver. + */ +TRACE_EVENT(block_rq_error, + + TP_PROTO(struct request *rq, int error, unsigned int nr_bytes), + + TP_ARGS(rq, error, nr_bytes), + + TP_STRUCT__entry( + __field( dev_t, dev ) + __string( name, rq->rq_disk ? rq->rq_disk->disk_name : "?") + __field( sector_t, sector ) + __field( unsigned int, nr_sector ) + __field( int, error ) + __array( char, rwbs, RWBS_LEN ) + ), + + TP_fast_assign( + __entry->dev = rq->rq_disk ? disk_devt(rq->rq_disk) : 0; + __assign_str(name, rq->rq_disk ? rq->rq_disk->disk_name : "?"); + __entry->sector = blk_rq_pos(rq); + __entry->nr_sector = nr_bytes >> 9; + __entry->error = error; + + blk_fill_rwbs(__entry->rwbs, rq->cmd_flags, nr_bytes); + ), + + TP_printk("%d,%d %s %s %llu + %u [%d]", + MAJOR(__entry->dev), MINOR(__entry->dev), + __get_str(name), __entry->rwbs, + (unsigned long long)__entry->sector, + __entry->nr_sector, __entry->error) +); + DECLARE_EVENT_CLASS(block_rq, TP_PROTO(struct request_queue *q, struct request *rq), -- 2.21.1