Filipe Manana
212a58fda9
btrfs: fix warning when freeing leaf after subvolume creation failure
When creating a subvolume, at ioctl.c:create_subvol(), if we fail to
insert the root item for the new subvolume into the root tree, we can
trigger the following warning:
[78961.741046] WARNING: CPU: 0 PID: 4079814 at fs/btrfs/extent-tree.c:3357 btrfs_free_tree_block+0x2af/0x310 [btrfs]
[78961.743344] Modules linked in:
[78961.749440] dm_snapshot dm_thin_pool (...)
[78961.773648] CPU: 0 PID: 4079814 Comm: fsstress Not tainted 5.16.0-rc4-btrfs-next-108 #1
[78961.775198] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
[78961.777266] RIP: 0010:btrfs_free_tree_block+0x2af/0x310 [btrfs]
[78961.778398] Code: 17 00 48 85 (...)
[78961.781067] RSP: 0018:ffffaa4001657b28 EFLAGS: 00010202
[78961.781877] RAX: 0000000000000213 RBX: ffff897f8a796910 RCX: 0000000000000000
[78961.782780] RDX: 0000000000000000 RSI: 0000000011004000 RDI: 00000000ffffffff
[78961.783764] RBP: ffff8981f490e800 R08: 0000000000000001 R09: 0000000000000000
[78961.784740] R10: 0000000000000000 R11: 0000000000000001 R12: ffff897fc963fcc8
[78961.785665] R13: 0000000000000001 R14: ffff898063548000 R15: ffff898063548000
[78961.786620] FS: 00007f31283c6b80(0000) GS:ffff8982ace00000(0000) knlGS:0000000000000000
[78961.787717] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[78961.788598] CR2: 00007f31285c3000 CR3: 000000023fcc8003 CR4: 0000000000370ef0
[78961.789568] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[78961.790585] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[78961.791684] Call Trace:
[78961.792082] <TASK>
[78961.792359] create_subvol+0x5d1/0x9a0 [btrfs]
[78961.793054] btrfs_mksubvol+0x447/0x4c0 [btrfs]
[78961.794009] ? preempt_count_add+0x49/0xa0
[78961.794705] __btrfs_ioctl_snap_create+0x123/0x190 [btrfs]
[78961.795712] ? _copy_from_user+0x66/0xa0
[78961.796382] btrfs_ioctl_snap_create_v2+0xbb/0x140 [btrfs]
[78961.797392] btrfs_ioctl+0xd1e/0x35c0 [btrfs]
[78961.798172] ? __slab_free+0x10a/0x360
[78961.798820] ? rcu_read_lock_sched_held+0x12/0x60
[78961.799664] ? lock_release+0x223/0x4a0
[78961.800321] ? lock_acquired+0x19f/0x420
[78961.800992] ? rcu_read_lock_sched_held+0x12/0x60
[78961.801796] ? trace_hardirqs_on+0x1b/0xe0
[78961.802495] ? _raw_spin_unlock_irqrestore+0x3e/0x60
[78961.803358] ? kmem_cache_free+0x321/0x3c0
[78961.804071] ? __x64_sys_ioctl+0x83/0xb0
[78961.804711] __x64_sys_ioctl+0x83/0xb0
[78961.805348] do_syscall_64+0x3b/0xc0
[78961.805969] entry_SYSCALL_64_after_hwframe+0x44/0xae
[78961.806830] RIP: 0033:0x7f31284bc957
[78961.807517] Code: 3c 1c 48 f7 d8 (...)
This is because we are calling btrfs_free_tree_block() on an extent
buffer that is dirty. Fix that by cleaning the extent buffer, with
btrfs_clean_tree_block(), before freeing it.
This was triggered by test case generic/475 from fstests.
Fixes: 67addf29004c5b ("btrfs: fix metadata extent leak after failure to create subvolume")
CC: stable@vger.kernel.org # 4.4+
Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
2021-12-15 17:07:33 +01:00
..
2021-10-04 22:07:46 +01:00
2021-06-29 10:53:48 -07:00
2021-06-29 10:53:48 -07:00
2021-10-07 11:20:08 -07:00
2021-10-20 21:09:02 -04:00
2021-08-19 09:02:55 +09:00
2021-06-29 10:53:48 -07:00
2021-12-15 17:07:33 +01:00
2021-08-27 13:34:02 +01:00
2021-10-19 09:36:06 +02:00
2021-09-23 21:12:53 -05:00
2021-04-23 14:42:39 -07:00
2021-08-25 07:58:49 +02:00
2021-07-25 20:47:05 -07:00
2021-09-21 09:09:06 +02:00
2021-09-01 11:29:14 -05:00
2021-06-29 10:53:48 -07:00
2021-04-12 15:04:29 +02:00
2021-09-23 23:23:04 +08:00
2021-07-06 11:06:04 -07:00
2021-09-22 13:05:23 +02:00
2021-10-03 13:56:53 -07:00
2021-09-04 10:48:47 -07:00
2021-09-02 12:32:12 -07:00
2021-10-04 22:13:12 +01:00
2021-10-21 10:01:39 +02:00
2021-09-09 12:45:26 -07:00
2021-07-15 10:13:49 -07:00
2021-07-01 11:06:06 -07:00
2021-08-26 22:28:02 +02:00
2021-07-27 11:00:36 +02:00
2021-07-23 17:43:28 -07:00
2021-08-26 09:18:53 -07:00
2021-08-12 16:07:14 +02:00
2021-08-30 23:36:50 -04:00
2021-08-18 22:08:24 +02:00
2021-08-18 22:08:24 +02:00
2021-10-04 10:27:18 +02:00
2021-10-20 00:07:10 -05:00
2021-09-22 09:21:02 -07:00
2021-06-29 10:53:48 -07:00
2021-10-05 11:22:06 +01:00
2021-09-04 10:25:26 -07:00
2021-10-04 22:02:17 +01:00
2021-10-07 14:11:40 -07:00
2021-09-08 12:55:35 -07:00
2021-09-10 09:46:48 -07:00
2021-07-03 11:30:04 -07:00
2021-10-15 09:58:11 -04:00
2021-10-18 20:22:03 -10:00
2021-06-29 10:53:48 -07:00
2021-03-12 22:15:22 -05:00
2021-08-18 22:08:24 +02:00
2021-09-28 09:16:12 +02:00
2021-09-08 12:55:35 -07:00
2021-06-30 12:21:16 -07:00
2021-09-21 08:36:48 -07:00
2021-06-22 10:40:52 +02:00
2021-06-29 10:53:48 -07:00
2021-09-03 15:33:47 -07:00
2021-09-13 14:51:10 -05:00
2021-08-16 10:50:32 -06:00
2021-08-06 13:05:28 +02:00
2021-06-29 10:53:48 -07:00
2021-03-23 14:08:18 -04:00
2021-07-25 20:01:07 -07:00
2021-08-23 13:35:19 +02:00
2021-08-19 09:02:55 +09:00
2021-05-02 00:43:35 +09:00
2021-09-27 11:26:21 -07:00
2021-09-22 10:56:34 -07:00
2021-09-09 11:39:57 -07:00
2021-08-30 10:24:50 -07:00
2021-08-28 01:33:02 +02:00
2021-08-13 00:41:05 -04:00
2021-08-18 22:08:24 +02:00
2021-09-05 10:15:05 -07:00
2021-09-03 18:42:01 +02:00
2021-10-03 14:02:58 -07:00
2021-06-29 10:53:50 -07:00
2021-03-13 11:27:30 -08:00
2021-09-24 16:13:35 -07:00
2021-09-08 11:50:27 -07:00
2021-09-02 10:07:29 -07:00
2021-08-31 11:13:35 -07:00
2021-04-15 22:36:45 -04:00
2021-04-09 14:54:23 -07:00
2021-09-03 09:58:10 -07:00
2021-09-06 07:20:56 -04:00
2021-09-09 13:25:49 -07:00
2021-09-04 11:35:47 -07:00
2021-09-03 10:08:28 -07:00
2021-04-07 13:56:43 -04:00
2021-09-11 14:48:42 -07:00
2021-08-23 01:25:40 -04:00
2021-09-03 09:58:12 -07:00
2021-09-07 16:07:47 -04:00
2021-09-03 10:08:28 -07:00
2021-10-26 19:08:08 +02:00
2021-09-07 08:39:40 -06:00
2021-10-21 11:19:38 -06:00
2021-10-19 17:09:34 -06:00
2021-08-29 07:55:55 -06:00
2021-08-31 11:06:32 -07:00
2021-09-12 10:10:21 -07:00
2021-07-25 22:33:03 -07:00
2021-10-18 20:22:03 -10:00
2021-06-29 10:53:48 -07:00
2021-09-07 11:21:48 -07:00
2021-09-12 10:10:21 -07:00
2021-03-11 07:47:48 -07:00
2021-09-07 16:14:05 -04:00
2021-09-03 10:08:28 -07:00
2021-08-23 06:15:36 -04:00
2021-09-07 11:03:45 -07:00
2021-03-08 15:18:43 +01:00
2021-08-18 22:08:24 +02:00
2021-08-24 07:52:45 -04:00
2021-04-17 11:39:49 -07:00
2021-08-23 06:15:36 -04:00
2021-09-07 11:26:23 -07:00
2021-07-19 17:18:48 -07:00
2021-07-23 13:16:43 -05:00
2021-08-17 11:47:43 +02:00
2021-08-09 11:53:26 -06:00
2021-08-10 17:57:22 +02:00
2021-10-18 20:22:02 -10:00
2021-03-23 11:20:26 +01:00