On 18/1/17 22:25, Matthew Wilcox wrote: > On Wed, Jan 17, 2018 at 10:09:28AM +0000, Steven Whitehouse wrote: >> Hi, >> >> >> On 17/01/18 09:28, Joseph Qi wrote: >>> Hi All, >>> >>> commit 9fe55eea7e4b ("Fix race when checking i_size on direct i/o read") >>> has removed the pos check due to the race case. >>> >>> Now if I want to do direct read on a file which size is not sector >>> alignment, it will return EINVAL in the last round. That means I have to >>> handle the case by checking file size in user space, which I think is a >>> bit inconvenient. >> What do you mean by "not sector alignment"? Are you intending to read files >> with any arbitrary size, or those with 512 byte alignment on a filesystem >> with some larger block size, or something else? > I think he's saying that the file he's trying to read has a length which > is not a multiple of 512. Yes, suppose I am trying to read a file which size is 4000 bytes, and the allocated buffer is 4096 bytes. When running my test program, it returns 4000 for the first round and -22 for the second. While running my test program on 3.10, it returns 4000 and then 0, which is my expected behavior. Sorry for the brought misunderstanding.