This patchset describes a possible solution to solve whole page I/O issue present in Btrfs. Currently whole page I/O is being performed because bio_vec->[bv_len, bv_offset] can be modified by the Block I/O layer and hence cannot be used by Btrfs's endio functions to operate on the original file offset range that the bio was intended for.
This patch is a precursor to get subpagesize-blocksize Btrfs feature to work correctly as it would be required to do non-whole page I/O. The patchset makes use of patches posted earlier by Chandra Seetharaman (http://article.gmane.org/gmane.comp.file-systems.btrfs/30737). I believe that getting non whole page I/O to work properly is the first issue to tackle before working on the review comments posted for Chandra's patches. Please correct me if my assumption is incorrect. The patchset has been tested with only a handful of trivial I/O tests i.e. I/O on different kinds of files (e.g. files with holes, etc). The tests were run on 2k and 4k blocksized instances of Btrfs code (on x86_64) that has initial support for mounting a 2k blocksized Btrfs filesystem. The corresponding git trees can be found at https://github.com/chandanr/btrfs-progs/tree/subpagesize-blocksize and https://github.com/chandanr/linux/tree/btrfs/subpagesize-blocksize The modified code is limited in feature i.e. the following are its known limitations, 1. xfstests suite has not been executed. 2. Direct I/O has not been tested. 3. Compression does not work with 2k blocksize filesystem instance. 4. fallocate does not work with 2k blocksize. 5. Data checksum does not work for 2k blocksize. Hence filesystem should be mounted by passing the nodatasum option. 6. Performance implications are unknown. Chandan Rajendra (4): Btrfs: subpagesize-blocksize: Get rid of whole page reads. Btrfs: subpagesize-blocksize: Get rid of whole page writes. Btrfs: subpagesize-blocksize: Work with extents aligned to blocksize. Btrfs: subpagesize-blocksize: Hardcode MAX_EXTENT_BUFFERS_PER_PAGE to 2. Chandra Seetharaman (2): Btrfs: subpagesize-blocksize: Define extent_buffer_head Btrfs: subpagesize-blocksize: Allow mounting filesystems where sectorsize != PAGE_SIZE fs/btrfs/backref.c | 2 +- fs/btrfs/ctree.c | 2 +- fs/btrfs/ctree.h | 6 +- fs/btrfs/disk-io.c | 117 ++++---- fs/btrfs/extent-tree.c | 6 +- fs/btrfs/extent_io.c | 623 ++++++++++++++++++++++++++++--------------- fs/btrfs/extent_io.h | 60 ++++- fs/btrfs/file.c | 13 +- fs/btrfs/volumes.c | 2 +- fs/btrfs/volumes.h | 3 + include/trace/events/btrfs.h | 2 +- 11 files changed, 554 insertions(+), 282 deletions(-) -- 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html