Hi Andy, On Thu, Dec 17, 2020 at 7:29 PM Andy Fan <zhihui.fan1...@gmail.com> wrote: > I spent one day studying the patch and I want to talk about one question for > now. > What is the purpose of calling smgrimmedsync to evict a DIRTY sr (what will > happen > if we remove it and the SR_SYNCING and SR_JUST_DIRTIED flags)?
The underlying theory of the patch is that after fsync() succeeds, the new size is permanent, but before that it could change at any time because of asynchronous activities in the kernel*. Therefore, if you want to evict the size from shared memory, you have to fsync() the file first. I used smgrimmedsync() to do that. *I suspect that it can really only shrink with network file systems such as NFS and GlusterFS, where the kernel has to take liberties to avoid network round trips for every file extension, but I don't know the details on all 9 of our supported OSes and standards aren't very helpful for understanding buffered I/O.