On Thu, 24 Aug 2023 at 14:12, Amir Goldstein <amir73il@xxxxxxxxx> wrote: > > On Tue, Aug 22, 2023 at 2:03 PM Miklos Szeredi <miklos@xxxxxxxxxx> wrote: > > > > On Tue, 22 Aug 2023 at 12:18, Amir Goldstein <amir73il@xxxxxxxxx> wrote: > > > > > > On Mon, Aug 21, 2023 at 6:27 PM Amir Goldstein <amir73il@xxxxxxxxx> wrote: > > > > > > Getting back to this. > > > > Did you mean something like that? (only compile tested) > > > > > > > > https://github.com/amir73il/linux/commits/backing_fs > > > > > > > > If yes, then I wonder: > > > > 1. Is the difference between FUSE_IOCB_MASK and OVL_IOCB_MASK > > > > (i.e. the APPEND flag) intentional? > > > > Setting IOCB_APPEND on the backing file doesn't make a difference as > > long as the backing file is not modified during the write. > > > > In overlayfs the case of the backing file being modified is not > > defined, so I guess that's the reason to omit it. However I don't see > > a problem with setting it on the backing file either, the file > > size/position is synchronized after the write, so nothing bad should > > happen if the backing file was modified. > > > > That raises the question if FUSE passthrough behavior is defined when > backing file is being modified. Should it be any different than ovl? > I don't really care if we set IOCB_APPEND or not, just if we need > a different mask for ovl and FUSE. Dunno. I feel that instead of making the behavior defined when file is modified behind fuse's back, there should be some mechanism between the server and the client (userspace and kernel) that allows proper handling of "remote" modification (oplocks/leases/younameit). I thought about this quite a bit, and even have some patches for the read-only lease case. But this is far from trivial. In the meantime just setting IOCB_APPEND is quite harmless, so I think we should do it for both overlayfs and fuse for consistency. > > > > > 2. What would be the right way to do ovl_copyattr() on io completion? > > > > Pass another completion handler to read/write helpers? > > > > This seems a bit ugly. Do you have a nicer idea? > > > > > > > > Ugh, I missed that little detail. I don't have a better idea than to > > use a callback function. > > > > Ok. added the cleanup callback. > I think it's not that bad? > > https://github.com/amir73il/linux/commits/backing_fs Looks good. > > > > > > > Hmm. Looking closer, ovl_copyattr() in ovl_aio_cleanup_handler() > > > seems a bit racy as it is not done under inode_lock(). > > > > > Decided to fix that by taking ovl inode spinlock inside ovl_copyattr() > and did the same for ovl_file_accessed() for read ops. > > I've found and fixed two other issues with aio completion on this branch, > one of them is a fix for a possible realfile refcount leak, so will probably > need to backport this one. Great. Thanks. Miklos