On Tue, 11 May 2021 14:31:14 +0200 Miklos Szeredi <mszeredi@xxxxxxxxxx> wrote: > On Mon, May 10, 2021 at 5:55 PM Greg Kurz <groug@xxxxxxxx> wrote: > > > > Honor the expected behavior of syncfs() to synchronously flush all data > > and metadata on linux systems. Simply loop on all known submounts and > > call syncfs() on them. > > Why not pass the submount's root to the server, so it can do just one > targeted syncfs? > > E.g. somehting like this in fuse_sync_fs(): > > args.nodeid = get_node_id(sb->s_root->d_inode); > > Thanks, > Miklos > As Vivek already pointed out, there was some misunderstanding on how submounts were supposed to work. Things got clearer since then :) So, basically, we have two cases: 1) virtiofsd announces submounts : the d_automount implementation creates a new super block and mounts the submount 2) virtiofsd doesn't announce submounts: the client only knows about the top-level super block You suggestion is for case 1) while this series was made with case 2) in mind, hence the tracking of the super blocks in the server. Vivek and I discussed and agreed to address 2) later and to just focus on 1) for now. Your suggestion doesn't work with the current code base because ->sync_fs() is never called on our submounts' super blocks. This is because they don't have SB_BORN set, which looks incorrect. A call to vfs_get_tree() would fix it, but some code refactoring is needed in fuse_dentry_automount() and virtio_fs_get_tree() for that. Cheers, -- Greg