David Howells <dhowells@xxxxxxxxxx> writes: > Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: > >> Yes. I do that kind of thing in iomap. What you're doing there looks >> a bit like offset_in_folio(), but I don't understand the problem with >> just checking pos against i_size directly. > > pos can be in the middle of a page. If i_size is at, say, the same point in > the middle of that page and the page isn't currently in the cache, then we'll > just clear the entire page and not read the bottom part of it (ie. the bit > prior to the EOF). > > It's odd, though, that xfstests doesn't catch this. Some more details/information: 1.) The test is a really simple piece of code that essentially writes a incrementing number to a file on 'node a', while a 'tail -f' is run and exited multiple times on 'node b'. We haven't had much luck in this causing the problem when done on a single node 2.) ((pos & PAGE_MASK) >= i_size_read(inode)) ||' merely reflects the logic that was in place prior to 1cc1699070bd. Patching fs/ceph/addr.c with this does seem to eliminate the corruption. (We'll test with the patch Jeff posted here shortly) 3.) After finding all of this, I went upstream to look at fs/ceph/addr.c and discovered the move to leveraging fs/netfs/read_helper.c - we've only just compiled against git master and replicated the corruption there. -- Andrew W. Elble Infrastructure Engineer Information and Technology Services Rochester Institute of Technology tel: (585)-475-2411 | aweits@xxxxxxx PGP: BFAD 8461 4CCF DC95 DA2C B0EB 965B 082E 863E C912 -- Linux-cachefs mailing list Linux-cachefs@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/linux-cachefs