From: Sasha Levin <Alexander.Levin@microsoft.com>
To: "stable@vger.kernel.org" <stable@vger.kernel.org>
Cc: Qu Wenruo <wqu@suse.com>, David Sterba <dsterba@suse.com>,
Sasha Levin <Alexander.Levin@microsoft.com>
Subject: [PATCH AUTOSEL 4.18 112/113] btrfs: Don't remove block group that still has pinned down bytes
Date: Thu, 30 Aug 2018 18:08:43 +0000 [thread overview]
Message-ID: <20180830180714.36167-46-alexander.levin@microsoft.com> (raw)
In-Reply-To: <20180830180714.36167-1-alexander.levin@microsoft.com>
From: Qu Wenruo <wqu@suse.com>
[ Upstream commit 43794446548730ac8461be30bbe47d5d027d1d16 ]
[BUG]
Under certain KVM load and LTP tests, it is possible to hit the
following calltrace if quota is enabled:
BTRFS critical (device vda2): unable to find logical 8820195328 length 4096
BTRFS critical (device vda2): unable to find logical 8820195328 length 4096
WARNING: CPU: 0 PID: 49 at ../block/blk-core.c:172 blk_status_to_errno+0x1a/0x30
CPU: 0 PID: 49 Comm: kworker/u2:1 Not tainted 4.12.14-15-default #1 SLE15 (unreleased)
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.0.0-prebuilt.qemu-project.org 04/01/2014
Workqueue: btrfs-endio-write btrfs_endio_write_helper [btrfs]
task: ffff9f827b340bc0 task.stack: ffffb4f8c0304000
RIP: 0010:blk_status_to_errno+0x1a/0x30
Call Trace:
submit_extent_page+0x191/0x270 [btrfs]
? btrfs_create_repair_bio+0x130/0x130 [btrfs]
__do_readpage+0x2d2/0x810 [btrfs]
? btrfs_create_repair_bio+0x130/0x130 [btrfs]
? run_one_async_done+0xc0/0xc0 [btrfs]
__extent_read_full_page+0xe7/0x100 [btrfs]
? run_one_async_done+0xc0/0xc0 [btrfs]
read_extent_buffer_pages+0x1ab/0x2d0 [btrfs]
? run_one_async_done+0xc0/0xc0 [btrfs]
btree_read_extent_buffer_pages+0x94/0xf0 [btrfs]
read_tree_block+0x31/0x60 [btrfs]
read_block_for_search.isra.35+0xf0/0x2e0 [btrfs]
btrfs_search_slot+0x46b/0xa00 [btrfs]
? kmem_cache_alloc+0x1a8/0x510
? btrfs_get_token_32+0x5b/0x120 [btrfs]
find_parent_nodes+0x11d/0xeb0 [btrfs]
? leaf_space_used+0xb8/0xd0 [btrfs]
? btrfs_leaf_free_space+0x49/0x90 [btrfs]
? btrfs_find_all_roots_safe+0x93/0x100 [btrfs]
btrfs_find_all_roots_safe+0x93/0x100 [btrfs]
btrfs_find_all_roots+0x45/0x60 [btrfs]
btrfs_qgroup_trace_extent_post+0x20/0x40 [btrfs]
btrfs_add_delayed_data_ref+0x1a3/0x1d0 [btrfs]
btrfs_alloc_reserved_file_extent+0x38/0x40 [btrfs]
insert_reserved_file_extent.constprop.71+0x289/0x2e0 [btrfs]
btrfs_finish_ordered_io+0x2f4/0x7f0 [btrfs]
? pick_next_task_fair+0x2cd/0x530
? __switch_to+0x92/0x4b0
btrfs_worker_helper+0x81/0x300 [btrfs]
process_one_work+0x1da/0x3f0
worker_thread+0x2b/0x3f0
? process_one_work+0x3f0/0x3f0
kthread+0x11a/0x130
? kthread_create_on_node+0x40/0x40
ret_from_fork+0x35/0x40
BTRFS critical (device vda2): unable to find logical 8820195328 length 16384
BTRFS: error (device vda2) in btrfs_finish_ordered_io:3023: errno=-5 IO failure
BTRFS info (device vda2): forced readonly
BTRFS error (device vda2): pending csums is 2887680
[CAUSE]
It's caused by race with block group auto removal:
- There is a meta block group X, which has only one tree block
The tree block belongs to fs tree 257.
- In current transaction, some operation modified fs tree 257
The tree block gets COWed, so the block group X is empty, and marked
as unused, queued to be deleted.
- Some workload (like fsync) wakes up cleaner_kthread()
Which will call btrfs_delete_unused_bgs() to remove unused block
groups.
So block group X along its chunk map get removed.
- Some delalloc work finished for fs tree 257
Quota needs to get the original reference of the extent, which will
read tree blocks of commit root of 257.
Then since the chunk map gets removed, the above warning gets
triggered.
[FIX]
Just let btrfs_delete_unused_bgs() skip block group which still has
pinned bytes.
However there is a minor side effect: currently we only queue empty
blocks at update_block_group(), and such empty block group with pinned
bytes won't go through update_block_group() again, such block group
won't be removed, until it gets new extent allocated and removed.
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
fs/btrfs/extent-tree.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index f7a96f7871b7..95c9ad49a3d5 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -10687,7 +10687,7 @@ void btrfs_delete_unused_bgs(struct btrfs_fs_info *fs_info)
/* Don't want to race with allocators so take the groups_sem */
down_write(&space_info->groups_sem);
spin_lock(&block_group->lock);
- if (block_group->reserved ||
+ if (block_group->reserved || block_group->pinned ||
btrfs_block_group_used(&block_group->item) ||
block_group->ro ||
list_is_singular(&block_group->list)) {
--
2.17.1
next prev parent reply other threads:[~2018-08-30 22:12 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-30 18:07 [PATCH AUTOSEL 4.18 067/113] powerpc: Fix size calculation using resource_size() Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 068/113] perf probe powerpc: Fix trace event post-processing Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 069/113] block: bvec_nr_vecs() returns value for wrong slab Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 070/113] brcmfmac: fix brcmf_wiphy_wowl_params() NULL pointer dereference Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 071/113] s390/dasd: fix hanging offline processing due to canceled worker Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 072/113] s390/dasd: fix panic for failed online processing Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 073/113] ACPI / scan: Initialize status to ACPI_STA_DEFAULT Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 074/113] blk-mq: count the hctx as active before allocating tag Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 075/113] scsi: aic94xx: fix an error code in aic94xx_init() Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 076/113] NFSv4: Fix error handling in nfs4_sp4_select_mode() Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 077/113] ALSA: hda/ca0132 - Add DSP setup defaults for Recon3D Sasha Levin
2018-08-30 20:13 ` Takashi Iwai
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 078/113] ALSA: hda/ca0132 - Add quirk ID and enum " Sasha Levin
2018-08-30 20:08 ` Takashi Iwai
2018-08-30 20:10 ` Connor McAdams
2018-08-31 16:07 ` Sasha Levin
2018-09-02 6:30 ` Takashi Iwai
2018-09-02 12:56 ` Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 079/113] ALSA: hda/ca0132 - Add alt_functions unsolicited response Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 080/113] Input: do not use WARN() in input_alloc_absinfo() Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 081/113] xen/balloon: fix balloon initialization for PVH Dom0 Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 082/113] PCI: mvebu: Fix I/O space end address calculation Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 083/113] dm kcopyd: avoid softlockup in run_complete_job Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 084/113] staging: comedi: ni_mio_common: fix subdevice flags for PFI subdevice Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 085/113] ASoC: rt5677: Fix initialization of rt5677_of_match.data Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 086/113] iommu/omap: Fix cache flushes on L2 table entries Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 087/113] selftests/powerpc: Kill child processes on SIGINT Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 088/113] selinux: cleanup dentry and inodes on error in selinuxfs Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 089/113] RDS: IB: fix 'passing zero to ERR_PTR()' warning Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 090/113] cfq: Suppress compiler warnings about comparisons Sasha Levin
2018-08-30 18:07 ` [PATCH AUTOSEL 4.18 091/113] smb3: fix reset of bytes read and written stats Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 092/113] CIFS: fix memory leak and remove dead code Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 093/113] SMB3: Number of requests sent should be displayed for SMB3 not just CIFS Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 094/113] smb3: if server does not support posix do not allow posix mount option Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 095/113] powerpc/platforms/85xx: fix t1042rdb_diu.c build errors & warning Sasha Levin
2018-08-30 18:08 ` Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 096/113] powerpc/64s: Make rfi_flush_fallback a little more robust Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 097/113] um: fix parallel building with O= option Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 098/113] powerpc/pseries: Avoid using the size greater than RTAS_ERROR_LOG_MAX Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 099/113] clk: rockchip: Add pclk_rkpwm_pmu to PMU critical clocks in rk3399 Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 100/113] drm/amd/display: Read back max backlight value at boot Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 101/113] KVM: vmx: track host_state.loaded using a loaded_vmcs pointer Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 102/113] kvm: nVMX: Fix fault vector for VMX operation at CPL > 0 Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 103/113] drm/etnaviv: fix crash in GPU suspend when init failed due to buffer placement Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 104/113] btrfs: Exit gracefully when chunk map cannot be inserted to the tree Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 105/113] btrfs: replace: Reset on-disk dev stats value after replace Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 106/113] btrfs: fix in-memory value of total_devices after seed device deletion Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 107/113] btrfs: Rewrite retry logic in do_chunk_alloc Sasha Levin
2018-09-05 9:22 ` David Sterba
2018-09-07 0:16 ` Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 108/113] btrfs: relocation: Only remove reloc rb_trees if reloc control has been initialized Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 109/113] btrfs: tree-checker: Detect invalid and empty essential trees Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 110/113] btrfs: check-integrity: Fix NULL pointer dereference for degraded mount Sasha Levin
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 111/113] btrfs: lift uuid_mutex to callers of btrfs_open_devices Sasha Levin
2018-09-05 9:29 ` David Sterba
2018-09-07 0:17 ` Sasha Levin
2018-08-30 18:08 ` Sasha Levin [this message]
2018-08-30 18:08 ` [PATCH AUTOSEL 4.18 113/113] btrfs: Fix a C compliance issue Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180830180714.36167-46-alexander.levin@microsoft.com \
--to=alexander.levin@microsoft.com \
--cc=dsterba@suse.com \
--cc=stable@vger.kernel.org \
--cc=wqu@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.