Completata trattaione delle quote disco, compresi gli esempi.
[gapil.git] / filedir.tex
index d1ba1b048063f143d4959670b8de7575f0297d37..17ea1df01231fe09c52c243dc3d68a3a567028ac 100644 (file)
@@ -4254,63 +4254,117 @@ deve applicarsi alle quote utente o alle quote gruppo, nel qual
 caso \param{type} deve essere rispettivamente \const{USRQUOTA} o
 \const{GRPQUOTA}.
 
-Le diverse operazioni supportate da \func{quotactl}, da indicare con
-l'argomento \param{subcmd} di \macro{QCMD}, sono riportate in tab.
 
 \begin{table}[htb]
   \centering
   \footnotesize
   \begin{tabular}{|l|p{10cm}|}
     \hline
-    \textbf{Tipo} & \textbf{Descrizione} \\
+    \textbf{Comando} & \textbf{Descrizione} \\
     \hline
     \hline
-    \const{Q\_QUOTAON}  & attiva l'applicazione delle quote disco per il
-                          filesystem \param{dev}, si deve passare
+    \const{Q\_QUOTAON}  & Attiva l'applicazione delle quote disco per il
+                          filesystem indicato da \param{dev}, si deve passare
                           in \param{addr} il pathname al file che mantiene le
-                          quote, che deve esistere; l'operazione richiede i 
-                          privilegi di amministratore,\footnotemark \param{id}
-                          viene ignorato.\\ 
-    \const{Q\_QUOTAOFF} & disattiva l'applicazione delle quote disco per il
-                          filesystem \param{dev}; l'operazione richiede i
-                          privilegi di amministratore, \param{id}
-                          e \param{addr} vengono ignorati.\\  
-    \const{Q\_GETQUOTA} & legge i limiti ed i valori correnti delle quote nel
-                          filesystem \param{dev} per l'utente o il gruppo
-                          specificato da \param{id}; si devono avere i
-                          privilegi di amministratore per leggere i dati
+                          quote, che deve esistere, e \param{id} deve indicare
+                          la versione del formato con uno dei valori di
+                          tab.~\ref{tab:quotactl_id_format}; l'operazione
+                          richiede i privilegi di amministratore.\\
+    \const{Q\_QUOTAOFF} & Disattiva l'applicazione delle quote disco per il
+                          filesystem indicato da \param{dev}, \param{id}
+                          e \param{addr} vengono ignorati; l'operazione
+                          richiede i privilegi di amministratore.\\  
+    \const{Q\_GETQUOTA} & Legge i limiti ed i valori correnti delle quote nel
+                          filesystem indicato da \param{dev} per l'utente o
+                          il gruppo specificato da \param{id}; si devono avere
+                          i privilegi di amministratore per leggere i dati
                           relativi ad altri utenti o a gruppi di cui non si fa
                           parte, il risultato viene restituito in una struttura
                           \struct{dqblk} all'indirizzo indicato
                           da \param{addr}.\\
-    \const{Q\_SETQUOTA} & imposta le quote nel filesystem \param{dev} per
-                          l'utente o il gruppo specificato da \param{id} come
-                          ottenuti dalla struttura \struct{dqblk} puntata
-                          da \param{addr}; l'operazione richiede i 
-                          privilegi di amministratore.\\
-    \const{Q\_GETINFO}  & .\\
-    \const{Q\_SETINFO}  & .\\
-    \const{Q\_GETFMT}   & .\\
+    \const{Q\_SETQUOTA} & Imposta i limiti per le quote nel filesystem
+                          indicato da \param{dev} per l'utente o il gruppo
+                          specificato da \param{id} secondo i valori ottenuti
+                          dalla struttura \struct{dqblk} puntata
+                          da \param{addr}; l'operazione richiede i privilegi
+                          di amministratore.\\ 
+    \const{Q\_GETINFO}  & Legge le informazioni (in sostanza i \textit{grace
+                            time}) delle quote del filesystem indicato
+                          da \param{dev} sulla struttura \struct{dqinfo} 
+                          puntata da \param{addr}, \param{id} viene ignorato.\\
+    \const{Q\_SETINFO}  & Imposta le informazioni delle quote del filesystem
+                          indicato da \param{dev} come ottenuti dalla
+                          struttura \struct{dqinfo} puntata
+                          da \param{addr}, \param{id} viene ignorato;  
+                          l'operazione richiede i privilegi di amministratore.\\
+    \const{Q\_GETFMT}   & Richiede il valore identificativo (quello di
+                          tab.~\ref{tab:quotactl_id_format}) per il formato
+                          delle quote attualmente in uso sul filesystem
+                          indicato da \param{dev}, che sarà memorizzato
+                          sul buffer di 4 byte puntato da \param{addr}.\\
     \const{Q\_SYNC}     & Aggiorna la copia su disco dei dati delle quote del
