On Fri, 2021-06-11 at 10:14 -0400, Andrew W Elble wrote: > We're seeing file corruption while running 5.10, bisected to 1cc1699070bd: > > > > +static int ceph_write_begin(struct file *file, struct address_space *mapping, > > > + loff_t pos, unsigned len, unsigned flags, > > > + struct page **pagep, void **fsdata) > > <snip> > > > > + /* > > > + * In some cases we don't need to read at all: > > > + * - full page write > > > + * - write that lies completely beyond EOF > > > + * - write that covers the the page from start to EOF or beyond it > > > + */ > > > + if ((pos_in_page == 0 && len == PAGE_SIZE) || > > > + (pos >= i_size_read(inode)) || > > Shouldn't this be '((pos & PAGE_MASK) >= i_size_read(inode)) ||' ? > > Seems like fs/netfs/read_helper.c currently has the same issue? > Yeah...I think you may be right. Have you tried a patch that does that and does it fix the issue? Also, do you happen to have a testcase that we could stick in xfstests for this? If not, we can probably write one, but if you already have one that'd be great. > > > + (pos_in_page == 0 && (pos + len) >= i_size_read(inode))) { > > > + zero_user_segments(page, 0, pos_in_page, > > > + pos_in_page + len, PAGE_SIZE); > > > + break; > > > + } > -- Jeff Layton <jlayton@xxxxxxxxxx>