Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp2216312imm; Mon, 28 May 2018 04:07:39 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpFcoB1iw191X8zbxyV9fI+Ri2/fQCTMOto8wVLkgdHTKnbNFPgi4CC3KIXl0DefnEp5sAh X-Received: by 2002:a17:902:5959:: with SMTP id e25-v6mr13275988plj.351.1527505658948; Mon, 28 May 2018 04:07:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527505658; cv=none; d=google.com; s=arc-20160816; b=bBG6wKd94em0nl822mzVFXRWwssdbgJp45jSUA34SgpZ8PmrxhE5yuxvHRvaf6vXrv mzNLVcuLtjD/lsxeAvIVmiK91/Ql0GeuD1Nm2qPQ1dPIQI7VR/ZXFun3LCJpD1smTH4a 8Mkmrswjwcqr7OjYlmevnLyANOtSzs39+NyLLjTLE8scivrJLfg74QJVtMbzLpGLhnXH H06m+FCDYDzFzWB6xr+PB0Uzqjbq8wW10ZmWE2KkQNUmcWWmAHwYsoMHMrJ+FUSLhR1F FBe2rCtLD66CCDWwR5QczlGqQn7JbsHbqRZKAdW6dSX4VEWUnnBs9GWFUfdsPvpVGz8Q gx7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=Pw+a9R7ixbMTt87bTcVXpCYcA+QsudtZdbCX1PXKdag=; b=tS9FJ7O9IcYfS/AbTtWErCs+vD77962h13mKxfXQXfZ54DbjFJkpEay/AssV2NSJXA u3qnCp3nSqpgr4p2GXKUDQZ3xecPcdU9EIW9svuaE6Jsd6kOmWCFOVcE4UDcgUmOnMMl 6PmmZr7wOm+iVPCKYar6IJgtt/72UieUbNn8m0rXywBlO5S4jq/P06rxFGoDX5s3ozkV L1czekwoyzPpptefeC1oh1Q/pxjkIUOrePENyEiw/+CufdgKcs95lxfCpP9kALVVEWr+ xq7TDwAvCKd+8vQFXedkQ/fetMCnh5WzIPAU6Slp4KnijHTseCfCG5fD0wrFJye7jKAO KxVA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=wtmJBpUK; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h12-v6si7925533plk.535.2018.05.28.04.07.24; Mon, 28 May 2018 04:07:38 -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; dkim=pass header.i=@kernel.org header.s=default header.b=wtmJBpUK; 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 S1164945AbeE1LF0 (ORCPT + 99 others); Mon, 28 May 2018 07:05:26 -0400 Received: from mail.kernel.org ([198.145.29.99]:52296 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1423091AbeE1LFN (ORCPT ); Mon, 28 May 2018 07:05:13 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) (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 8EA632075C; Mon, 28 May 2018 11:05:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1527505512; bh=1CESWds3DIKseYj3ph1aPQ2yRotpgIUuve0LduAyeck=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=wtmJBpUKg0D5lvVb30uELmApj9pXfhP/aunqsxCHWwSBp2f2W3E1LvjqUKVxqBDm7 5Sr0zuIANqP3Q3OUYcrwcPt4DBMp0EtXRsWloqLKXfLZI6IoiQ8Z2Y+59xJI3ayHfO WycofyZl4HDQfIaZr/UJeVg1qWb1iUw48DZC3y8U= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jun Wu , Omar Sandoval , David Sterba Subject: [PATCH 4.16 012/272] Btrfs: fix error handling in btrfs_truncate() Date: Mon, 28 May 2018 12:00:45 +0200 Message-Id: <20180528100241.319016155@linuxfoundation.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180528100240.256525891@linuxfoundation.org> References: <20180528100240.256525891@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.16-stable review patch. If anyone has any objections, please let me know. ------------------ From: Omar Sandoval commit d50147381aa0c9725d63a677c138c47f55d6d3bc upstream. Jun Wu at Facebook reported that an internal service was seeing a return value of 1 from ftruncate() on Btrfs in some cases. This is coming from the NEED_TRUNCATE_BLOCK return value from btrfs_truncate_inode_items(). btrfs_truncate() uses two variables for error handling, ret and err. When btrfs_truncate_inode_items() returns non-zero, we set err to the return value. However, NEED_TRUNCATE_BLOCK is not an error. Make sure we only set err if ret is an error (i.e., negative). To reproduce the issue: mount a filesystem with -o compress-force=zstd and the following program will encounter return value of 1 from ftruncate: int main(void) { char buf[256] = { 0 }; int ret; int fd; fd = open("test", O_CREAT | O_WRONLY | O_TRUNC, 0666); if (fd == -1) { perror("open"); return EXIT_FAILURE; } if (write(fd, buf, sizeof(buf)) != sizeof(buf)) { perror("write"); close(fd); return EXIT_FAILURE; } if (fsync(fd) == -1) { perror("fsync"); close(fd); return EXIT_FAILURE; } ret = ftruncate(fd, 128); if (ret) { printf("ftruncate() returned %d\n", ret); close(fd); return EXIT_FAILURE; } close(fd); return EXIT_SUCCESS; } Fixes: ddfae63cc8e0 ("btrfs: move btrfs_truncate_block out of trans handle") CC: stable@vger.kernel.org # 4.15+ Reported-by: Jun Wu Signed-off-by: Omar Sandoval Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/inode.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -9238,7 +9238,8 @@ static int btrfs_truncate(struct inode * BTRFS_EXTENT_DATA_KEY); trans->block_rsv = &fs_info->trans_block_rsv; if (ret != -ENOSPC && ret != -EAGAIN) { - err = ret; + if (ret < 0) + err = ret; break; }