Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp5131582imu; Tue, 8 Jan 2019 12:05:43 -0800 (PST) X-Google-Smtp-Source: ALg8bN4kSChFEvNbOpdPxPt0DQJ2qwBwFkcF3W4zpCw//p/i0TiqCM8+M01kQs+djcI0rS0L8foB X-Received: by 2002:a63:6984:: with SMTP id e126mr2774295pgc.143.1546977943450; Tue, 08 Jan 2019 12:05:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1546977943; cv=none; d=google.com; s=arc-20160816; b=SA6+Ai2MqqrhJUbEIDQNC0hgmtdEQKdZawTaUKHPmEbAPyklK2Y4tJUNqnh3f7g8lf UzUR5w2Xhs8fUuKlBxskqcwVcvecftPF5cZGIqdL5yAISzexmNsU2IfuCdSjUm3WwlEQ 3hCdD7G9R65gb+3ZqzxbWmiZtC1i5GeWXQgv//WyMdTQXs3bU2IVIFgJysv2pncm3u4g Br3qVIFWYFxx4wk1wpaSRtJBFH2A6kcjswn9BYwic8gj3p+O8QPtkgYq6/KHpCRvRQUw d9n0CQQrniIrUTfKPpmaB2Ez9+AigFPbQyoEivfekr9Kt3B4YhJ8meNdUlwh9QV/ROjx tNNQ== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=h3n+9LrmJoIforwT4qFhk//z0vWzp/IPyfV5WeozJys=; b=qHTvkEn7JMqp86Rbce6Q6+iJPQutdTe69ZwQuEScxrM8XV84e01nrIXQRcPvHNpZTz 6cLfzuSIbafnLvA6sqaejfGgp9MLKdDtVBA77LGrNT+E2NFOLrMweC062UWdJvNcFrCq CRi3N9cLkpduplDzizGdFx5rpC66HEEr1ogKlnEOg4x9fQ5doES5+wY2SM818+yFwqMz YYqIAarjDihZmjUbxKEEuoKIEOUusr78+NcIZG9XCKdDzUW35YRSR4MRMNoSRkm9HXs+ HPVMG8jnJVJA/+bQCw4XAKbY6391Phsk6G3KoRFn4BfxTl/4nP+aC9OcNN+WCIh8ODi6 wTHw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=lwqy4Dkl; 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=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z128si65483352pgb.372.2019.01.08.12.05.28; Tue, 08 Jan 2019 12:05:43 -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=@kernel.org header.s=default header.b=lwqy4Dkl; 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=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730136AbfAHT2m (ORCPT + 99 others); Tue, 8 Jan 2019 14:28:42 -0500 Received: from mail.kernel.org ([198.145.29.99]:35774 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730116AbfAHT2j (ORCPT ); Tue, 8 Jan 2019 14:28:39 -0500 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 67633217D9; Tue, 8 Jan 2019 19:28:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1546975719; bh=nv6A0KI3Ex7MTJsyYVsRAqFnTj5BI3eAyG5r3BuIiIs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lwqy4DklT7bUiSlAh59ZQI2nlnXes3KCXbslzWDEat8MN4OSA28G7Y7sKXmEfOH8r 4xpljsVM6OJN3GbNsV77orBGo06HIYmNT7OStrNq6x0kmjDJMzvNgWoXGye6V/4qbF cSDkssFiMTBheFDBisXe1/f83w2V0HvkzDmbnCrU= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Johannes Thumshirn , David Sterba , Sasha Levin , linux-btrfs@vger.kernel.org Subject: [PATCH AUTOSEL 4.20 076/117] btrfs: improve error handling of btrfs_add_link Date: Tue, 8 Jan 2019 14:25:44 -0500 Message-Id: <20190108192628.121270-76-sashal@kernel.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190108192628.121270-1-sashal@kernel.org> References: <20190108192628.121270-1-sashal@kernel.org> MIME-Version: 1.0 X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Johannes Thumshirn [ Upstream commit 1690dd41e0cb1dade80850ed8a3eb0121b96d22f ] In the error handling block, err holds the return value of either btrfs_del_root_ref() or btrfs_del_inode_ref() but it hasn't been checked since it's introduction with commit fe66a05a0679 (Btrfs: improve error handling for btrfs_insert_dir_item callers) in 2012. If the error handling in the error handling fails, there's not much left to do and the abort either happened earlier in the callees or is necessary here. So if one of btrfs_del_root_ref() or btrfs_del_inode_ref() failed, abort the transaction, but still return the original code of the failure stored in 'ret' as this will be reported to the user. Signed-off-by: Johannes Thumshirn Reviewed-by: David Sterba Signed-off-by: David Sterba Signed-off-by: Sasha Levin --- fs/btrfs/inode.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 9ea4c6f0352f..ff9268a60eaf 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -6406,14 +6406,19 @@ int btrfs_add_link(struct btrfs_trans_handle *trans, err = btrfs_del_root_ref(trans, key.objectid, root->root_key.objectid, parent_ino, &local_index, name, name_len); - + if (err) + btrfs_abort_transaction(trans, err); } else if (add_backref) { u64 local_index; int err; err = btrfs_del_inode_ref(trans, root, name, name_len, ino, parent_ino, &local_index); + if (err) + btrfs_abort_transaction(trans, err); } + + /* Return the original error code */ return ret; } -- 2.19.1