From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx2.suse.de ([195.135.220.15]:53563 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932085AbcEKMrq (ORCPT ); Wed, 11 May 2016 08:47:46 -0400 Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id D8E47AC59 for ; Wed, 11 May 2016 12:47:44 +0000 (UTC) From: David Sterba To: stable@vger.kernel.org Subject: [PATCH 02/17] Btrfs: fix truncate_space_check Date: Wed, 11 May 2016 14:47:23 +0200 Message-Id: <1462970843-16743-1-git-send-email-dsterba@suse.com> In-Reply-To: <20160511124536.GB29353@suse.cz> References: <20160511124536.GB29353@suse.cz> Sender: stable-owner@vger.kernel.org List-ID: From: Josef Bacik commit dc95f7bfc57fa4b75a77d0da84d5db249d74aa3f upstream. truncate_space_check is using btrfs_csum_bytes_to_leaves() but forgetting to multiply by nodesize so we get an actual byte count. We need a tracepoint here so that we have the matching reserve for the release that will come later. Also add a comment to make clear what the intent of truncate_space_check is. Signed-off-by: Josef Bacik Signed-off-by: David Sterba --- fs/btrfs/inode.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index d96f5cf38a2d..0a4a2c141caa 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -4211,11 +4211,20 @@ static int truncate_space_check(struct btrfs_trans_handle *trans, { int ret; + /* + * This is only used to apply pressure to the enospc system, we don't + * intend to use this reservation at all. + */ bytes_deleted = btrfs_csum_bytes_to_leaves(root, bytes_deleted); + bytes_deleted *= root->nodesize; ret = btrfs_block_rsv_add(root, &root->fs_info->trans_block_rsv, bytes_deleted, BTRFS_RESERVE_NO_FLUSH); - if (!ret) + if (!ret) { + trace_btrfs_space_reservation(root->fs_info, "transaction", + trans->transid, + bytes_deleted, 1); trans->bytes_reserved += bytes_deleted; + } return ret; } -- 2.7.1