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