On Mon, May 11, 2020 at 03:06:08PM +0200, Miklos Szeredi wrote: > On Wed, May 6, 2020 at 5:21 PM Eryu Guan <eguan@xxxxxxxxxxxxxxxxx> wrote: > > > > Under writeback mode, inode->i_blocks is not updated, making utils like > > du read st.blocks as 0. > > > > For example, when using virtiofs (cache=always & nondax mode) with > > writeback_cache enabled, writing a new file and check its disk usage > > with du, du reports 0 usage. > > Hmm... invalidating the attribute might also yield the wrong result as > the server may not have received the WRITE request that modifies the > underlying file. That's true, I open-write a file then sleep without closing it, and check file's st_blocks in another terminal, the usage is 0, and remains 0 even after the file is closed, because the wrong attr is cached. > > Invalidating attributes at the end of fuse_flush() definitely makes > sense, though. du also reports 0 if I didn't close the file, but I got correct st_blocks when it's closed. > > If we wanted 100% correct behavior, we'd need to flush WRITE requests > before each GETATTR request. That might be a performance bottleneck, > though. > > So first I'd just try doing the invalidation from fuse_flush(). Sure, will send v2 soon. > > Thanks, > Miklos Thanks for the review! Eryu