-                          filesystem; in questo caso \param{dev} può anche
-                          essere \val{NULL} nel qual caso vengono aggiornate
-                          i dati per tutti i filesystem con quote
-                          attive, \param{id} e \param{addr} vengono comunque
-                          ignorati.\\ 
-    \const{Q\_GETSTATS} & .\\
+                          filesystem indicato da \param{dev}; in questo
+                          caso \param{dev} può anche essere \val{NULL} nel
+                          qual caso verranno aggiornati i dati per tutti i
+                          filesystem con quote attive, \param{id}
+                          e \param{addr} vengono comunque ignorati.\\ 
+    \const{Q\_GETSTATS} & Ottiene statistiche ed altre informazioni generali 
+                          relative al sistema delle quote per il filesystem
+                          indicato da \param{dev}, richiede che si
+                          passi come argomento \param{addr} l'indirizzo di una
+                          struttura \struct{dqstats}, mentre i valori
+                          di \param{id} e \param{dev} vengono ignorati;
+                          l'operazione è obsoleta e non supportata nei kernel
+                          più recenti, che espongono la stessa informazione
+                          nei file sotto \procfile{/proc/self/fs/quota/}.\\
 %    \const{} & .\\
     \hline
   \end{tabular}
-  \caption{Possibili valori per l'argomento \param{subcommand} di
+  \caption{Possibili valori per l'argomento \param{subcmd} di
     \macro{QCMD}.} 
   \label{tab:quotactl_commands}
 \end{table}
 
-\footnotetext{per tutte le operazioni privilegiate con le quote è richiesta la
-  \textit{capability} \const{CAP\_SYS\_ADMIN}.}
 
+Le diverse operazioni supportate da \func{quotactl}, da indicare con
+l'argomento \param{subcmd} di \macro{QCMD}, sono riportate in
+tab.~\ref{tab:quotactl_commands}. In generale le operazione di attivazione,
+disattivazione e di modifica dei limiti delle quote sono riservate e
+richiedono i privilegi di amministratore.\footnote{per essere precisi tutte le
+  operazioni indicate come privilegiate in tab.~\ref{tab:quotactl_commands}
+  richiedono la \textit{capability} \const{CAP\_SYS\_ADMIN}.} Inoltre gli
+utenti possono soltanto richiedere i dati relativi alle proprie quote, solo
+l'amministratore può ottenere i dati di tutti.
 
+\begin{table}[htb]
+  \centering
+  \footnotesize
+  \begin{tabular}{|l|p{10cm}|}
+    \hline
+    \textbf{Identificatore} & \textbf{Descrizione} \\
+    \hline
+    \hline
+    \const{QFMT\_VFS\_OLD}& il vecchio (ed obsoleto) formato delle quote.\\
+    \const{QFMT\_VFS\_V0} & la versione 0 usata dal VFS di Linux (supporta
+                            \acr{uid} e \acr{gid} a 32 bit e limiti fino a
+                            $2^{42}$ byte e $2^{32}$ file.\\
+    \const{QFMT\_VFS\_V1} & la versione 1 usata dal VFS di Linux (supporta
+                            \acr{uid} e \acr{GID} a 32 bit e limiti fino a
+                            $2^{64}$ byte e $2^{64}$ file.\\
+    \hline
+  \end{tabular}
+  \caption{Valori di identificazione del formato delle quote.} 
+  \label{tab:quotactl_id_format}
+\end{table}
 
+Alcuni dei comandi di tab.~\ref{tab:quotactl_commands} sono alquanto complessi
+e richiedono un approfondimento maggiore, in particolare \const{Q\_GETQUOTA} e
+\const{Q\_SETQUOTA} fanno riferimento ad una specifica struttura
+\struct{dqblk}, la cui definizione è riportata in
+fig.~\ref{fig:dqblk_struct},\footnote{la definizione mostrata è quella usata
+  fino dal kernel 2.4.22, non prenderemo in considerazione le versioni
+  obsolete.} nella quale vengono inseriti i dati relativi alle quote di un
+singolo utente.
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -4322,9 +4376,196 @@ l'argomento \param{subcmd} di \macro{QCMD}, sono riportate in tab.
   \label{fig:dqblk_struct}
 \end{figure}
 
+La struttura viene usata sia con \const{Q\_GETQUOTA} per ottenere i valori
+correnti dei limiti e dell'occupazione delle risorse, che con
+\const{Q\_SETQUOTA} per effettuare modifiche ai limiti; come si può notare ci
+sono alcuni campi (in sostanza \val{dqb\_curspace}, \val{dqb\_curinodes},
+\val{dqb\_btime}, \val{dqb\_itime}) che hanno senso solo in lettura in quanto
+riportano uno stato non modificabile da \func{quotactl}, come l'uso corrente
+di spazio e \textit{inode} o il tempo che resta nel caso si sia superato un
+\textit{soft limit}.
+
+\begin{table}[htb]
+  \centering
+  \footnotesize
+  \begin{tabular}{|l|p{10cm}|}
+    \hline
+    \textbf{Costante} & \textbf{Descrizione} \\
+    \hline
+    \hline
+    \const{QIF\_BLIMITS}& Limiti sui blocchi di 
+                          spazio disco (\val{dqb\_bhardlimit} e
+                          \val{dqb\_bsoftlimit}).\\
+    \const{QIF\_SPACE}  & Uso corrente
+                          dello spazio disco (\val{dqb\_curspace}).\\
+    \const{QIF\_ILIMITS}& Limiti sugli \textit{inode}
+                          (\val{dqb\_ihardlimit} e \val{dqb\_isoftlimit}).\\
+    \const{QIF\_INODES} & Uso corrente
+                          degli \textit{inode} (\val{dqb\_curinodes}).\\
+    \const{QIF\_BTIME}  & Tempo di
+                          sforamento del \textit{soft limit} sul numero di
+                          blocchi (\val{dqb\_btime}).\\
+    \const{QIF\_ITIME}  & Tempo di
+                          sforamento del \textit{soft limit} sul numero di
+                          \textit{inode} (\val{dqb\_itime}).\\ 
+    \const{QIF\_LIMITS} & L'insieme di \const{QIF\_BLIMITS} e
+                          \const{QIF\_ILIMITS}.\\
+    \const{QIF\_USAGE}  & L'insieme di \const{QIF\_SPACE} e
+                          \const{QIF\_INODES}.\\
+    \const{QIF\_TIMES}  & L'insieme di \const{QIF\_BTIME} e
+                          \const{QIF\_ITIME}.\\ 
+    \const{QIF\_ALL}    & Tutti i precedenti.\\
+    \hline
+  \end{tabular}
+  \caption{Costanti per il campo \val{dqb\_valid} di \struct{dqblk}.} 
+  \label{tab:quotactl_qif_const}
+\end{table}
+
+
+Inoltre in caso di modifica di un limite si può voler operare solo su una
+delle risorse (blocchi o \textit{inode});\footnote{non è possibile modificare
+  soltanto uno dei limiti (\textit{hard} o \textit{soft}) occorre sempre
+  rispecificarli entrambi.} per questo la struttura prevede un campo apposito,
+\val{dqb\_valid}, il cui scopo è quello di indicare quali sono gli altri campi
+che devono essere considerati validi. Questo campo è una maschera binaria che
+deve essere espressa nei termini di OR aritmetico delle apposite costanti di
+tab.~\ref{tab:quotactl_qif_const}, dove si è riportato il significato di
+ciascuna di esse ed i campi a cui fanno riferimento.
+
+In lettura con \const{Q\_SETQUOTA} eventuali valori presenti in \struct{dqblk}
+vengono comunque ignorati, al momento la funzione sovrascrive tutti i campi e
+li marca come validi in \val{dqb\_valid}. Si possono invece usare
+\const{QIF\_BLIMITS} o \const{QIF\_ILIMITS} per richiedere di impostare solo
+la rispettiva tipologia di limiti con \const{Q\_SETQUOTA}. Si tenga presente
+che il sistema delle quote richiede che l'occupazione di spazio disco sia
+indicata in termini di blocchi e non di byte; dato che questo dipende da come
+si è creato il filesystem potrà essere necessario effettuare qualche
+controllo.\footnote{in genere viene usato un default di 1024 byte per blocco,
+  ma quando si hanno file di dimensioni medie maggiori può convenire usare
+  valori più alti per ottenere prestazioni migliori in conseguenza di un
+  minore frazionamento dei dati e di indici più corti.}
+
+Altre due operazioni che necessitano di un approfondimento sono
+\const{Q\_GETINFO} e \const{Q\_SETINFO}, che sostanzialmente consentono di
+ottenere i dati relativi alle impostazioni delle altre proprietà delle quote,
+che si riducono poi alla durata del \textit{grace time} per i due tipi di
+limiti. In questo caso queste si proprietà generali sono identiche per tutti
+gli utenti, per cui viene usata una operazione distinta dalle
+precedenti. Anche in questo caso le due operazioni richiedono l'uso di una
+apposita struttura \struct{dqinfo}, la cui definizione è riportata in
+fig.~\ref{fig:dqinfo_struct}.
+
+\begin{figure}[!htb]
+  \footnotesize \centering
+  \begin{minipage}[c]{15cm}
+    \includestruct{listati/dqinfo.h}
+  \end{minipage} 
+  \normalsize 
+  \caption{La struttura \structd{dqinfo} per i dati delle quote disco.}
+  \label{fig:dqinfo_struct}
+\end{figure}
+
+Come per \struct{dqblk} anche in questo caso viene usato un campo della
+struttura, \val{dqi\_valid} come maschera binaria per dichiarare quale degli
+altri campi sono validi; le costanti usate per comporre questo valore sono
+riportate in tab.~\ref{tab:quotactl_iif_const} dove si è riportato il
+significato di ciascuna di esse ed i campi a cui fanno riferimento.
+
+\begin{table}[htb]
+  \centering
+  \footnotesize
+  \begin{tabular}{|l|l|}
+    \hline
+    \textbf{Costante} & \textbf{Descrizione} \\
+    \hline
+    \hline
+    \const{IIF\_BGRACE}& Il \textit{grace period} per i blocchi
+                         (\val{dqi\_bgrace}).\\
+    \const{IIF\_IGRACE}& Il \textit{grace period} per gli \textit{inode} 
+                         (\val{dqi\_igrace}).\\ 
+    \const{IIF\_FLAGS} & I flag delle quote (\val{dqi\_flags}) (inusato ?).\\
+    \const{IIF\_ALL}   & Tutti i precedenti.\\
+    \hline
+  \end{tabular}
+  \caption{Costanti per il campo \val{dqi\_valid} di \struct{dqinfo}.} 
+  \label{tab:quotactl_iif_const}
+\end{table}
+
+Come in precedenza con \const{Q\_GETINFO} tutti i valori vengono letti
+sovrascrivendo il contenuto di \struct{dqinfo} e marcati come validi in
+\val{dqi\_valid}. In scrittura con \const{Q\_SETINFO} si può scegliere quali
+impostare, si tenga presente che i tempi dei campi \val{dqi\_bgrace} e
+\val{dqi\_igrace} devono essere specificati in secondi.
+
+Come esempi dell'uso di \func{quotactl} utilizzeremo estratti del codice di un
+modulo Python usato per fornire una interfaccia diretta a \func{quotactl}
+senza dover passare dalla scansione dei risultati di un comando. Il modulo si
+trova fra i pacchetti Debian messi a disposizione da Truelite Srl,
+all'indirizzo \url{http://labs.truelite.it/projects/packages}.\footnote{in
+  particolare il codice C del modulo è nel file \texttt{quotamodule.c}
+  visionabile a partire dall'indirizzo indicato nella sezione
+  \textit{Repository}.}
+
+\begin{figure}[!htb]
+  \footnotesize \centering
+  \begin{minipage}[c]{15.6cm}
+    \includecodesample{listati/get_quota.c}
+  \end{minipage}
+  \caption{Esempio di codice per ottenere i dati delle quote.} 
+  \label{fig:get_quota}
+\end{figure}
+
+Il primo esempio, riportato in fig.~\ref{fig:get_quota}, riporta il codice
+della funzione che consente di leggere le quote. La funzione fa uso
+dell'interfaccia dal C verso Python, che definisce i vari simboli \texttt{Py*}
+(tipi di dato e funzioni). Non staremo ad approfondire i dettagli di questa
+interfaccia, per la quale esistono numerose trattazioni dettagliate, ci
+interessa solo esaminare l'uso di \func{quotactl}. 
+
+In questo caso la funzione prende come argomenti (\texttt{\small 1}) l'intero
+\texttt{who} che indica se si vuole operare sulle quote utente o gruppo,
+l'identificatore \texttt{id} dell'utente o del gruppo scelto, ed il nome del
+file di dispositivo del filesystem su cui si sono attivate le
+quote.\footnote{questi vengono passati come argomenti dalle funzioni mappate
+  come interfaccia pubblica del modulo (una per gruppi ed una per gli utenti)
+  che si incaricano di decodificare i dati passati da una chiamata nel codice
+  Python.} Questi argomenti vengono passati direttamente alla chiamata a
+\func{quotactl} (\texttt{\small 5}), a parte \texttt{who} che viene abbinato
+con \macro{QCMD} al comando \const{Q\_GETQUOTA} per ottenere i dati.
+
+La funzione viene eseguita all'interno di un condizionale (\texttt{\small
+  5--16}) che in caso di successo provvede a costruire (\texttt{\small 6--12})
+opportunamente una risposta restituendo tramite la opportuna funzione di
+interfaccia un oggetto Python contenente i dati della struttura \struct{dqblk}
+relativi a uso corrente e limiti sia per i blocchi che per gli
+\textit{inode}. In caso di errore (\texttt{\small 13--15}) si usa un'altra
+funzione dell'interfaccia per passare il valore di \var{errno} come eccezione.
+
+\begin{figure}[!htb]
+  \footnotesize \centering
+  \begin{minipage}[c]{15.6cm}
+    \includecodesample{listati/set_block_quota.c}
+  \end{minipage}
+  \caption{Esempio di codice per impostare i limiti sullo spazio disco.}
+  \label{fig:set_block_quota}
+\end{figure}
+
+Per impostare i limiti sullo spazio disco si potrà usare una seconda funzione,
+riportata in fig.~\ref{fig:set_block_quota}, che prende gli stessi argomenti
+della precedente, con lo stesso significato, a cui si aggiungono i valori per
+il \textit{soft limit} e l'\textit{hard limit}. In questo caso occorrerà,
+prima di chiamare \func{quotactl}, inizializzare opportunamente
+(\texttt{\small 5--7}) i campi della struttura \struct{dqblk} che si vogliono
+utilizzare (quelli relativi ai limiti sui blocchi) e specificare gli stessi
+con \const{QIF\_BLIMITS} in \var{dq.dqb\_valid}. 
+
+Fatto questo la chiamata a \func{quotactl}, stavolta con il comando
+\const{Q\_SETQUOTA}, viene eseguita come in precedenza all'interno di un
+condizionale (\texttt{\small 9--14}). In questo caso non essendovi da
+restituire nessun dato in caso di successo si usa (\texttt{\small 10}) una
+apposita funzione di uscita, mentre si restituisce come prima una eccezione
+con il valore di \var{errno} in caso di errore (\texttt{\small 12--13}).
 
