The following call trace is seen when btrfs/031 test is executed in a loop,
[ 158.661848] ------------[ cut here ]------------
[ 158.662634] WARNING: CPU: 2 PID: 890 at /home/chandan/repos/linux/fs/btrfs/ioctl.c:558 create_subvol+0x3d1/0x6ea()
[ 158.664102] BTRFS: Transaction aborted (error -2)
[ 158.664774] Modules linked in:
[ 158.665266] CPU: 2 PID: 890 Comm: btrfs Not tainted 4.4.0-rc6-g511711a #2
[ 158.666251] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011
[ 158.667392] ffffffff81c0a6b0 ffff8806c7c4f8e8 ffffffff81431fc8 ffff8806c7c4f930
[ 158.668515] ffff8806c7c4f920 ffffffff81051aa1 ffff880c85aff000 ffff8800bb44d000
[ 158.669647] ffff8808863b5c98 0000000000000000 00000000fffffffe ffff8806c7c4f980
[ 158.670769] Call Trace:
[ 158.671153] [] dump_stack+0x44/0x5c
[ 158.671884] [] warn_slowpath_common+0x81/0xc0
[ 158.672769] [] warn_slowpath_fmt+0x47/0x50
[ 158.673620] [] create_subvol+0x3d1/0x6ea
[ 158.674440] [] btrfs_mksubvol.isra.30+0x369/0x520
[ 158.675376] [] ? percpu_down_read+0x1a/0x50
[ 158.676235] [] btrfs_ioctl_snap_create_transid+0x101/0x180
[ 158.677268] [] btrfs_ioctl_snap_create+0x52/0x70
[ 158.678183] [] btrfs_ioctl+0x474/0x2f90
[ 158.678975] [] ? vma_merge+0xee/0x300
[ 158.679751] [] ? alloc_pages_vma+0x91/0x170
[ 158.680599] [] ? lru_cache_add_active_or_unevictable+0x22/0x70
[ 158.681686] [] ? selinux_file_ioctl+0xff/0x1d0
[ 158.682581] [] do_vfs_ioctl+0x2c1/0x490
[ 158.683399] [] ? security_file_ioctl+0x3e/0x60
[ 158.684297] [] SyS_ioctl+0x74/0x80
[ 158.685051] [] entry_SYSCALL_64_fastpath+0x12/0x6a
[ 158.685958] ---[ end trace 4b63312de5a2cb76 ]---
[ 158.686647] BTRFS: error (device loop0) in create_subvol:558: errno=-2 No such entry
[ 158.709508] BTRFS info (device loop0): forced readonly
[ 158.737113] BTRFS info (device loop0): disk space caching is enabled
[ 158.738096] BTRFS error (device loop0): Remounting read-write after error is not allowed
[ 158.851303] BTRFS error (device loop0): cleaner transaction attach returned -30
This occurs because,
Mount filesystem
Create subvol with ID 257
Unmount filesystem
Mount filesystem
Delete subvol with ID 257
btrfs_drop_snapshot()
Add root corresponding to subvol 257 into
btrfs_transaction->dropped_roots list
Create new subvol (i.e. create_subvol())
257 is returned as the next free objectid
btrfs_read_fs_root_no_name()
Finds the btrfs_root instance corresponding to the old subvol with ID 257
in btrfs_fs_info->fs_roots_radix.
Returns error since btrfs_root_item->refs has the value of 0.
To fix the issue the commit initializes tree root's and subvolume root's
highest_objectid when loading the roots from disk.
Signed-off-by: Chandan Rajendra
Signed-off-by: David Sterba