On Thu, Jun 28, 2018 at 06:07:47PM -0600, Andreas Dilger wrote: > > But does an RDMA operation actually do a block allocation? Really? > > And if it is willing to do a block allocation, why is it not willing > > to bump i_size? > > It's not that the RDMA does block allocation, but rather that the RDMA > always transfers and writes the full PAGE_SIZE of data, even if i_size > is less than the end of the last block. This simplifies the RDMA code > so that it can always write the data instead of having to stop at i_size. Right. So there are two choices: 1) Keep the blocks beyond i_size marked as uninitialized. You transfer and write the full PAGE_SIZE of data, but it simply will never be available to the user. 2) Zero the page, write it out to the file, and then extend i_size and mark the extents as uninitialized. Why is it that Lustre is choosing to keep i_size where it is, but to mark the blocks beyond it as initialized? - Ted