Correzioni ed integrazioni su fsync
authorSimone Piccardi <piccardi@gnulinux.it>
Sun, 25 Nov 2018 16:27:15 +0000 (17:27 +0100)
committerSimone Piccardi <piccardi@gnulinux.it>
Sun, 25 Nov 2018 16:27:15 +0000 (17:27 +0100)
fileio.tex

index 053fd25308cef6833942ac4596d5e25beec7e85a..baf2f0ae52c2c4da20d4467fe7061b663a84174a 100644 (file)
@@ -1590,7 +1590,7 @@ fra \param{newfd} e \param{oldfd}, fallendo con un errore di \errval{EINVAL}.
 Come accennato in sez.~\ref{sec:file_open_close} tutte le operazioni di
 scrittura sono in genere bufferizzate dal kernel, che provvede ad effettuarle
 in maniera asincrona, ad esempio accorpando gli accessi alla stessa zona del
-disco, in un secondo tempo rispetto al momento della esecuzione della
+disco in un secondo tempo rispetto al momento della esecuzione della
 \func{write}.
 
 Per questo motivo quando è necessaria una sincronizzazione dei dati il sistema
@@ -1610,27 +1610,30 @@ dati dai buffer del kernel.  La prima di queste funzioni di sistema è
 \end{funcproto}
 
 I vari standard prevedono che la funzione si limiti a far partire le
-operazioni, ritornando immediatamente, con Linux fin dal kernel 1.3.20 invece
+operazioni ritornando immediatamente, con Linux invece, fin dal kernel 1.3.20,
 la funzione aspetta la conclusione delle operazioni di sincronizzazione. Si
 tenga presente comunque che questo non dà la garanzia assoluta che i dati
 siano integri dopo la chiamata, l'hardware dei dischi è in genere dotato di un
-suo meccanismo interno di bufferizzazione che può ritardare ulteriormente la
-scrittura effettiva.
+suo meccanismo interno di bufferizzazione che a sua volta può ritardare
+ulteriormente la scrittura effettiva.
 
 La funzione viene usata dal comando \cmd{sync} quando si vuole forzare
 esplicitamente lo scarico dei dati su disco, un tempo era invocata da un
 apposito demone di sistema (in genere chiamato \cmd{update}) che eseguiva lo
 scarico dei dati ad intervalli di tempo fissi.  Con le nuove versioni del
 kernel queste operazioni vengono gestite direttamente dal sistema della
-memoria virtuale, attraverso opportuni \textit{task} interni al kernel il cui
-comportamento può essere controllato attraverso il file
-\sysctlfiled{vm/bdflush}.\footnote{per il significato dei valori che si possono
-  scrivere in questo file si consulti la documentazione allegata ai sorgenti
-  del kernel nel file \file{Documentation/sysctl/vm.txt}, trattandosi di
-  argomenti di natura sistemistica non li prenderemo in esame.} Si tenga
-presente che la funzione di sistema \funcm{bdflush}, che un tempo veniva usata
-per queste impostazioni, è deprecata e causa semplicemente la stampa di un
-messaggio nei log del kernel, pertanto non la prenderemo in esame.
+memoria virtuale, attraverso opportuni \textit{task} interni al kernel. Nei
+kernel recenti questo comportamento può essere controllato con l'uso dei vari
+file \texttt{dirty\_*} in \sysctlfiled{vm/}.\footnote{si consulti la
+  documentazione allegata ai sorgenti del kernel nel file
+  \file{Documentation/sysctl/vm.txt}, trattandosi di argomenti di natura
+  sistemistica non li prenderemo in esame.}
+
+Si tenga presente che la funzione di sistema \funcm{bdflush}, che un tempo
+veniva usata per controllare lo scaricamento dei dati, è deprecata a partire
+dal kernel 2.6 e causa semplicemente la stampa di un messaggio nei log del
+kernel, e non è più presente dalle \acr{glibc} 2.23, pertanto non la
+prenderemo in esame.
 
 Quando si vogliano scaricare i dati di un singolo file, ad esempio essere
 sicuri che i dati di un database siano stati registrati su disco, si possono
