This series cleans up the buffer cache API to use daddr formats for
block numbers and basic blocks for lengths when trying to get or
read a buffer and from there cleans up the internal usage of the
same thing. Essentially we end up with tracking buffers by their
daddr blkno, and BB based length, including the length of the IO
needed to do out of the buffer. The b_offset field is still in
bytes, as that is mostly used as a byte offset into the allocated
memory that the buffer holds, rather than a disk based offset.
Version 2:
- new patch 1, fixes hang in log reading code when trying to find
the head and IO dispatch returns EIO. Generic fix for the same
problem for all IO dispatched via xfsbdstrat() and then waited on
via xfs_buf_iowait().
- new patch 2, fixes EIO during IO dispatch reading uncached buffers
when page size unaligned, subpage-sized multi-block buffers are
incorrectly required to need multiple pages due to invalid
b_offset. This was triggered by log recovery when finding the head
of the log, and caused the hang fixed in patch 1. Problem was
reliably triggered by patch 5, though there is no obvious reason
that I can find for any of those changes to have tripped over this
landmine.
- new patch 3, clean, noticed when trying to work out why b_offset
wasn't zero find the problem fixed in patch 2.
- patch 4-7, updated according to Christoph's comments
- new patch 8, kills the xfs_buf_btoc (and related) macros as
suggested by Christoph.
|