-% TODO trattare quote disco 
-% vedi man quotactl
 
 \subsection{La gestione delle \textit{capabilities}}
 \label{sec:proc_capabilities}
@@ -5339,10 +5580,10 @@ programmi e librerie) di cui il server potrebbe avere bisogno.
 % LocalWords:  ENOTEMPTY EBUSY mount point EINVAL soft symbolic tab symlink fig
 % LocalWords:  dangling access chdir chmod chown creat exec lchown lstat mkdir
 % LocalWords:  mkfifo mknod opendir pathconf readlink truncate path buff size
-% LocalWords:  grub bootloader grep MAXSYMLINKS cat VFS sys dirname fcntl
+% LocalWords:  grub bootloader grep MAXSYMLINKS cat VFS sys dirname fcntl tv Py
 % LocalWords:  dev umask IFREG IFBLK IFCHR IFIFO SVr sgid BSD SVID NULL from to
 % LocalWords:  stream dirent EMFILE ENFILE dirfd SOURCE fchdir readdir struct
-% LocalWords:  EBADF namlen HAVE thread entry result value argument fileno
+% LocalWords:  EBADF namlen HAVE thread entry result value argument fileno ext
 % LocalWords:  name TYPE OFF RECLEN UNKNOWN REG SOCK CHR BLK type IFTODT DTTOIF
 % LocalWords:  DTYPE off reclen seekdir telldir void rewinddir closedir select
 % LocalWords:  namelist compar malloc qsort alphasort versionsort strcoll myls
