A bug was triggered while using seed device:
# mkfs.btrfs /dev/loop1
# btrfstune -S 1 /dev/loop1
# mount -o /dev/loop1 /mnt
# btrfs dev add /dev/loop2 /mnt
btrfs: block rsv returned -28
------------[ cut here ]------------
WARNING: at fs/btrfs/extent-tree.c:5969 btrfs_alloc_free_block+0x166/0x396 [btrfs]()
...
Call Trace:
...
[<
f7b7c31c>] btrfs_cow_block+0x101/0x147 [btrfs]
[<
f7b7eaa6>] btrfs_search_slot+0x1b8/0x55f [btrfs]
[<
f7b7f844>] btrfs_insert_empty_items+0x42/0x7f [btrfs]
[<
f7b7f8c1>] btrfs_insert_item+0x40/0x7e [btrfs]
[<
f7b8ac02>] btrfs_make_block_group+0x243/0x2aa [btrfs]
[<
f7bb3f53>] __btrfs_alloc_chunk+0x672/0x70e [btrfs]
[<
f7bb41ff>] init_first_rw_device+0x77/0x13c [btrfs]
[<
f7bb5a62>] btrfs_init_new_device+0x664/0x9fd [btrfs]
[<
f7bbb65a>] btrfs_ioctl+0x694/0xdbe [btrfs]
[<
c04f55f7>] do_vfs_ioctl+0x496/0x4cc
[<
c04f5660>] sys_ioctl+0x33/0x4f
[<
c07b9edf>] sysenter_do_call+0x12/0x38
---[ end trace
906adac595facc7d ]---
Since seed device is readonly, there's no usable space in the filesystem.
Afterwards we add a sprout device to it, and the kernel creates a METADATA
block group and a SYSTEM block group where comes free space we can reserve,
but we still get revervation failure because the global block_rsv hasn't
been updated accordingly.
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>