summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2018-07-11 22:26:05 -0700
committerDarrick J. Wong <darrick.wong@oracle.com>2018-07-11 22:26:05 -0700
commit9dc55f1389f9569acf9659e58dd836a9c70df217 (patch)
tree19c3e0cce9b48c05bce20a5ea14ccfc8750af0bf /tools
parentac8ee54669c07e6b38b4cae13a65f5ec06a11323 (diff)
downloadlinux-9dc55f1389f9569acf9659e58dd836a9c70df217.tar.bz2
iomap: add support for sub-pagesize buffered I/O without buffer heads
After already supporting a simple implementation of buffered writes for the blocksize == PAGE_SIZE case in the last commit this adds full support even for smaller block sizes. There are three bits of per-block information in the buffer_head structure that really matter for the iomap read and write path: - uptodate status (BH_uptodate) - marked as currently under read I/O (BH_Async_Read) - marked as currently under write I/O (BH_Async_Write) Instead of having new per-block structures this now adds a per-page structure called struct iomap_page to track this information in a slightly different form: - a bitmap for the per-block uptodate status. For worst case of a 64k page size system this bitmap needs to contain 128 bits. For the typical 4k page size case it only needs 8 bits, although we still need a full unsigned long due to the way the atomic bitmap API works. - two atomic_t counters are used to track the outstanding read and write counts There is quite a bit of boilerplate code as the buffered I/O path uses various helper methods, but the actual code is very straight forward. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Diffstat (limited to 'tools')
0 files changed, 0 insertions, 0 deletions