aio: fix freeze protection of aio writes
authorJan Kara <jack@suse.cz>
Sun, 30 Oct 2016 16:42:04 +0000 (11:42 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 30 Oct 2016 17:09:42 +0000 (13:09 -0400)
commit70fe2f48152e60664809e2fed76bbb50c9fa2aa3
treec5797bacdc9175af6658c9548387b52749cda6ee
parent89319d31d2d097da8e27fb0e0ae9d532f4f16827
aio: fix freeze protection of aio writes

Currently we dropped freeze protection of aio writes just after IO was
submitted. Thus aio write could be in flight while the filesystem was
frozen and that could result in unexpected situation like aio completion
wanting to convert extent type on frozen filesystem. Testcase from
Dmitry triggering this is like:

for ((i=0;i<60;i++));do fsfreeze -f /mnt ;sleep 1;fsfreeze -u /mnt;done &
fio --bs=4k --ioengine=libaio --iodepth=128 --size=1g --direct=1 \
    --runtime=60 --filename=/mnt/file --name=rand-write --rw=randwrite

Fix the problem by dropping freeze protection only once IO is completed
in aio_complete().

Reported-by: Dmitry Monakhov <dmonakhov@openvz.org>
Signed-off-by: Jan Kara <jack@suse.cz>
[hch: forward ported on top of various VFS and aio changes]
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/aio.c
include/linux/fs.h