From patchwork Fri Jun 17 15:33:10 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 102154 Delivered-To: patch@linaro.org Received: by 10.140.28.4 with SMTP id 4csp343035qgy; Fri, 17 Jun 2016 08:33:28 -0700 (PDT) X-Received: by 10.36.158.130 with SMTP id p124mr34296521itd.97.1466177608816; Fri, 17 Jun 2016 08:33:28 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z78si12968462pfa.122.2016.06.17.08.33.28; Fri, 17 Jun 2016 08:33:28 -0700 (PDT) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933617AbcFQPdZ (ORCPT + 30 others); Fri, 17 Jun 2016 11:33:25 -0400 Received: from mout.kundenserver.de ([212.227.17.24]:63225 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932065AbcFQPdX (ORCPT ); Fri, 17 Jun 2016 11:33:23 -0400 Received: from wuerfel.lan. ([78.42.132.4]) by mrelayeu.kundenserver.de (mreue103) with ESMTPA (Nemesis) id 0LcnP5-1beDXq1q3b-00k9Eu; Fri, 17 Jun 2016 17:32:01 +0200 From: Arnd Bergmann To: Shaohua Li Cc: y2038@lists.linaro.org, Arnd Bergmann , NeilBrown , Guoqing Jiang , Goldwyn Rodrigues , Jens Axboe , Hannes Reinecke , linux-raid@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] md: use seconds granularity for error logging Date: Fri, 17 Jun 2016 17:33:10 +0200 Message-Id: <20160617153347.380722-1-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 X-Provags-ID: V03:K0:YSxYsHEppJZmI44UcCwgWRUwhS84z6SN2DfXYEbDJeCAuil8cE0 o1V6900GfO/sviWCNQO/G1byfh/PXFKgLh/r4mKzguTWWdL6BR07sF1tiI21q026mz7yfnf 8lku5K6Fcu7y74utT4d/MZcI2NVaMi9rmYT7z54HLaD8LWx1gdB40xQvd1pP6c8vgZc2Nfi W2fWt+L2J9OYn20o/L0CQ== X-UI-Out-Filterresults: notjunk:1; V01:K0:fFB5Fwad1zk=:DgexgRonY5TpFiZdLPMyL1 PYu3vC3CESYWtdwNdg+r5VGopFRLMWZNGgoRQoHQVSm9bYmjERMVHBVhCRwALDa1JnSUz1ZuA 4HC5qHHbmQpBwUxfVFWcU/XjrbwrXsToOE4WgznWv6SBLmAICwqXMxLUN03a6WGa2qWQyWAEv F+6ZMPxgZ8iwh2H9F+kgnPnlO9swsuICjy7cuC8kLskYyswet4IgwfaXxaun9zHxXaijjDSC6 5iJcb4mZTPgRA4BhqU3npT9GtWVXUzgNrcVE/OL0iVJHqSXahtopsnJZhb1wlG1y4zCJx5Hgp tpDKNYC2G5oRKwRgDnXM9/3hlBpNWyDpStwVgT0I60FgJk2G7fWCA5O8vF8oSZPlJTlG9Z32Y aYwRHNPHy0h+EgRtpdBHO171g1AbBDMC1mb4evoS4s09EJJnR182jVuAoZ83WA5dnBGo4tCx2 lHMM4I4jP5eHHmZ5tT4HWLR5jtUuLjZDTTA7y26q8l2mfmolZLd//mDWbjL659tG6PduHbfRd CfSrZ7eSMhNH6g4SCqU60/xctuctV2hn0DCjPpo36E8CXJy6BM5ohQdLvj937ETsnYz4UFp8l zY+M7bYulOQWm0PDyvaVJ3zxEencn9Ddc1y1FITSNGRMjMBtPrwOLEWmZH0ipEJYlX4U3DsIo n7yLV0yaMS0de9feVb5xLK5rP1YDiyaaJfamlZ+INKeYa2H6uN6OrXn7EyW7nJFq6hhE= Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The md code stores the exact time of the last error in the last_read_error variable using a timespec structure. It only ever uses the seconds portion of that though, so we can use a scalar for it. There won't be an overflow in 2038 here, because it already used monotonic time and 32-bit is enough for that, but I've decided to use time64_t for consistency in the conversion. Signed-off-by: Arnd Bergmann --- drivers/md/md.c | 3 +-- drivers/md/md.h | 2 +- drivers/md/raid10.c | 11 +++++------ 3 files changed, 7 insertions(+), 9 deletions(-) -- 2.9.0 diff --git a/drivers/md/md.c b/drivers/md/md.c index 3745b9a7a2d7..ad512ad4610f 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -3179,8 +3179,7 @@ int md_rdev_init(struct md_rdev *rdev) rdev->data_offset = 0; rdev->new_data_offset = 0; rdev->sb_events = 0; - rdev->last_read_error.tv_sec = 0; - rdev->last_read_error.tv_nsec = 0; + rdev->last_read_error = 0; rdev->sb_loaded = 0; rdev->bb_page = NULL; atomic_set(&rdev->nr_pending, 0); diff --git a/drivers/md/md.h b/drivers/md/md.h index 3c3412d85e42..20c667579ede 100644 --- a/drivers/md/md.h +++ b/drivers/md/md.h @@ -99,7 +99,7 @@ struct md_rdev { atomic_t read_errors; /* number of consecutive read errors that * we have tried to ignore. */ - struct timespec last_read_error; /* monotonic time since our + time64_t last_read_error; /* monotonic time since our * last read error */ atomic_t corrected_errors; /* number of corrected read errors, diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index 41191e04d565..f8cdd08d0a40 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c @@ -2170,21 +2170,20 @@ static void recovery_request_write(struct mddev *mddev, struct r10bio *r10_bio) */ static void check_decay_read_errors(struct mddev *mddev, struct md_rdev *rdev) { - struct timespec cur_time_mon; + long cur_time_mon; unsigned long hours_since_last; unsigned int read_errors = atomic_read(&rdev->read_errors); - ktime_get_ts(&cur_time_mon); + cur_time_mon = ktime_get_seconds(); - if (rdev->last_read_error.tv_sec == 0 && - rdev->last_read_error.tv_nsec == 0) { + if (rdev->last_read_error == 0) { /* first time we've seen a read error */ rdev->last_read_error = cur_time_mon; return; } - hours_since_last = (cur_time_mon.tv_sec - - rdev->last_read_error.tv_sec) / 3600; + hours_since_last = (long)(cur_time_mon - + rdev->last_read_error) / 3600; rdev->last_read_error = cur_time_mon;