@@ -5352,19 +5593,19 @@ programmi e librerie) di cui il server potrebbe avere bisogno.
 % LocalWords:  EINTR mktemp mkstemp stlib template filename XXXXXX OpenBSD buf
 % LocalWords:  mkdtemp fstat filedes nell'header padding ISREG ISDIR ISCHR IFMT
 % LocalWords:  ISBLK ISFIFO ISLNK ISSOCK IFSOCK IFLNK IFDIR ISUID UID ISGID GID
-% LocalWords:  ISVTX IRUSR IWUSR IXUSR IRGRP IWGRP IXGRP IROTH IWOTH IXOTH 
-% LocalWords:  blocks blksize holes lseek TRUNC ftruncate ETXTBSY length
+% LocalWords:  ISVTX IRUSR IWUSR IXUSR IRGRP IWGRP IXGRP IROTH IWOTH IXOTH  OLD
+% LocalWords:  blocks blksize holes lseek TRUNC ftruncate ETXTBSY length QCMD
 % LocalWords:  hole atime read utime mtime write ctime modification leafnode cp
 % LocalWords:  make fchmod fchown utimbuf times actime modtime Mac owner uid fs
 % LocalWords:  gid Control List patch mandatory control execute group other all
-% LocalWords:  effective passwd IGID locking swap saved text IRWXU IRWXG
-% LocalWords:  IRWXO capability FSETID mask capabilities chroot jail
-% LocalWords:  FTP filter Attributes Solaris FreeBSD libacl hash at
+% LocalWords:  effective passwd IGID locking swap saved text IRWXU IRWXG subcmd
+% LocalWords:  IRWXO capability FSETID mask capabilities chroot jail QUOTAOFF
+% LocalWords:  FTP filter Attributes Solaris FreeBSD libacl hash at dqblk SYNC
 % LocalWords:  XFS SELinux namespace attribute security trusted Draft Modules
 % LocalWords:  attributes mime ADMIN FOWNER libattr lattr getxattr lgetxattr of
 % LocalWords:  fgetxattr attr ssize ENOATTR ENOTSUP NUL setxattr lsetxattr list
 % LocalWords:  fsetxattr flags XATTR REPLACE listxattr llistxattr flistxattr by
