On 24/09/2019 18:23, Jan Kara wrote: > On Mon 23-09-19 15:33:05, Boaz Harrosh wrote: >> On 18/09/2019 15:31, Jan Kara wrote: >> <> >>>>> Is there a test on xfstests to demonstrate this race? >>>> >>>> No, but I can try to create one. >>> >>> I was experimenting with this but I could not reproduce the issue in my >>> test VM without inserting artificial delay at appropriate place... So I >>> don't think there's much point in the fstest for this. >>> >>> Honza >>> >> >> If I understand correctly you will need threads that direct-write >> files, then fadvise(WILL_NEED) - in parallel to truncate (punch_hole) these >> files - In parallel to trash caches. >> (Direct-write is so data is not present in cache when you come to WILL_NEED >> it into the cache, otherwise the xfs b-trees are not exercised. Or are you >> more worried about the page_cache races? >> ) > > What I was testing was: > Fill file with data. But are you sure data is not in page cache after this stage? Also this stage sould create multiple extents perhaps with gaps in between > One process does fadvise(WILLNEED) block by block from end of the file. > Another process punches hole into the file. > (Perhaps randome placement that spans multiple extents in one go) > If they race is the right way, following read will show old data instead of > zeros. And as I said I'm able to hit this but only if I add artificial > delay between truncating page cache and actually removing blocks. > I was more afraid of iterating on a btree or xarray in parallel of it being destroyed / punched. I think if you iterate backwards in the WILLNEED case the tree/xarry corruption is less likely But now that I think about it. Maybe your case is very different to mine, because read_pages() in xfs does take the ilock. I'm not familiar with this code. > Honza > But I guess the window is very small then Thanks Boaz