Bug ID 1047152
Summary btrfs: BTRFS_QUOTA_CTL_DISABLE causes hang
Classification openSUSE
Product openSUSE Tumbleweed
Version Current
Hardware Other
OS Other
Status NEW
Severity Normal
Priority P5 - None
Component Kernel
Assignee kernel-maintainers@forge.provo.novell.com
Reporter asarai@suse.com
QA Contact qa-bugs@suse.de
Found By ---
Blocker ---

When running Docker with the btrfs storage driver I noticed that my entire
machine would grind to a halt when killing the process. After some debugging I
found that Docker is calling a btrfs ioctl [ioctl(BTRFS_IOC_QUOTA_CTL,
BTRFS_QUOTA_CTL_DISABLE)] which is never returning to the userspace program due
to some sort of kernel hangup. I've attached a sample program which will cause
this hangup without the use of Docker.

Of course, this sort of hangup cannot be happening on every system (otherwise
someone other than me would've noticed). I've previously helped Rafael debug
similar problems and we concluded that the issue was related to filesystem
corruption -- specifically the fs_info->qgroup_rescan_running flag is set even
though there is no rescan running [causing
wait_for_completion(&fs_info->qgroup_rescan_completion) to fail].

If you run the attached program and check the contents of /proc/$pid/stack you
see that it is blocked in btrfs_qgroup_wait_for_completion, which would make
sense normally because this happens even on a fresh reboot of my machine (where
there are no qgroup rescans running).

% cat /proc/$pid/stack
[<ffffffffc0cfd42b>] btrfs_qgroup_wait_for_completion+0x7b/0xd0 [btrfs]
[<ffffffffc0cfd4f3>] btrfs_quota_disable+0x73/0x3b0 [btrfs]
[<ffffffffc0ca2484>] btrfs_ioctl+0xc34/0x2a70 [btrfs]
[<ffffffffb14a7ed5>] do_vfs_ioctl+0xb5/0x9b0
[<ffffffffb14a8849>] SyS_ioctl+0x79/0x90
[<ffffffffb1e9d0c5>] entry_SYSCALL_64_fastpath+0x23/0xc2
[<ffffffffffffffff>] 0xffffffffffffffff


You are receiving this mail because: