lift the xfs writepage code into iomap v8

From: Christoph Hellwig
Date: Thu Oct 17 2019 - 13:56:32 EST

Hi Darrick,

this series cleans up the xfs writepage code and then lifts it to
fs/iomap/ so that it could be use by other file system.

Note: the submit_ioend hook has not been renamed. Feel free to
rename it if you really dislike the name.

Changes since v7:
- fix various commit log typos
- fix up various comments
- move some of the iomap tracepoint additions to an earlier patch
- rebased on top of "iomap: iomap that extends beyond EOF should be
marked dirty"

Changes since v6:
- actually add trace.c to the patch
- move back to the old order that massages XFS into shape and then
lifts the code to iomap
- cleanup iomap_ioend_compare
- cleanup the add_to_ioend checks

Changes since v5:
- move the tracing code to fs/iomap/trace.[ch]
- fix a bisection issue with the tracing code
- add an assert that xfs_end_io now only gets "complicated" completions
- better document the iomap_writeback_ops methods in iomap.h

Changes since v4:
- rebased on top 5.4-rc1
- drop the addition of list_pop / list_pop_entry
- re-split a few patches to better fit Darricks scheme of keeping the
iomap additions separate from the XFS switchover

Changes since v3:
- re-split the pages to add new code to iomap and then switch xfs to
it later (Darrick)

Changes since v2:
- rebased to v5.3-rc1
- folded in a few changes from the gfs2 enablement series

Changes since v1:
- rebased to the latest xfs for-next tree
- keep the preallocated transactions for size updates
- rename list_pop to list_pop_entry and related cleanups
- better document the nofs context handling
- document that the iomap tracepoints are not a stable API