Because I've seen some issues with the amount of overhead we spend
in the bmap btree when using reflinks I though I'd dust up the
multipage write code again. This was first started by Dave Chinner
a long time ago, then I did beat it into shape for production runs
in a very constrained ARM NAS enviroment for Tuxera almost as long
ago, and now half a dozen rewrites later it's back.
The basic idea is to avoid the crazy per-block get_blocks overhead
and make use of extents in the buffered write path by iterating over
them instead.
I could probably write a lot more here, but for now I'd like people
to take a look at this version. It passes xfstests fine on blocksize ==
PAGE_SIZE setups, but I haven't done much testing with small block
sizes yet.
|