@@ -1648,11 +1651,17 @@ prototipi sono:
 {Le funzioni ritornano $0$ in caso di successo e $-1$ per un errore, nel qual
   caso \var{errno} assumerà uno dei valori: 
   \begin{errlist}
+  \item[\errcode{EDQUOT}] si è superata un quota disco durante la
+    sincronizzazione.
   \item[\errcode{EINVAL}] \param{fd} è un file speciale che non supporta la
+    sincronizzazione (talvolta anche \errval{EROFS}).
+  \item[\errcode{EIO}] c'è stato un errore di I/O durante la sincronizzazione,
+    che in questo caso può derivare anche da scritture sullo stesso file
+    eseguite su altri file descriptor.
+  \item[\errcode{ENOSPC}] si è esaurito lo spazio disco durante la
     sincronizzazione.
   \end{errlist}
-  ed inoltre \errval{EBADF}, \errval{EIO} e \errval{EROFS} nel loro
-  significato generico.}
+  ed inoltre \errval{EBADF} nel suo significato generico.}
 \end{funcproto}
 
 Entrambe le funzioni forzano la sincronizzazione col disco di tutti i dati del
@@ -1674,6 +1683,12 @@ directory.\footnote{in realtà per il filesystem \acr{ext2}, quando lo si monta
   con l'opzione \cmd{sync}, il kernel provvede anche alla sincronizzazione
   automatica delle voci delle directory.}
 
+La funzione può restituire anche \errval{ENOSPC} e \errval{EDQUOT} per quei
+casi in cui l'allocazione dello spazio disco non viene effettuata
+all'esecuzione di una \func{write} (come NFS o altri filesystem di rete) per
+cui l'errore viene rilevato quando la scrittura viene effettivamente
+eseguita.
+
 L'uso di \func{sync} presenta in certi casi, quando ci sono più filesystem
 montati, problemi di prestazioni dovute al fatto che la funzione provoca la
 sincronizzazione dei dati su tutti quanti i filesystem, anche quando
@@ -1815,20 +1830,22 @@ di \param{dirfd} sarà completamente ignorato.
     \textbf{Funzione} &\textbf{Flags} &\textbf{Corrispondente} \\
     \hline
     \hline
+     \func{execveat}  &$\bullet$&\func{execve}  \\
      \func{faccessat} &$\bullet$&\func{access}  \\
      \funcm{fchmodat} &$\bullet$&\func{chmod}   \\
      \func{fchownat}  &$\bullet$&\func{chown},\func{lchown}\\
      \funcm{fstatat}  &$\bullet$&\func{stat},\func{lstat}  \\
-     \func{utimensat} &$\bullet$&\func{utimes},\func{lutimes}\\
      \func{linkat}    &$\bullet$\footnotemark&\func{link}    \\
      \funcm{mkdirat}  & --      &\func{mkdir}   \\
+     \funcm{mkfifoat} & --      &\func{mkfifo}  \\
      \funcm{mknodat}  & --      &\func{mknod}   \\
      \func{openat}    & --      &\func{open}    \\
      \funcm{readlinkat}& --     &\func{readlink}\\
      \funcm{renameat} & --      &\func{rename}  \\
+     \funcm{statx}    &$\bullet$&\func{stat}  \\
      \funcm{symlinkat}& --      &\func{symlink} \\
      \func{unlinkat}  &$\bullet$&\func{unlink},\func{rmdir}  \\
-     \funcm{mkfifoat} & --      &\func{mkfifo}  \\
+     \func{utimensat} &$\bullet$&\func{utimes},\func{lutimes}\\
     \hline
   \end{tabular}
   \caption{Corrispondenze fra le nuove funzioni ``\textit{at}'' e le