From patchwork Mon May 18 16:34:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Filipe Manana X-Patchwork-Id: 11555729 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9C4C0138A for ; Mon, 18 May 2020 16:34:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7B5B520709 for ; Mon, 18 May 2020 16:34:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1589819655; bh=CcM+vaPHpdCH+p3FHLSD9OYD5bIx91YUltDg5al6FDk=; h=From:To:Subject:Date:List-ID:From; b=RBgJGRaDoQVfYILkhv43ALDW/ihRcq2BEWSVUr1JgincBbsnZ2p9xcVgsRKX3v91e pOh/VCAL11IiM3rn/67rG3/E07B+HPcA/urQ9BgXvvpkMcx3ghNvvWpjzeOgLVp+E0 ppzERYmZHxfKDMKdpS2zfVLrcj/ngIfnQ/4UYu8I= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728045AbgERQeO (ORCPT ); Mon, 18 May 2020 12:34:14 -0400 Received: from mail.kernel.org ([198.145.29.99]:33340 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727020AbgERQeO (ORCPT ); Mon, 18 May 2020 12:34:14 -0400 Received: from debian6.Home (bl8-197-74.dsl.telepac.pt [85.241.197.74]) (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 E260720709 for ; Mon, 18 May 2020 16:34:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1589819654; bh=CcM+vaPHpdCH+p3FHLSD9OYD5bIx91YUltDg5al6FDk=; h=From:To:Subject:Date:From; b=bacaEUNbHTckzqccUeqJISkEPmqWmmbNV6FS5tVNl9Aj6g4XYP+gwdF6Q74vkhZ88 eRrtfomva+s//O9NTa7BPCdVmI7B9LN7ScgtCFVp+Kxhpdg1LJKRWPL++4DqApSPAE UkT4PKYM/7twxpFjQ06IFAxaoZ5fCR0shqj0rMzE= From: fdmanana@kernel.org To: linux-btrfs@vger.kernel.org Subject: [PATCH 1/2] Btrfs: include error on messages about failure to write space/inode caches Date: Mon, 18 May 2020 17:34:11 +0100 Message-Id: <20200518163411.18660-1-fdmanana@kernel.org> X-Mailer: git-send-email 2.11.0 Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org From: Filipe Manana Currently the error messages logged when we fail to write a free space cache or an inode cache are not very useful as they don't mention what was the error. So include the error number in the messages. Signed-off-by: Filipe Manana --- fs/btrfs/free-space-cache.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c index 3c353a337b91..3f63deb9f188 100644 --- a/fs/btrfs/free-space-cache.c +++ b/fs/btrfs/free-space-cache.c @@ -1193,8 +1193,8 @@ static int __btrfs_wait_cache_io(struct btrfs_root *root, if (block_group) { #ifdef CONFIG_BTRFS_DEBUG btrfs_err(root->fs_info, - "failed to write free space cache for block group %llu", - block_group->start); + "failed to write free space cache for block group %llu error %d", + block_group->start, ret); #endif } } @@ -1417,8 +1417,8 @@ int btrfs_write_out_cache(struct btrfs_trans_handle *trans, if (ret) { #ifdef CONFIG_BTRFS_DEBUG btrfs_err(fs_info, - "failed to write free space cache for block group %llu", - block_group->start); + "failed to write free space cache for block group %llu error %d", + block_group->start, ret); #endif spin_lock(&block_group->lock); block_group->disk_cache_state = BTRFS_DC_ERROR; @@ -3997,8 +3997,8 @@ int btrfs_write_out_ino_cache(struct btrfs_root *root, inode->i_size, true); #ifdef CONFIG_BTRFS_DEBUG btrfs_err(fs_info, - "failed to write free ino cache for root %llu", - root->root_key.objectid); + "failed to write free ino cache for root %llu error %d", + root->root_key.objectid, ret); #endif } From patchwork Mon May 18 16:34:23 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Filipe Manana X-Patchwork-Id: 11555731 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D4E02138A for ; Mon, 18 May 2020 16:34:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BD881207E8 for ; Mon, 18 May 2020 16:34:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1589819667; bh=drSKq916KhCBtagyLgFuyThUKR0x50Aq1MYUK6FldRA=; h=From:To:Subject:Date:List-ID:From; b=e76z25ZMhz/uSZfo6DVxjSKqsjYL/NF6gVZZQj0lfZ7L51Jd/y1lE4SE/jcSsApfR bc+CLG2WPQVOaKfcIPS6vyOB2UXCxWyvfQCNPS2wQwGoPVHqL7sUEPLYlsCRDV4qFg tihk1jACNjXDz5p8kIsJYjWU6qepCL8NcFyndtH0= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728219AbgERQe1 (ORCPT ); Mon, 18 May 2020 12:34:27 -0400 Received: from mail.kernel.org ([198.145.29.99]:33438 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727020AbgERQe0 (ORCPT ); Mon, 18 May 2020 12:34:26 -0400 Received: from debian6.Home (bl8-197-74.dsl.telepac.pt [85.241.197.74]) (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 9E968207E8 for ; Mon, 18 May 2020 16:34:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1589819666; bh=drSKq916KhCBtagyLgFuyThUKR0x50Aq1MYUK6FldRA=; h=From:To:Subject:Date:From; b=GdNkPP/sUM7+UzEaWwcFF4kYvrKy31ITiRlWVmWcNCrd2PojkZCtgTXuJjHAbpFZg GAZiXLRsM4nb4yJK6t+UozJWX/U4luyR/GB22B0y1sAD4v+ndrVswdaT7yXdCWXhTM u4xo9w9JTXj+z0DPmp/nzL5Z1lkAfJGwgaopT/1c= From: fdmanana@kernel.org To: linux-btrfs@vger.kernel.org Subject: [PATCH 2/2] Btrfs: turn space cache writeout failure messages into debug messages Date: Mon, 18 May 2020 17:34:23 +0100 Message-Id: <20200518163423.18710-1-fdmanana@kernel.org> X-Mailer: git-send-email 2.11.0 Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org From: Filipe Manana Since commit 1afb648e945428 ("btrfs: use standard debug config option to enable free-space-cache debug prints"), we started to log error messages that were never logged before since there was no DEBUG macro defined anywhere. This started to make test case btrfs/187 to fail very often, as it greps for any btrfs error messages in dmesg/syslog and fails if any is found: (...) btrfs/186 1s ... 2s btrfs/187 - output mismatch (see .../results//btrfs/187.out.bad) \--- tests/btrfs/187.out 2019-05-17 12:48:32.537340749 +0100 \+++ /home/fdmanana/git/hub/xfstests/results//btrfs/187.out.bad ... \@@ -1,3 +1,8 @@ QA output created by 187 Create a readonly snapshot of 'SCRATCH_MNT' in 'SCRATCH_MNT/snap1' Create a readonly snapshot of 'SCRATCH_MNT' in 'SCRATCH_MNT/snap2' +[268364.139958] BTRFS error (device sdc): failed to write free space cache for block group 30408704 +[268380.156503] BTRFS error (device sdc): failed to write free space cache for block group 30408704 +[268380.161703] BTRFS error (device sdc): failed to write free space cache for block group 30408704 +[268380.253180] BTRFS error (device sdc): failed to write free space cache for block group 30408704 ... (Run 'diff -u /home/fdmanana/git/hub/xfstests/tests/btrfs/187.out ... btrfs/188 4s ... 2s (...) The space cache write failures happen due to ENOSPC when attempting to update the free space cache items in the root tree. This happens because when starting or joining a transaction we don't know how many block groups we will end up changing (due to extent allocation or release) and therefore never reserve space for updating free space cache items. More often than not, the free space cache writeout succeeds since the metadata space info is not yet full nor very close to being full, but when it is, the space cache writeout fails with ENOSPC. Occasional failures to write space caches are not considered critical since they can be rebuilt when mounting the filesystem or the next attempt to write a free space cache in the next transaction commit might succeed, so we used to hide those error messages with a preprocessor check for the existence of the DEBUG macro that was never enabled anywhere. A few other generic test cases also trigger the error messages due to ENOSPC failure when writing free space caches as well, however they don't fail since they don't grep dmesg/syslog for any btrfs specific error messages. So change the messages from 'error' level to 'debug' level, as it doesn't make much sense to have error messages triggered only if the debug macro is enabled plus, more importantly, the error is not serious nor highly unexpected. Signed-off-by: Filipe Manana --- fs/btrfs/free-space-cache.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c index 3f63deb9f188..fb06cb3d3b3d 100644 --- a/fs/btrfs/free-space-cache.c +++ b/fs/btrfs/free-space-cache.c @@ -1190,13 +1190,10 @@ static int __btrfs_wait_cache_io(struct btrfs_root *root, if (ret) { invalidate_inode_pages2(inode->i_mapping); BTRFS_I(inode)->generation = 0; - if (block_group) { -#ifdef CONFIG_BTRFS_DEBUG - btrfs_err(root->fs_info, + if (block_group) + btrfs_debug(root->fs_info, "failed to write free space cache for block group %llu error %d", block_group->start, ret); -#endif - } } btrfs_update_inode(trans, root, inode); @@ -1415,11 +1412,9 @@ int btrfs_write_out_cache(struct btrfs_trans_handle *trans, ret = __btrfs_write_out_cache(fs_info->tree_root, inode, ctl, block_group, &block_group->io_ctl, trans); if (ret) { -#ifdef CONFIG_BTRFS_DEBUG - btrfs_err(fs_info, + btrfs_debug(fs_info, "failed to write free space cache for block group %llu error %d", block_group->start, ret); -#endif spin_lock(&block_group->lock); block_group->disk_cache_state = BTRFS_DC_ERROR; spin_unlock(&block_group->lock); @@ -3995,11 +3990,9 @@ int btrfs_write_out_ino_cache(struct btrfs_root *root, if (release_metadata) btrfs_delalloc_release_metadata(BTRFS_I(inode), inode->i_size, true); -#ifdef CONFIG_BTRFS_DEBUG - btrfs_err(fs_info, + btrfs_debug(fs_info, "failed to write free ino cache for root %llu error %d", root->root_key.objectid, ret); -#endif } return ret;