Die FUSE API stellt keine Dateisystem-Ebene sync
Anruf, nur fsync
und fsyncdir
. Bedeutet dies, dass der Kernel, wenn sync
(oder syncfs
innerhalb eines FUSE-Mountpoints) aufgerufen wird, fsync
für alle geöffneten Dateien auf allen angehängten FUSE-Dateisystemen aufruft? Oder gibt es eine andere Semantik?Werden die Systemaufrufe 'sync' und 'syncfs' den 'fsync' Aufrufen von FUSE zugeordnet?
10
A
Antwort
5
Wenn Sie syncfs (2) syscall aufrufen, ruft der Kernel sync_filesystem() auf dem Superblock des Dateisystems auf, zu dem der fd gehört. Wenn das betreffende Dateisystem die Superblock-Operation .sync_fs implementiert, wird es aufgerufen. FUSE nicht und daher sync_filesystem() für FUSE ruft nur __sync_blockdev() auf/dev/fuse auf, was alle schmutzigen Seiten (und somit alle nicht synchronisierten Dateien) für diese Sicherung mounten würde.
Vielen Dank. Könntest du ein bisschen mehr zu meiner Frage klären: Kennt ein FUSE-Client irgendwie, wenn sync (2) oder syncfs (2) aufgerufen wird? –
Entschuldigung für die Verspätung. Von dem, was ich verstehe, wenn einer der obigen 2 syscalls von der Anwendung aufgerufen wird, wird die fuse_flush() im Kernel aufgerufen, die an Ihren FUSE-Client übergeben wird. – itisravi