From patchwork Wed Oct 15 23:14:19 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zach Brown X-Patchwork-Id: 5087451 Return-Path: X-Original-To: patchwork-linux-btrfs@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 72D07C11AD for ; Wed, 15 Oct 2014 23:14:56 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 92C2B2012E for ; Wed, 15 Oct 2014 23:14:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id BE39D20138 for ; Wed, 15 Oct 2014 23:14:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751342AbaJOXOv (ORCPT ); Wed, 15 Oct 2014 19:14:51 -0400 Received: from mail-wg0-f50.google.com ([74.125.82.50]:53186 "EHLO mail-wg0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750887AbaJOXOt (ORCPT ); Wed, 15 Oct 2014 19:14:49 -0400 Received: by mail-wg0-f50.google.com with SMTP id a1so2446582wgh.33 for ; Wed, 15 Oct 2014 16:14:48 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=nM1CMZPQL1XVvJYpaulemXbFjpnlNfzLFxY4JYslbec=; b=VHPfNBjzRvAyy1nL4C+0SWjPQTL7dxyrydhfbIwKS2T2xbYnyAiXhHpyYwMB5J425l X0qrTn1N9adBgsARRv0pPUQxFc9bNmz9aWgyTVF64xrRYlh/fKokJz//w/253Hqv1UV6 XMqDxM4bMwvRoUpS+ItDWIt+pvAwyYNfxHyz0wUWF4Rf6CZj9dqZ64W+3OrXX1drKSQf UfFsn1bA2Y0GEFf2+v3T/I4zt028xmbD9eXgjuMoGHpNqKNUt7KQAgbEjOJ3jGxFks7r AtHWsO+Fp1Xno5Oh63ef67lrKm2525IjazTFsT66BKBQqMzv2WLJFoNytJ1Uyx4fBDJE 2kUw== X-Gm-Message-State: ALoCoQmrXKyM7xqOuOT2lV7TNkVv8ODGV5k6StvM/WWEBKs+8gYxCl+UviAdPzYf9n29CMWyhzV3 X-Received: by 10.194.121.74 with SMTP id li10mr15345004wjb.40.1413414888353; Wed, 15 Oct 2014 16:14:48 -0700 (PDT) Received: from lenny.home.zabbo.net (tetsuo.zabbo.net. [50.193.208.193]) by mx.google.com with ESMTPSA id o1sm25390716wja.25.2014.10.15.16.14.46 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 15 Oct 2014 16:14:47 -0700 (PDT) From: Zach Brown To: linux-btrfs@vger.kernel.org, David Sterba Subject: [PATCH 2/4] btrfs-progs: check read extent errors when mapping Date: Wed, 15 Oct 2014 16:14:19 -0700 Message-Id: <1413414861-28097-3-git-send-email-zab@zabbo.net> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1413414861-28097-1-git-send-email-zab@zabbo.net> References: <1413414861-28097-1-git-send-email-zab@zabbo.net> Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org X-Spam-Status: No, score=-5.3 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY, URIBL_WS_SURBL autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP coverity barked out a warning that btrfs-map-logical was storing but ignoring errors from read_extent_from_disk(). So don't ignore 'em. I made extent reading errors fatal to match the fatal errors from mapping mirrors above. And while we're at it have read_extent_from_disk() return -errno pread errors instead of -EIO or -1 (-EPERM). The only other caller who tests errors clobbers them with -EIO. Signed-off-by: Zach Brown --- btrfs-map-logical.c | 12 +++++++++++- extent_io.c | 4 +++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/btrfs-map-logical.c b/btrfs-map-logical.c index 6b475fc..47d1104 100644 --- a/btrfs-map-logical.c +++ b/btrfs-map-logical.c @@ -76,8 +76,18 @@ static struct extent_buffer * debug_read_block(struct btrfs_root *root, (unsigned long long)eb->dev_bytenr, device->name); kfree(multi); - if (!copy || mirror_num == copy) + if (!copy || mirror_num == copy) { ret = read_extent_from_disk(eb, 0, eb->len); + if (ret) { + fprintf(info_file, + "Error: failed to read extent: mirror %d logical %llu: %s\n", + mirror_num, (unsigned long long)eb->start, + strerror(-ret)); + free_extent_buffer(eb); + eb = NULL; + break; + } + } num_copies = btrfs_num_copies(&root->fs_info->mapping_tree, eb->start, eb->len); diff --git a/extent_io.c b/extent_io.c index 425af8a..5186e89 100644 --- a/extent_io.c +++ b/extent_io.c @@ -647,8 +647,10 @@ int read_extent_from_disk(struct extent_buffer *eb, { int ret; ret = pread(eb->fd, eb->data + offset, len, eb->dev_bytenr); - if (ret < 0) + if (ret < 0) { + ret = -errno; goto out; + } if (ret != len) { ret = -EIO; goto out;