L'implementazione del file system asincrono con FUSE su Linux
Domanda
Ho provato a chiedere sulla mailing list di FUSE, ma non ho ricevuto alcuna risposta finora ... ho un paio di domande. Ho intenzione di implementare un file FUSE di basso livello di sistema e vegliare su di descrittore di fuse_chan
con epoll.
-
Devo inode falsi per tutti oggetti in mio diritto file system? Siamo Ci sono delle regole sulla scelta inodes per gli oggetti in VFS (ad esempio faccio che sia da solo valori positivi o posso usare i valori in un certo intervallo)?
-
descrittore posso fare di fuse_chan non-blocking? Se sì, la prego di dirmi se posso supporre che
fuse_chan_recv()
/fuse_chan_send()
riceverà / inviare un intera richiesta la struttura, o devo ignorare loro con funzioni di movimentazione invio parziale e ricevere? -
Che dire
buffer size
? capisco infuse_loop()
un nuovo buffer è assegnato per ogni chiamata, quindi immagino che la dimensione del buffer non è fisso. Tuttavia forse c'è qualche massima possibile dimensione del buffer? Posso quindi allocare un buffer più grande e ridurre operazioni di allocazione di memoria.
Soluzione
(1) Inodes sono definiti come numeri interi senza segno, quindi in teoria, è possibile utilizzare qualsiasi valore. Tuttavia, dal momento che ci potrebbero essere i programmi che non sono attenti, mi piacerebbe giocare sul sicuro e solo per uso diverso da zero, interi positivi fino a INT_MAX.
(2) fusibile utilizza un dispositivo speciale del kernel. Mentre fuse_chan_recv () non supportano legge parziali, questo non può essere richiesto, come kernel non deve restituire i pacchetti parziali in ogni caso.
(3) I nomi dei file in Linux sono max 4096 caratteri. Questo pone un limite la dimensione del buffer:
$ grep PATH_MAX /usr/include/linux/limits.h
#define PATH_MAX 4096 /* # chars in a path name including nul */