Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
xfs: protect xfs_sync_worker with s_umount semaphore
xfs_sync_worker checks the MS_ACTIVE flag in s_flags to avoid doing work during mount and unmount. This flag can be cleared by unmount after the xfs_sync_worker checks it but before the work is completed. The has caused crashes in the completion handler for the dummy transaction commited by xfs_sync_worker: PID: 27544 TASK: ffff88013544e040 CPU: 3 COMMAND: "kworker/3:0" #0 [ffff88016fdff930] machine_kexec at ffffffff810244e9 #1 [ffff88016fdff9a0] crash_kexec at ffffffff8108d053 imx6-dongle#2 [ffff88016fdffa70] oops_end at ffffffff813ad1b8 imx6-dongle#3 [ffff88016fdffaa0] no_context at ffffffff8102bd48 imx6-dongle#4 [ffff88016fdffaf0] __bad_area_nosemaphore at ffffffff8102c04d imx6-dongle#5 [ffff88016fdffb40] bad_area_nosemaphore at ffffffff8102c12e imx6-dongle#6 [ffff88016fdffb50] do_page_fault at ffffffff813afaee imx6-dongle#7 [ffff88016fdffc60] page_fault at ffffffff813ac635 [exception RIP: xlog_get_lowest_lsn+0x30] RIP: ffffffffa04a9910 RSP: ffff88016fdffd10 RFLAGS: 00010246 RAX: ffffc90014e48000 RBX: ffff88014d879980 RCX: ffff88014d879980 RDX: ffff8802214ee4c0 RSI: 0000000000000000 RDI: 0000000000000000 RBP: ffff88016fdffd10 R8: ffff88014d879a80 R9: 0000000000000000 R10: 0000000000000001 R11: 0000000000000000 R12: ffff8802214ee400 R13: ffff88014d879980 R14: 0000000000000000 R15: ffff88022fd96605 ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018 imx6-dongle#8 [ffff88016fdffd18] xlog_state_do_callback at ffffffffa04aa186 [xfs] imx6-dongle#9 [ffff88016fdffd98] xlog_state_done_syncing at ffffffffa04aa568 [xfs] Protect xfs_sync_worker by using the s_umount semaphore at the read level to provide exclusion with unmount while work is progressing. Reviewed-by: Mark Tinguely <[email protected]> Signed-off-by: Ben Myers <[email protected]>
- Loading branch information