Back in ancient LSM times these functions to read and write the super
block reused the bio functions that LSM segment IO used. Each IO would
be performed with privately allocated pages and bios.
When we got rid of the LSM code we got rid of the bio functions. It was
quick and easy to transition super read/write to use buffer_heads. This
introduced sharing of the super's buffer_head between readers and
writers. First we saw concurrent readers being confused by the uptodate
bit and added a bunch of complexity to coordinate use of the uptodate
bit.
Now we're seeing the writer copy its super for writing into the buffer
that readers are using, causing crc failures on read. Let's not use
buffer_heads anymore (always good advice).
We added quick block functions to read and write small blocks with
private pages and bios. Use those here to read and write the super so
that readers and writers operate on their own buffers again.
Signed-off-by: Zach Brown <zab@versity.com>