FUSE API non espone una chiamata sync
livello file system, solo fsync
e fsyncdir
. Significa che quando si chiama sync
(o syncfs
all'interno di un punto di montaggio FUSE), il kernel richiama fsync
su tutti i file aperti su tutti i file system montati su FUSE? O c'è una semantica diversa?Le chiamate di sistema 'sync' e 'syncfs' sono associate alle chiamate 'fsync' di FUSE?
10
A
risposta
5
Quando si richiama il syscall syncfs (2), il kernel chiama un sync_filesystem() sul superblocco del file system a cui appartiene fd. Se il file system in questione implementa l'operazione di superblocco .sync_fs, viene chiamato. FUSE no e quindi sync_filesystem() per FUSE chiama semplicemente __sync_blockdev() su/dev/fuse, che sincronizza tutte le pagine dirty (e quindi tutti i file unsynced) per quella mount di fusibile.
Grazie. Potresti chiarire un po 'di più la mia domanda: un client FUSE può sapere in qualche modo quando viene chiamato sync (2) o syncfs (2)? –
Ci scusiamo per il ritardo. Da quello che ho capito, quando uno dei due precedenti due syscalls viene chiamato dall'applicazione, il file fuse_flush() viene chiamato nel kernel, che viene passato al client FUSE. – itisravi