]> git.apps.os.sepia.ceph.com Git - xfstests-dev.git/commit
generic: test writev with page fault when it processes iov
authorZorro Lang <zlang@redhat.com>
Thu, 22 Jun 2017 05:55:33 +0000 (13:55 +0800)
committerEryu Guan <eguan@redhat.com>
Thu, 22 Jun 2017 06:30:41 +0000 (14:30 +0800)
commita8b4891d0f90734a77aaf9028d04326b409b91a9
tree503c48f277ffec7f6b415309d5f4bac21398c1a2
parent5d599421defe96b9c604d6e3f9fc23d81eb3b4d0
generic: test writev with page fault when it processes iov

We met a kernel assertion failure recently as below:

  XFS: Assertion failed: tp->t_blk_res_used <= tp->t_blk_res, file: fs/xfs/xfs_trans.c, line: 309

Eric Sandeen digged into it and find a good reproducer.

The problem comes when the several IO vectors are copied in, and
it runs into page faults, which stops the copy before all vectors
are copied. XFS sees this as a failed/short write, and so tries
to unmap the blocks & truncate away the pages in xfs_vm_write_end.

generic_perform_write is looping, and comes back around for the
other iovecs, but the page is still there, the buffer head is still
mapped, and so a new delalloc block isn't allocated - and ends up
being allocated at writeback time, despite the fact that we "should"
have accounted for it all at delalloc write time, and trips the
assert.

Signed-off-by: Zorro Lang <zlang@redhat.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
.gitignore
src/Makefile
src/writev_on_pagefault.c [new file with mode: 0644]
tests/generic/443 [new file with mode: 0755]
tests/generic/443.out [new file with mode: 0644]
tests/generic/group