]> git.baikalelectronics.ru Git - kernel.git/commit
btrfs: qgroup: Fix root item corruption when multiple same source snapshots are creat...
authorQu Wenruo <wqu@suse.com>
Tue, 19 Dec 2017 07:44:54 +0000 (15:44 +0800)
committerDavid Sterba <dsterba@suse.com>
Fri, 30 Mar 2018 23:26:51 +0000 (01:26 +0200)
commita03f125e3b21589e088699206e64ff1cef6a8530
treeb155b504dd78259082db954b4436be35680c650b
parent89da1ff9a1a4b60478ed968c81e5c95e997fef64
btrfs: qgroup: Fix root item corruption when multiple same source snapshots are created with quota enabled

When multiple pending snapshots referring to the same source subvolume
are executed, enabled quota will cause root item corruption, where root
items are using old bytenr (no backref in extent tree).

This can be triggered by fstests btrfs/152.

The cause is when source subvolume is still dirty, extra commit
(simplied transaction commit) of qgroup_account_snapshot() can skip
dirty roots not recorded in current transaction, making root item of
source subvolume not updated.

Fix it by forcing recording source subvolume in current transaction
before qgroup sub-transaction commit.

Reported-by: Justin Maggard <jmaggard@netgear.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/transaction.c