This is an update an repost of the start of a series I posted back
in December. It has been rebased on top of Christoph's ilock hold
reduction and xfsbufd removal patch series, as well as all the
outstanding patches I've sent out recently, so I guarantee it won't
apply to a dev tree cleanly.
Basically 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.
Ther's nothing controversial here (at least, not from the raction to
the first posting). It lays the groundwork for introducing
compound buffers, and those are needed to be able to remove the
intermediate xfs_dabuf that the directory code uses for
discontiguous large directory blocks. This will then allow all
metadata types to use the the buffer cache to trigger CRC
calculations on immediately after read (validation) and prior
to write (calculation).
The compound buffer patches will follow soon - i'm trying to break
this up into bite-sized chunks so that reviewers have a chance to
keep up with the rate can test them and I post them...