I think there is an issue here when `length` is a multiple of `PAGE_SIZE`: for example I think a length of `2*PAGE_SIZE` with `offset == 0` should use 2 buffers, but when I do the math here, this gives: `(2*PAGE_SIZE / PAGE_SIZE) + 1 = 3`.