-% LocalWords:  removexattr lremovexattr fremovexattr attributename acl
+% LocalWords:  removexattr lremovexattr fremovexattr attributename acl GETINFO
 % LocalWords:  OBJ setfacl len any prefix separator options NUMERIC IDS SMART
 % LocalWords:  INDENT major number IDE Documentation makedev proc copy LNK long
 % LocalWords:  euidaccess eaccess delete def tag qualifier permset calendar NOW
@@ -5379,15 +5620,18 @@ programmi e librerie) di cui il server potrebbe avere bisogno.
 % LocalWords:  LEASE lease SETFCAP AUDIT permitted inherited inheritable AND
 % LocalWords:  bounding execve fork capget capset header hdrp datap ESRCH undef
 % LocalWords:  version libcap lcap clear ncap caps pag capgetp CapInh CapPrm
-% LocalWords:  fffffeff CapEff getcap scheduling lookup 
+% LocalWords:  fffffeff CapEff getcap scheduling lookup  dqinfo SETINFO GETFMT
 % LocalWords:  NEWNS unshare nice NUMA ioctl journaling close XOPEN fdopendir
 % LocalWords:  btrfs mkostemp extN ReiserFS JFS Posix usrquota grpquota EDQUOT
-% LocalWords:  aquota quotacheck limit grace period quotactl cmd caddr addr
+% LocalWords:  aquota quotacheck limit grace period quotactl cmd caddr addr dqb
 % LocalWords:  QUOTAON ENODEV ENOPKG ENOTBLK GETQUOTA SETQUOTA SETUSE SETQLIM
-% LocalWords:  forced allowed sendmail SYSLOG WAKE ALARM CLOCK BOOTTIME
-% LocalWords:  REALTIME securebits
+% LocalWords:  forced allowed sendmail SYSLOG WAKE ALARM CLOCK BOOTTIME dqstats
+% LocalWords:  REALTIME securebits GETSTATS QFMT curspace curinodes btime itime
 
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
+% LocalWords:  QIF BLIMITS bhardlimit bsoftlimit ILIMITS ihardlimit isoftlimit
+% LocalWords:  INODES LIMITS USAGE valid dqi IIF BGRACE bgrace IGRACE igrace
+% LocalWords:  Python Truelite Srl quotamodule Repository who