Commit Diff


commit - 9f95eb6fd6e5fa8a3be78f8b1b85310f50e49380
commit + 3aec33fee92d97715e648bd8205823ddc7e5cbba
blob - b06d3d52b5255d7e28dfe2e55287f3d25600767e
blob + 42e1caf25b6abad7eb384ce5d6a6c5568043a290
--- man/man1/0intro.1
+++ man/man1/0intro.1
@@ -311,6 +311,7 @@ the
 variable in
 .IR mk (1),
 .IR namespace (1),
+.IR netfiles (1),
 .IR page (1),
 .IR psfonts (1),
 .IR rio (1),
blob - 15e8df09c842ec3fe769970249f1549ee729228d
blob + 6b46587b152be1b0156eca043f98105af2b225a3
--- man/man1/hist.1
+++ man/man1/hist.1
@@ -65,11 +65,16 @@ Examine changes in block.c:
 hist -d block.c
 .EE
 .SH FILES
+.TF /dump
+.TP
 .B /dump
+by convention, root of dump file system
+.PD
 .SH SOURCE
 .B /home/am3/rsc/src/backup/cmd/history.c
 .SH SEE ALSO
-.IR yesterday (1)
+.IR yesterday (1),
+.IR vbackup (8)
 .SH BUGS
 Should be called
 .IR history ,
blob - 72d93e73a9b8928f2e76b991006d4d9270dfb3fb (mode 644)
blob + /dev/null
--- man/man1/vbackup.1
+++ /dev/null
@@ -1,263 +0,0 @@
-.TH VBACKUP 8
-.SH NAME
-vbackup, vcat, vftp, vmount, vmount0, vnfs \- 
-back up Unix file systems to Venti
-.SH SYNOPSIS
-.B vbackup
-[
-.B -DVnv
-]
-[
-.B -s
-.I secs
-]
-[
-.B -w
-.I n
-]
-.I disk
-[
-.I score
-]
-.PP
-.B vcat
-[
-.B -z
-]
-.I disk
-|
-.I score
-.B >
-.I disk
-.PP
-.B vftp
-.I disk
-|
-.I score
-.PP
-.B vmount
-[
-.B -v
-]
-.I addr
-.I mtpt
-.PP
-.B vmount0
-[
-.B -v
-]
-[
-.B -h
-.I handle
-]
-.I addr
-.I mtpt
-.PP
-.B vnfs
-[
-.B -LLMRVr
-]
-[
-.B -a
-.I addr
-]
-[
-.B -m
-.I mntaddr
-]
-[
-.B -b
-.I blocksize
-]
-[
-.B -c
-.I cachesize
-]
-.I config
-.SH DESCRIPTION
-These programs back up and restore standard
-Unix file system images stored in
-.IR venti (8).
-Images stored in
-.I venti
-are named by
-.IR scores ,
-which consist of a file system type followed
-by a colon and forty hexadecimal digits, as in:
-.IP
-.EX
-ffs:0123456789abcdef0123456789abcdef01234567
-.EE
-.PP
-(The hexadecimal data is the SHA1 hash of the Venti
-root block representing the file system image.)
-.PP
-These programs expect the environment variable
-.B $venti
-to be set to the network address of the Venti server to use
-(for example,
-.B yourhost
-or
-.BR tcp!yourhost!venti ).
-.PP
-.I Vbackup
-copies the file system stored on
-.I disk
-to the Venti server and prints the 
-score for the newly-stored image.
-The argument
-.I disk
-should be a disk or disk partition device
-that would be appropriate to pass to
-.IR mount (8).
-.PP
-The optional argument
-.I score
-is the score of a previous backup of the disk image.
-If
-.I score
-is given, 
-.I vbackup
-will not write to Venti any blocks that have not changed
-since the previous backup.
-This is only a speed optimization: since the blocks are already
-stored on Venti they need not be sent to the Venti server again.
-.PP
-The options to
-.I vbackup
-are:
-.TP
-.B -D
-.TP
-.B -V
-.TP
-.B -n
-.TP
-.B -v
-.TP
-.B -w \fIn
-.TP
-.B -s \fIsecs
-.PP
-.I Vcat
-writes the named disk image to standard output.
-Unused file system blocks are printed zeroed regardless
-of their actual content.
-.PP
-If the
-.B -z
-flag is given, 
-.I vcat
-will attempt to seek over unused blocks instead of writing to them.
-The
-.B -z
-flag should only be used when standard output is seekable
-.RI ( i.e. ,
-when it has been redirected to a file or disk).
-.PP
-.I Vftp
-presents the
-file system image named by
-.I disk
-or
-.I score
-in a shell-like
-interactive session.
-Type
-.B help
-at the
-.B vftp>
-prompt for details.
-.PP
-.I Vmount
-mounts the NFS service at the network connection
-.I address
-onto
-.IR mountpoint .
-On most operating systems,
-.I vmount
-must be run by the user
-.BR root .
-.PP
-.I Vmount0
-is a simple C program that 
-.I vmount
-uses if 
-.IR mount (8)
-does not suffice.
-.PP
-.I Vnfs
-serves, using the
-NFS version 3 protocol,
-one or more disk images in a synthetic tree defined
-by the configuration file
-.IR config .
-.I Vnfs
-announces NFS service at
-.IR addr 
-(default
-.BR udp!*!nfs )
-and NFS mount service at
-.IR mntaddr
-(default
-.BR udp!*!\fI999 ),
-registering both with the port mapper.
-If no port mapper is found running (on port 111),
-.I vnfs
-starts its own port mapper.
-The options are:
-.TP
-.B -r
-Reply to all NFS requests with RPC rejections.
-.TP
-.B -M
-Do not announce an NFS mount service.
-.TP
-.B -P
-Do not register service with the port mapper.
-.TP
-.B -a
-
-
-.SH EXAMPLES
-.PP
-Back up the file system stored on
-.BR /dev/da0s1a :
-.IP
-.EX
-% vbackup /dev/da0s1a
-ffs:0123456789abcdef0123456789abcdef01234567
-% 
-.EE
-.PP
-Serve that backup and a few others in a tree reminiscent
-of Plan 9's dump file system, but hide each day's contents of
-.B /tmp :
-.IP
-.EX
-% cat config
-mount /2005/0510 ffs:0123456789abcdef\fI...\fP
-mount /2005/0510/home ffs:0123456789abcdef\fI...\fP
-mount /2005/0510 ffs:0123456789abcdef\fI...\fP
-mount /2005/0510/home ffs:0123456789abcdef\fI...\fP
-hide /*/*/tmp
-% vnfs -m -b 16k -c 1k config
-% 
-.EE
-.PP
-Mount the backups on a client machine using
-.IR vmount :
-.IP
-.EX
-# vmount udp!yourserver!nfs /dump
-# ls /dump
-2005
-# 
-.EE
-.PP
-Mount the backups using the standard NFS mount program:
-.IP
-.EX
-# mount -t nfs -o soft,intr,ro,nfsv3,rsize=8192,timeo=100 \
-	-o nfsvers=3,nolock,noatime,nodev,nosuid \
-.EE
blob - a40eebf9657f7d78bfa7949b2486446dc3a59089
blob + 24fa0773606fc538fafa64e2026a2f31e8a66db8
--- man/man1/venti.1
+++ man/man1/venti.1
@@ -85,7 +85,7 @@ If the
 .B -z
 option is given,
 .I write
-truncates the block before writing it to the server.
+zero truncates the block before writing it to the server.
 .PP
 .I Copy
 expects
@@ -114,14 +114,15 @@ and
 .B -r
 option control
 .IR copy 's
-behavior upon encountering errors while reading
-from srchost.
+reaction to errors reading
+from
+.IR srchost .
 .I Copy
 always prints information to standard error
 about each read error.
 By default,
 .I copy
-immediately exits after printing the first error.
+exits after printing the first error.
 If the
 .B -i
 option is given, read errors are ignored.
@@ -138,12 +139,11 @@ It writes the new root score to standard output.
 .B \*9/src/cmd/venti/cmd
 .SH SEE ALSO
 .IR vac (1),
-.IR vbackup (1),
 .IR venti (3),
 .IR vacfs (4),
-.IR vnfs (4),
 .IR venti (7),
+.IR vbackup (8),
 .IR venti (8)
 .SH BUGS
 There should be programs to read and write
-streams and directories.
+venti files and directories.
blob - b8a198ba1739c9eb783b290be70277a9f95519fd
blob + 87ec4ff664362f651a9c68631d57ff1b0dfff72b
--- man/man1/yesterday.1
+++ man/man1/yesterday.1
@@ -84,16 +84,15 @@ Restore your profile from yesterday:
 yesterday -c ~/.profile
 .EE
 .SH FILES
+.TF /dump
 .B /dump
+by convention, root of the dump file system
+.PD
 .SH SOURCE
 .B /usr/local/bin/yesterday
 .SH SEE ALSO
 .IR diff (1),
-.IR hist (1)
+.IR hist (1),
+.IR vbackup (8)
 .SH BUGS
-Backups are only available on
-.B amsterdam
-and
-.BR toil .
-.PP
 It's hard to use this command without singing.
blob - bdd18ec4cde123d7dd68ed4b3ecfb01c293924ee
blob + d74145a2f5f31acd1b767b1743cea0407af7b3f2
--- man/man3/venti-cache.3
+++ man/man3/venti-cache.3
@@ -24,6 +24,8 @@ vtlocaltoglobal \- Venti block cache
 #include <venti.h>
 .ta +\w'\fLxxxx 'u
 .PP
+.ft L
+.nf
 typedef struct VtBlock
 {
 	uchar *data;
@@ -35,16 +37,13 @@ typedef struct VtBlock
 .ta +\w'\fLVtBlock* 'u +\w'\fLxxxxxxxx'u
 .PP
 .B
-VtCache*	vtcachealloc(VtConn *z, int blocksize, ulong nblocks, int mode);
+VtCache*	vtcachealloc(VtConn *z, int blocksize, ulong nblocks);
 .PP
 .B
 void	vtcachefree(VtCache *c);
 .PP
 .B
 u32int	vtcacheblocksize(VtCache *c);
-.br
-.B
-		int (*write)(VtConn*, uchar[VtScoreSize], uint, uchar*, int));
 .PP
 .B
 u32int	vtglobaltolocal(uchar score[VtScoreSize])
@@ -72,6 +71,9 @@ int	vtblockwrite(VtBlock *b);
 .PP
 .B
 void	vtcachesetwrite(VtCache *c,
+.br
+.B
+	   int (*write)(VtConn*, uchar[VtScoreSize], uint, uchar*, int));
 .PP
 .B
 VtBlock*	vtblockcopy(VtBlock *b);
@@ -83,6 +85,37 @@ These functions provide access to a simple in-memory
 cache of blocks already stored on a Venti server
 and blocks that will eventually be stored on a Venti server.
 .PP
+A 
+.B VtBlock
+represents a venti data block.
+Blocks stored on a venti server,
+called
+.IR "global blocks" ,
+are named by the SHA1 hash of their contents.
+This hash is recorded as the block's
+.IR score .
+Such blocks are immutable.
+The cache also stores mutable blocks that have not yet been
+written to a venti server.  These blocks are called
+.IR "local blocks" ,
+and have special scores that are 16 zero bytes
+followed by a 4-byte big-endian
+.IR address .
+The address is an index into the internal set of cache blocks.
+.PP
+The user-visible contents of a
+.B VtBlock
+are
+.BR data ,
+a pointer to the data;
+.BR type ,
+the venti block type;
+.BR score ,
+the block's score;
+and
+.BR addr ,
+the block's cache address.
+.PP
 .I Vtcachealloc
 allocates a new cache using the client connection
 .I z
@@ -99,8 +132,22 @@ of maximum block size
 frees a cache and all the associated blocks.
 .PP
 .I Vtcacheblocksize
+returns the cache's maximum block size.
 .PP
-XXX global vs local blocks
+.I Vtglobaltolocal
+returns the local address corresponding to the given
+local
+.IR score .
+If passed a global score,
+.I vtglobaltolocal
+returns the special constant
+.B NilBlock
+.RB ( ~0 ).
+.I Vtlocaltoglobal
+is the opposite, setting
+.I score
+to the local score for the cache address
+.IR local .
 .PP
 .I Vtcacheallocblock
 allocates a new local block with the given
@@ -124,8 +171,9 @@ from the cache, consulting the Venti server
 if necessary.
 If passed a local score,
 .I vtcacheglobal
-behaves as
-.IR vtcachelocal .
+invokes
+.I vtcachelocal
+appropriately.
 .PP
 The block references returned by
 .IR vtcacheallocblock ,
@@ -191,8 +239,8 @@ or, more commonly, that cache blocks are being leaked.
 .SH SOURCE
 .B \*9/src/libventi
 .SH SEE ALSO
-.IR venti (1),
 .IR venti (3),
 .IR venti-client (3),
 .IR venti-conn (3),
-.IR venti-file (3)
+.IR venti-file (3),
+.IR venti (7)
blob - ec18fc4e7f659dbf96c92ffb0377323937d18b9b
blob + cc8d14f49ec44c8e9bb7a571c8a5ff7cbf2e2db1
--- man/man3/venti-client.3
+++ man/man3/venti-client.3
@@ -8,7 +8,7 @@ vtconnect, vthello, vtread, vtwrite, vtreadpacket, vtw
 #include <libc.h>
 .br
 #include <venti.h>
-.ta +\w'\fLextern int 'u +\w'\fLxxxxxxxx'u
+.ta +\w'\fLPacket* 'u +\w'\fLxxxxxxxx'u
 .PP
 .B
 Packet*	vtrpc(VtConn *z, Packet *p)
@@ -50,7 +50,7 @@ int	vtsync(VtConn *z)
 int	vtping(VtConn *z)
 .PP
 .B
-extern int	ventidoublechecksha1;	/* default 1 */
+extern int ventidoublechecksha1;  /* default 1 */
 .SH DESCRIPTION
 These routines execute the client side of the 
 .IR venti (7)
@@ -73,10 +73,8 @@ is typically called only indirectly, via the functions
 .I Vthello
 executes a
 .B hello
-transaction
-(see
-.IR venti (7)), setting
-.IB z -> sid
+transaction, setting
+.IB z ->sid
 to the name used by the server.
 .I Vthello
 is typically called only indirectly, via
@@ -103,11 +101,11 @@ reads the block with the given
 and
 .I type
 from the server,
-writes the returned data
-to
+stores the returned data
+in memory at
 .IR buf ,
-and returns the number of bytes retrieved.
-If the stored block has size larger than
+and returns the number of bytes read.
+If the server's block has size larger than
 .IR n ,
 .I vtread 
 does not modify
@@ -120,7 +118,7 @@ writes the
 .I n
 bytes in 
 .I buf
-with type
+as a block of the given
 .IR type ,
 setting 
 .IR score .
@@ -177,7 +175,6 @@ as described in
 .SH SOURCE
 .B \*9/src/libventi
 .SH SEE ALSO
-.IR venti (1),
 .IR venti (3),
 .IR venti-conn (3),
 .IR venti-packet (3),
@@ -190,5 +187,4 @@ return nil on error.
 The other routines return \-1 on error.
 .PP
 .I Vtwrite
-returns 0 on success,
-meaning it wrote the entire block.
+returns 0 on success: there are no partial writes.
blob - bc2de00d3b3c1887e1e4aaf0efef37e16ca038b5
blob + 293777c22dbb693ecfbe3692f90215b7922879c0
--- man/man3/venti-conn.3
+++ man/man3/venti-conn.3
@@ -61,6 +61,18 @@ A
 .B VtConn
 structure represents a connection to a Venti server
 (when used by a client) or to a client (when used by a server).
+It contains the following user-visible fields:
+.BR debug ,
+a flag enabling debugging prints;
+.BR version ,
+the protocol version in use;
+.BR uid ,
+the (unverified) name of the client;
+.BR sid ,
+the (unverified) name of the server;
+and
+.BR addr ,
+the network address of the remote side.
 .PP
 .I Vtconn
 initializes a new connection structure using file descriptors
@@ -81,7 +93,7 @@ exchanges version information with the remote side
 as described in
 .IR venti (7).
 The negotiated version is stored in
-.IB z -> version \fR.
+.IB z ->version \fR.
 .PP
 .I Vtsend
 writes a packet
@@ -146,7 +158,7 @@ must be the connection structure
 .I Vtdebug
 prints the formatted message to standard error
 when
-.IB z -> debug
+.IB z ->debug
 is set.  Otherwise it is a no-op.
 .PP
 .I Vthangup
blob - e5bdfa9eb30d230ca7cd9924435f11874c65bce8
blob + 2eb0cea38439b4f7e94e9079ec0885264b2e7708
--- man/man3/venti-fcall.3
+++ man/man3/venti-fcall.3
@@ -14,7 +14,7 @@ vtputstring,
 vtrootpack,
 vtrootunpack,
 vtparsescore,
-vtscorefmt \- Venti external data representation
+vtscorefmt \- venti data formats
 .SH SYNOPSIS
 .PP
 .ft L
@@ -31,7 +31,6 @@ enum
 {
 	VtEntrySize = 40,
 	VtRootSize = 300,
-	VtRootVersion = 2,
 	VtScoreSize = 20,
 };
 .PP
@@ -39,9 +38,9 @@ enum
 .nf
 typedef struct VtEntry
 {
-	ulong gen;			/* generation number */
-	ushort psize;			/* pointer block size */
-	ushort dsize;			/* data block size */
+	ulong gen;    /* generation number */
+	ushort psize;   /* pointer block size */
+	ushort dsize;   /* data block size */
 	uchar type;
 	uchar flags;
 	uvlong size;
@@ -54,9 +53,9 @@ typedef struct VtRoot
 {
 	char name[128];
 	char type[128];
-	uchar score[VtScoreSize];	/* to a Dir block */
-	ushort blocksize;		/* maximum block size */
-	uchar prev[VtScoreSize];	/* previous root block */
+	uchar score[VtScoreSize];  /* to a Dir block */
+	ushort blocksize;          /* maximum block size */
+	uchar prev[VtScoreSize];   /* previous root block */
 } VtRoot;
 .ta +\w'\fLPacket* 'u
 .PP
@@ -110,7 +109,7 @@ converts a
 .B VtEntry
 structure describing a Venti file
 (see
-.IR venti (1))
+.IR venti (7))
 into a 40-byte
 .RB ( VtEntrySize )
 structure at
@@ -150,7 +149,7 @@ frees the strings
 .IB f ->uid \fR,
 .IB f ->sid \fR,
 the buffers
-.I f ->crypto
+.IB f ->crypto
 and
 .IB f ->codec \fR,
 and the packet
@@ -159,11 +158,11 @@ and the packet
 The block type enumeration defined in
 .B <venti.h>
 (presented in 
-.IR venti (1))
+.IR venti (7))
 differs from the one used on disk and in the network
 protocol.
 The disk and network representation uses different
-constants does not distinguish between
+constants and does not distinguish between
 .BI VtDataType+ n
 and
 .BI VtDirType+ n
@@ -173,7 +172,10 @@ converts a
 .B <venti.h>
 enumeration value to the disk value;
 .I vtfromdisktype
-converts a disk value to the enumeration value.
+converts a disk value to the enumeration value,
+always using the
+.B VtDataType
+pointers.
 The
 .B VtFcall
 field
blob - dfb7bf4118cb5b352204d8cd3f18f8758a15a1c1
blob + 690fd45ccb860b9a441c75c73b78efb2624fe3f9
--- man/man3/venti-file.3
+++ man/man3/venti-file.3
@@ -1,29 +1,29 @@
 .TH VENTI-FILE 3
 .SH NAME
 VtFile,
-vtfileopenroot,
-vtfilecreateroot,
-vtfileopen,
-vtfilecreate,
 vtfileblock,
-vtfileread, 
-vtfilewrite,
-vtfileflush,
-vtfileincref,
-vtfileclose,
-vtfilegetentry,
-vtfilesetentry,
 vtfileblockscore,
+vtfileclose,
+vtfilecreate,
+vtfilecreateroot,
+vtfileflush,
+vtfileflushbefore,
 vtfilegetdirsize,
-vtfilesetdirsize,
-vtfileunlock,
+vtfilegetentry,
+vtfilegetsize,
+vtfileincref,
 vtfilelock,
 vtfilelock2,
-vtfileflushbefore,
-vtfiletruncate,
-vtfilegetsize,
+vtfileopen,
+vtfileopenroot,
+vtfileread, 
+vtfileremove,
+vtfilesetdirsize,
+vtfilesetentry,
 vtfilesetsize,
-vtfileremove \- Venti files
+vtfiletruncate,
+vtfileunlock,
+vtfilewrite \- Venti files
 .SH SYNOPSIS
 .ta +\w'\fLVtBlock* 'u
 .PP
@@ -85,7 +85,8 @@ int	vtfilegetentry(VtFile *f, VtEntry *e);
 int	vtfilesetentry(VtFile *f, VtEntry *e);
 .PP
 .B
-int	vtfileblockscore(VtFile *f, u32int n, uchar score[VtScoreSize]);
+int	vtfileblockscore(VtFile *f, u32int n, 
+	    uchar score[VtScoreSize]);
 .PP
 .B
 int	vtfilelock(VtFile *f, int mode);
@@ -98,11 +99,11 @@ void	vtfileunlock(VtFile *f);
 .SH DESCRIPTION
 These routines provide a simple interface to create and
 manipulate Venti file trees (see
-.IR venti (1)).
+.IR venti (7)).
 .PP
 .I Vtfilecreateroot
 creates a new Venti file.
-.I Btype
+.I Type
 must be either
 .B VtDataType
 or
@@ -111,7 +112,7 @@ specifying a data or directory file.
 .I Dsize
 is the block size to use for leaf (data or directory) blocks in the hash tree;
 .I psize
-is the block size to use for intermediate (pointer) blocks.
+is the block size to use for internal (pointer) blocks.
 .PP
 .I Vtfileopenroot
 opens an existing Venti file described by
@@ -124,19 +125,19 @@ entry in the directory
 .IR f .
 .I Mode
 should be one of
-.IR VtOREAD ,
-.IR VtOWRITE ,
+.BR VtOREAD ,
+.BR VtOWRITE ,
 or
-.IR VtORDWR ,
+.BR VtORDWR ,
 indicating how the returned file is to be used.
 The
-.IR VtOWRITE
+.BR VtOWRITE
 and
-.IR VtORDWR
+.BR VtORDWR
 modes can only be used if
 .IR f
 is open with mode
-.IR VtORDWR .
+.BR VtORDWR .
 .PP
 .I Vtfilecreate
 creates a new file in the directory
@@ -239,7 +240,7 @@ Loops that
 .I vtfilewrite
 should call
 .I vtfileflushbefore
-regularly to avoid filling the block cache with dirty blocks.
+regularly to avoid filling the block cache with unwritten blocks.
 .PP
 .I Vtfiletruncate
 changes the file
@@ -283,7 +284,7 @@ to be
 returns in
 .I score
 the score of the
-.I n th
+.IR n th
 block in the file
 .IR f .
 .PP
@@ -318,7 +319,7 @@ in the same directory block.
 .SH SOURCE
 .B \*9/src/libventi/file.c
 .SH SEE ALSO
-.IR venti (1),
 .IR venti-cache (3),
 .IR venti-conn (3),
-.IR venti-client (3)
+.IR venti-client (3),
+.IR venti (7)
blob - bc4efe76073fe484fc91eec42e1a7a119ce690c1
blob + 6b74c6cd4ab229c15e536cdbf6c302e977917313
--- man/man3/venti-log.3
+++ man/man3/venti-log.3
@@ -50,17 +50,19 @@ extern char *VtServerLog;    /* "libventi/server" */
 These routines provide an in-memory circular log
 structure used by the Venti library and the Venti server
 to record events for debugging purposes.
-The logs have textual names represented as UTF strings.
+The logs are named by UTF strings.
 .PP
 .I Vtlogopen
-returns a reference to the log named
+returns a reference to the log with the given
 .I name .
 If a log with that name does not exist and
 .I size 
-is non-zero, a new log capable of holding at
+is non-zero,
+.I vtlogopen
+creates a new log capable of holding at
 least
 .I size
-bytes is allocated and returned.
+bytes and returns it.
 .I Vtlogclose
 releases the reference returned by
 .IR vtlogopen .
@@ -126,8 +128,9 @@ and
 writes debugging information to the log named
 .IR VtServerLog ,
 which defaults to the string
-.LR libventi/server .
+.RB ` libventi/server '.
 .SH SOURCE
 .B \*9/src/libventi
 .SH SEE ALSO
-.IR venti (3)
+.IR venti (3),
+.IR venti (8)
blob - 46b2bb315952bfcb17dfbe1c470cae5743bb5e77
blob + 0a872a0a37d49eebb0325c40944fd6e55fe07d4c
--- man/man3/venti-mem.3
+++ man/man3/venti-mem.3
@@ -39,10 +39,9 @@ On failure, they print an error message and call
 They do not return.
 .PP
 .I Vtbrk
-returns a pointer to a new block of at least
+returns a pointer to a new, permanently allocated block of at least
 .I size
 bytes.
-The block cannot be freed.
 .PP
 .IR Vtmalloc ,
 .IR vtrealloc ,
blob - 7d5a518fabd961f96d46311bc41701300d4d2d84
blob + 1b70673f327fbe26bc8476f660506926c83e0439
--- man/man3/venti-packet.3
+++ man/man3/venti-packet.3
@@ -1,11 +1,26 @@
 .TH VENTI-PACKET 3
 .SH NAME
-Packet, packetalloc, packetfree, packetforeign, packetdup,
-packetsplit, packetconsume, packettrim, packetheader, 
-packettrailer, packetprefix, packetappend, packetconcat,
-packetpeek, packetcopy, packetfragments,
-packetsize, packetasize, packetcompact, packetcmp,
-packetstats, packetsha1 \- zero-copy network buffers
+Packet,
+packetalloc,
+packetappend,
+packetasize,
+packetcmp,
+packetconcat,
+packetconsume,
+packetcopy,
+packetdup,
+packetforeign,
+packetfragments,
+packetfree,
+packetheader,
+packetpeek,
+packetprefix,
+packetsha1,
+packetsize,
+packetsplit,
+packetstats,
+packettrailer,
+packettrim \- zero-copy network buffers
 .SH SYNOPSIS
 .ft L
 #include <u.h>
@@ -21,72 +36,73 @@ packetstats, packetsha1 \- zero-copy network buffers
 Packet*	packetalloc(void);
 .PP
 .B
-void	packetfree(Packet *p)
+void	packetappend(Packet *p, uchar *buf, int n)
 .PP
 .B
-Packet*	packetforeign(uchar *buf, int n,
-.br
-.B
-		void (*free)(void *a), void *a)
+uint	packetasize(Packet *p)
 .PP
 .B
-Packet*	packetdup(Packet *p, int offset, int n)
+int	packetcmp(Packet *p, Packet *q)
 .PP
 .B
-Packet*	packetsplit(Packet *p, int n)
+void	packetconcat(Packet *p, Packet *q)
 .PP
 .B
 int	packetconsume(Packet *p, uchar *buf, int n)
 .PP
 .B
-int	packettrim(Packet *p, int offset, int n)
+int	packetcopy(Packet *p, uchar *buf, int offset, int n)
 .PP
 .B
-uchar*	packetheader(Packet *p, int n)
+Packet*	packetdup(Packet *p, int offset, int n)
 .PP
 .B
-uchar*	packettrailer(Packet *p, int n)
+Packet*	packetforeign(uchar *buf, int n,
+.br
+.B
+		void (*free)(void *a), void *a)
 .PP
 .B
-void	packetprefix(Packet *p, uchar *buf, int n)
+int	packetfragments(Packet *p, IOchunk *io, int nio,
+.br
+.B
+		int offset)
 .PP
 .B
-void	packetappend(Packet *p, uchar *buf, int n)
+void	packetfree(Packet *p)
 .PP
 .B
-void	packetconcat(Packet *p, Packet *q)
+uchar*	packetheader(Packet *p, int n)
 .PP
 .B
 uchar*	packetpeek(Packet *p, uchar *buf, int offset, int n)
 .PP
 .B
-int	packetcopy(Packet *p, uchar *buf, int offset, int n)
+void	packetprefix(Packet *p, uchar *buf, int n)
 .PP
 .B
-int	packetfragments(Packet *p, IOchunk *io, int nio,
-.br
-.B
-		int offset)
+void	packetsha1(Packet *p, uchar sha1[20])
 .PP
 .B
 uint	packetsize(Packet *p)
 .PP
 .B
-uint	packetasize(Packet *p)
+Packet*	packetsplit(Packet *p, int n)
 .PP
 .B
-int	packetcmp(Packet *p, Packet *q)
+void	packetstats(void)
 .PP
 .B
-void	packetstats(void)
+uchar*	packettrailer(Packet *p, int n)
 .PP
 .B
-void	packetsha1(Packet *p, uchar sha1[20])
+int	packettrim(Packet *p, int offset, int n)
 .SH DESCRIPTION
 A
 .B Packet
-is a list of blocks of data.
-Each block is contiguous in memory, but the entire packet
+is a chain of blocks of data.
+Each block, called a fragment,
+is contiguous in memory, but the entire packet
 may not be.
 This representation helps avoid unnecessary memory copies.
 .PP
@@ -107,7 +123,7 @@ returns the number of data bytes allocated to
 This may be larger than the number of bytes stored
 in
 .IR p
-because individual fragments may not be filled.
+because fragments may not be filled completely.
 .PP
 .I Packetcmp
 compares the data sections of two packets as
@@ -214,7 +230,7 @@ computes the SHA1 hash of the data contained in
 .IR p .
 .PP
 .I Packetsize
-returns the number of bytes of data contained in
+returns the length, in bytes, of the data contained in
 .IR p .
 .PP
 .I Packetsplit
@@ -263,4 +279,3 @@ whose return values are described above.
 When these functions run out of memory, they
 print error messages and call
 .IR sysfatal .
-They do not return.
blob - 9dd6f34731fae295de1e02a94ca0d0dc3b52e95b
blob + a4a84b9077f92abecf33bbb39f068c58876273c1
--- man/man3/venti-server.3
+++ man/man3/venti-server.3
@@ -110,12 +110,13 @@ is a read-only Venti proxy (it rejects
 .B write
 requests).
 .I Devnull
-is a write-only Venti server: it discards all
+is a dangerous write-only Venti server: it discards all
 blocks written to it and returns error on all reads.
 .SH SOURCE
 .B \*9/src/libventi
 .SH SEE ALSO
-.IR venti (1),
 .IR venti (3),
 .IR venti-conn (3),
-.IR venti-packet (3)
+.IR venti-packet (3),
+.IR venti (7),
+.IR venti (8)
\ No newline at end of file
blob - c163b88890088fad0ba25267a66020be572030af
blob + 270b768019ecc2864e65cd2da7c09744c85486c8
--- man/man3/venti-zero.3
+++ man/man3/venti-zero.3
@@ -30,14 +30,14 @@ returns the size of the 
 buffer pointed to by
 .I buf
 ignoring trailing zeros or zero scores,
-according to the block type
+according to the given
 .IR type .
 .PP
 .I Vtzeroextend
 pads
 .I buf
 with zeros or zero scores,
-according to the block type
+according to the given
 .IR type ,
 to grow it from
 .I size
@@ -52,5 +52,5 @@ is the score of the zero-length block.
 .br
 .B \*9/src/libventi/zeroscore.c
 .SH SEE ALSO
-.IR venti (1),
-.IR venti (3)
+.IR venti (3),
+.IR venti (7)
blob - a2581e98cb53075e148311ee85d11f1b91b01934
blob + 632d5998e3fbce4c9f055b75b64d2a328ef50a63
--- man/man3/venti.3
+++ man/man3/venti.3
@@ -1,6 +1,6 @@
 .TH VENTI 3
 .SH NAME
-xxx \- Venti storage server
+venti \- archival storage server
 .SH SYNOPSIS
 .PP
 .ft L
@@ -28,7 +28,7 @@ describe routines for writing clients
 and servers on top of these.
 .PP
 .IR Venti-fcall (3)
-describes the in-memory representation of Venti protocol messages
+describes the C representation of Venti protocol messages
 and data structures.
 It also describes routines that convert between the C representation
 and the network and disk representations.
@@ -37,7 +37,7 @@ and the network and disk representations.
 describes routines for writing clients that manipulate
 Venti file trees
 (see
-.IR venti (1)).
+.IR venti (7)).
 .PP
 .IR Venti-log (3)
 describes routines to access in-memory log buffers
@@ -51,13 +51,13 @@ routines that abort on error.
 .PP
 .IR Venti-packet (3)
 describes routines for 
-efficiently manipulating chains of
+manipulating zero-copy chains of
 data buffers.
 .PP
 .IR Venti-zero (3)
 describes routines to zero truncate and zero extend blocks
 (see
-.IR venti (1)).
+.IR venti (7)).
 .SH SOURCE
 .B \*9/src/libventi
 .SH SEE ALSO
blob - /dev/null
blob + 44b076e2f48ba93630b62432891f53f775f68f26 (mode 644)
--- /dev/null
+++ man/man7/mpictures.7
@@ -0,0 +1,151 @@
+.TH MPICTURES 7
+.SH NAME
+mpictures \- picture inclusion macros
+.SH SYNOPSIS
+.B troff -mpictures
+[
+.I options
+]
+.I file ...
+.SH DESCRIPTION
+.I Mpictures
+macros insert PostScript pictures into
+.IR troff (1)
+documents.
+The macros are:
+.TP
+.BI .BP " source height width position offset flags label
+Define a frame and place a picture in it.
+Null arguments, represented by \f5""\fR,
+are interpreted as defaults.
+The arguments are:
+.RS
+.TP
+.I source
+Name of a PostScript picture file, optionally
+suffixed with
+.RI ( n )
+to select page number
+.I n
+from the file (first page by default).
+.PD0
+.TP
+.I height
+Vertical size of the frame, default
+.BR 3.0i .
+.TP
+.I width
+Horizontal size of the frame, current line length by default.
+.TP
+.I position
+.L l
+(default),
+.LR c ,
+or
+.L r
+to left-justify, center, or right-justify the frame.
+.TP
+.I offset
+Move the frame horizontally from the original
+.I position
+by this amount, default
+.BR 0i .
+.TP
+.I flags
+One or more of:
+.RS
+.PD 0v
+.TP
+.BI a d 
+Rotate the picture clockwise
+.I d
+degrees, default 
+.IR d =90.
+.TP
+.B o
+Outline the picture with a box.
+.TP
+.B s
+Freely scale both picture dimensions.
+.TP
+.B w
+White out the area to be occupied by the picture.
+.TP
+.BR l , r , t ,\fPb
+Attach the picture to the left right, top, or bottom of the frame.
+.RE
+.TP
+.I label
+Place
+.I label
+at distance
+.B 1.5v
+below the frame.
+.PD
+.PP
+If there's room,
+.B .BP
+fills text around the frame.
+Everything destined for either side of the frame
+goes into a diversion to be retrieved when the accumulated
+text sweeps past the trap set by 
+.B .BP
+or when the diversion is explicitly closed
+by 
+.BR .EP .
+.RE
+.TP
+.BI .PI " source height" , width , "yoffset\fB,\fPxoffset flags.
+This low-level macro, used by
+.BR .BP ,
+can help do more complex things.
+The two arguments not already described are:
+.RS
+.TP
+.I xoffset
+Offset the frame from the left margin by this amount, default
+.BR 0i .
+.PD0
+.TP
+.I yoffset
+Offset the frame from the current baseline,
+measuring positive downward, default
+.BR 0i .
+.PD
+.RE
+.TP
+.B .EP
+End a picture started by
+.BR .BP ;
+.B .EP
+is usually called implicitly by a trap
+at frame bottom.
+.PP
+If a PostScript file lacks page-delimiting comments,
+the entire file is included.
+If no
+.B %%BoundingBox
+comment is present, the picture is
+assumed to fill an 8.5\(mu11-inch page.
+Nothing prevents the picture from being placed off the page.
+.SH SEE ALSO
+.IR troff (1)
+.SH DIAGNOSTICS
+A picture file that can't be read by the PostScript
+postprocessor is replaced by white space.
+.SH BUGS
+A picture and associated text silently disappear if
+a diversion trap set by
+.B .BP
+isn't reached.
+Call
+.B .EP
+at the end of the document to retrieve it.
+.br
+Macros in other packages may break the adjustments
+made to the line length and indent when text is being placed
+around a picture.
+.br
+A missing or improper
+.B %%BoundingBox
+comment may cause the frame to be filled incorrectly.
blob - d713b81072865488b5870cb2a828becdbbd20981
blob + 51621bb263b803dd0c306de7e72a9eb1c0ee009c
--- man/man7/venti.7
+++ man/man7/venti.7
@@ -17,19 +17,15 @@ block storage using Venti as well as the Venti network
 .IR Venti (1)
 documents some simple clients.
 .IR Vac (1),
-.IR vbackup (1),
 .IR vacfs (4),
 and
-.IR vnfs (4)
+.IR vbackup (8)
 are more complex clients.
 .PP
 .IR Venti (3)
 describes a C library interface for accessing
 Venti servers and manipulating Venti data structures.
 .PP
-.IR Venti.conf (7)
-describes the Venti server configuration file.
-.PP
 .IR Venti (8)
 describes the programs used to run a Venti server.
 .PP
@@ -86,9 +82,20 @@ Scores passed between programs conventionally refer
 to
 .B VtRoot
 blocks, which contain descriptive information
-as well as the score of a block containing a small number
-of
-.B VtEntries .
+as well as the score of a directory block containing a small number
+of directory entries.
+.PP
+Conventionally, programs do not mix data and directory entries
+in the same file.  Instead, they keep two separate files, one with
+directory entries and one with metadata referencing those
+entries by position.
+Keeping this parallel representation is a minor annoyance
+but makes it possible for general programs like
+.I venti/copy
+(see
+.IR venti (1))
+to traverse the block tree without knowing the specific details
+of any particular program's data.
 .SS "Block Types
 To allow programs to traverse these structures without
 needing to understand their higher-level meanings,
@@ -127,7 +134,7 @@ For example, if a 1024-byte data block contains the 
 followed by 1013 zero bytes,
 a client would store only the 11-byte block.
 When the client later read the block from the server,
-it would append zeros to the end as necessary to
+it would append zero bytes to the end as necessary to
 reach the expected size.
 .PP
 When truncating pointer blocks
@@ -140,12 +147,12 @@ instead of trailing zero bytes.
 .PP
 Because of the truncation convention,
 any file consisting entirely of zero bytes,
-no matter what the length, will be represented by the zero score:
+no matter what its length, will be represented by the zero score:
 the data blocks contain all zeros and are thus truncated
 to the empty block, and the pointer blocks contain all zero scores
 and are thus also truncated to the empty block, 
 and so on up the hash tree.
-.SS NETWORK PROTOCOL
+.SS Network Protocol
 A Venti session begins when a
 .I client
 connects to the network address served by a Venti
@@ -163,7 +170,7 @@ The
 field is a list of acceptable versions separated by
 colons.
 The protocol described here is version
-.B 02 .
+.BR 02 .
 The client is responsible for choosing a common
 version and sending it in the
 .B VtThello
@@ -193,14 +200,14 @@ followed by
 bytes of data.
 Text strings are represented similarly,
 using a two-byte count with
-the text itself stored as a UTF-8 encoded sequence
+the text itself stored as a UTF-encoded sequence
 of Unicode characters (see
 .IR utf (7)).
 Text strings are not
 .SM NUL\c
 -terminated:
 .I n
-counts the bytes of UTF-8 data, which include no final
+counts the bytes of UTF data, which include no final
 zero byte.
 The
 .SM NUL
@@ -215,7 +222,7 @@ in the enumeration in the include file
 .BR <venti.h> .
 The next byte is an identifying
 .IR tag ,
-used to match responses with requests.
+used to match responses to requests.
 The remaining bytes are parameters of different sizes.
 In the message descriptions, the number of bytes in a field
 is given in brackets after the field name.
@@ -382,7 +389,7 @@ The
 message requests a block with the given
 .I score
 and
-.I type .
+.IR type .
 Use
 .I vttodisktype
 and
blob - 72d93e73a9b8928f2e76b991006d4d9270dfb3fb
blob + 029d80317430d0ea2ebfbdaf922fb991cba915fa
--- man/man8/vbackup.8
+++ man/man8/vbackup.8
@@ -30,11 +30,6 @@ back up Unix file systems to Venti
 .B >
 .I disk
 .PP
-.B vftp
-.I disk
-|
-.I score
-.PP
 .B vmount
 [
 .B -v
@@ -42,30 +37,15 @@ back up Unix file systems to Venti
 .I addr
 .I mtpt
 .PP
-.B vmount0
-[
-.B -v
-]
-[
-.B -h
-.I handle
-]
-.I addr
-.I mtpt
-.PP
 .B vnfs
 [
-.B -LLMRVr
+.B -ELLRVr
 ]
 [
 .B -a
 .I addr
 ]
 [
-.B -m
-.I mntaddr
-]
-[
 .B -b
 .I blocksize
 ]
@@ -128,47 +108,69 @@ The options to
 are:
 .TP
 .B -D
+Turn on debugging output.
 .TP
 .B -V
+Trace interactions with Venti server.
 .TP
+.B -m \fImntname
+Set backup name
+(defaults to
+.IR sysname (3)):
+this name is used in the printed
+.B mount
+command.
+.TP
 .B -n
+No-op mode: do not write any blocks to the server
 .TP
 .B -v
+Print verbose output.
 .TP
 .B -w \fIn
+Write parallelism: keep
+.I n
+writes to the server in progress at a time.
 .TP
 .B -s \fIsecs
+Status interval: every
+.I secs
+seconds, print a line tracking progress of the backup.
+.PD
 .PP
+When
+.I vbackup
+finishes, it prints a single line of the form
+.IP
+.EX
+mount /\fImntname\fL/\fIyyyy\fL/\fImmdd\fL/\fImntpath\fL \fIscore\fL \fIyyyy\fL/\fImmdd\fL/\fIhhmm
+.EE
+.LP
+This line is a valid configuration line for
+.I vnfs
+.RI ( q.v. ).
+.I Mntpath
+is the path on which
+.I disk
+is currently mounted.
+.PP
 .I Vcat
 writes the named disk image to standard output.
 Unused file system blocks are printed zeroed regardless
 of their actual content.
 .PP
-If the
-.B -z
-flag is given, 
+By default,
 .I vcat
-will attempt to seek over unused blocks instead of writing to them.
+will assume that its standard output is seekable
+.RI ( i.e., 
+it has been redirected to a file or disk)
+and seek over unused blocks instead of writing to them.
 The
 .B -z
-flag should only be used when standard output is seekable
-.RI ( i.e. ,
-when it has been redirected to a file or disk).
+option causes
+.I vcat
+to zero unused blocks instead.
 .PP
-.I Vftp
-presents the
-file system image named by
-.I disk
-or
-.I score
-in a shell-like
-interactive session.
-Type
-.B help
-at the
-.B vftp>
-prompt for details.
-.PP
 .I Vmount
 mounts the NFS service at the network connection
 .I address
@@ -179,13 +181,6 @@ On most operating systems,
 must be run by the user
 .BR root .
 .PP
-.I Vmount0
-is a simple C program that 
-.I vmount
-uses if 
-.IR mount (8)
-does not suffice.
-.PP
 .I Vnfs
 serves, using the
 NFS version 3 protocol,
@@ -193,40 +188,123 @@ one or more disk images in a synthetic tree defined
 by the configuration file
 .IR config .
 .I Vnfs
-announces NFS service at
+serves both NFS mount protocol
+and NFS protocol
+RPCs at
 .IR addr 
 (default
-.BR udp!*!nfs )
-and NFS mount service at
-.IR mntaddr
-(default
-.BR udp!*!\fI999 ),
-registering both with the port mapper.
-If no port mapper is found running (on port 111),
-.I vnfs
-starts its own port mapper.
+.BR udp!*!nfs ).
 The options are:
 .TP
-.B -r
-Reply to all NFS requests with RPC rejections.
+.B -E
+Disable `encrypted' handles.
+By default handles are encrypted with a random key to avoid
+leaking information about the backed-up file systems.
+If encryption is disabled, the NFS handles exposed to the client
+may leak information about the root scores of the disks as well
+as inode numbers.
 .TP
-.B -M
-Do not announce an NFS mount service.
+.B -L
+Local service only: serve only requests from the loopback interface (127.0.0.1).
 .TP
-.B -P
-Do not register service with the port mapper.
+.B -LL
+Local service only, with paranoia: serve only requests from loopback,
+and only from the first source port that sends a request.
+This option is intended to be used to make sure that once the local
+host has mounted the service, no other local users can access it.
 .TP
-.B -a
-
-
+.B -R
+Print all NFS and NFS mount RPCs to standard error.
+.TP
+.B -V
+Print all Venti transactions to standard error.
+.TP
+.BI -a " addr
+Serve requests on
+.IR addr
+(see above).
+.TP
+.BI -b " blocksize
+Set block size used by the in-memory venti block cache.
+Must be as large as the maximum block size in any
+file system mentioned in the configuration.
+.TP
+.BI -c " cachesize
+Set the number of blocks stored by the in-memory venti cache.
+.TP
+.B -r
+Respond to all requests with a Sun RPC rejection.
+This is useful during debugging.
+.PD
+.PP
+.I Config
+is a text file describing the
+backup hierarchy for 
+.I vnfs
+to serve.
+Lines beginning with a sharp
+.RB ( # )
+are ignored.
+The rest of the file is a sequence of commands, one per line.
+The commands are:
+.TP
+.BI mount " mtpt score time
+Add the file system with the given
+.I score
+to the tree at the mount point
+.IR mtpt .
+The path to the mount point will be created
+if necessary.
+If
+.B /dev/null
+is given as the score, an empty file system is mounted at
+.IR mtpt ,
+excluding
+.IR mtpt 's
+contents from view.
+.I Time
+is the modification time to return for the directory
+.IR mtpt ,
+either a decimal number of seconds since the epoch
+or a string of the form
+.IB yyyy / mmdd / hhmm
+giving the year, month, day, hour, and minute.
+.RI ( Vnfs
+does not use the modification time of the root in order
+to avoid accessing every mounted file system on common
+actions like
+.B ls
+.B -l
+.BR /dump/sys/2005 .)
+.TP
+.BI allow " ip\fR[\fL/\fImask\fR]
+.TP
+.BI deny " ip\fR[\fL/\fImask\fR]
+These two commands define access permissions based on IP address.
+The optional
+.I mask
+can be a decimal number (24) or an equivalent IP mask (255.255.255.0).
+Each request is filtered through the rules listed in the configuration file.
+The first rule that matches is used.
+If any
+.B allow
+or
+.B deny
+rules are given, the default action is to reject the request.
+In the absence of any rules, the default action is to accept all requests.
+.PD
 .SH EXAMPLES
 .PP
-Back up the file system stored on
-.BR /dev/da0s1a :
+Running on the server
+.IR bob ,
+back up the file system stored on
+.BR /dev/da0s1a ,
+which is mounted on
+.BR /home :
 .IP
 .EX
 % vbackup /dev/da0s1a
-ffs:0123456789abcdef0123456789abcdef01234567
+mount /bob/2005/0510/home ffs:0123456789abcdef\fI...\fP 2005/0510/0831
 % 
 .EE
 .PP
@@ -236,12 +314,13 @@ of Plan 9's dump file system, but hide each day's cont
 .IP
 .EX
 % cat config
-mount /2005/0510 ffs:0123456789abcdef\fI...\fP
-mount /2005/0510/home ffs:0123456789abcdef\fI...\fP
-mount /2005/0510 ffs:0123456789abcdef\fI...\fP
-mount /2005/0510/home ffs:0123456789abcdef\fI...\fP
-hide /*/*/tmp
-% vnfs -m -b 16k -c 1k config
+mount /bob/2005/0510 ffs:0123456789abcdef\fI...\fP 2005/0510/0829
+mount /bob/2005/0510/home ffs:0123456789abcdef\fI...\fP 2005/0510/0831
+mount /bob/2005/0510/tmp /dev/null 1
+mount /bob/2005/0511 ffs:0123456789abcdef\fI...\fP 2005/0511/0827
+mount /bob/2005/0511/home ffs:0123456789abcdef\fI...\fP 2005/0511/0828
+mount /bob/2005/0511/tmp /dev/null 1
+% vnfs -b 16k -c 1k config
 % 
 .EE
 .PP
@@ -250,14 +329,11 @@ Mount the backups on a client machine using
 .IP
 .EX
 # vmount udp!yourserver!nfs /dump
-# ls /dump
-2005
+# ls /dump/bob/2005
+0510
+0511
 # 
 .EE
 .PP
-Mount the backups using the standard NFS mount program:
-.IP
-.EX
-# mount -t nfs -o soft,intr,ro,nfsv3,rsize=8192,timeo=100 \
-	-o nfsvers=3,nolock,noatime,nodev,nosuid \
-.EE
+(Users of fancy shells may need to quote the address argument.)
+
blob - 2327529fe60730984d4e5761ee91e3af21c4567a
blob + 06e4ee2cdf05168aaf0f09c2af48ecd309b5f8a1
--- man/man8/venti.8
+++ man/man8/venti.8
@@ -1,6 +1,41 @@
 .TH VENTI 8
 .SH NAME
-venti.conf  \- venti configuration
+venti  \- archival storage server
+.SH SYNOPSIS
+.B venti/venti
+[
+.B -Ldsw
+]
+[
+.B -a
+.I address
+]
+[
+.B -B
+.I blockcachesize
+]
+[
+.B -c
+.I config
+]
+.PP
+.B "    "
+[
+.B -C
+.I lumpcachesize
+]
+[
+.B -h
+.I httpaddress
+]
+[
+.B -I
+.I indexcachesize
+]
+[
+.B -W
+.I webroot
+]
 .SH DESCRIPTION
 Venti is a SHA1-addressed archival storage server.
 See 
@@ -83,12 +118,10 @@ and the total bitmap size 
 .PP
 The bloom filter should be sized so that
 .I nhash
-\(ti
+\(mu
 .I nblock
-\(ti
-0.7
 \(<=
-0.7 \(ti
+0.7 \(mu
 .IR b ,
 where
 .I nblock
@@ -349,22 +382,17 @@ or
 (case-insensitive)
 to indicate kilobytes, megabytes, or gigabytes respectively.
 .SS Command Line
-Options to
-.I venti
-are:
+Many of the options to Venti duplicate parameters that
+can be specified in the configuration file.
+The command line options override those found in a
+configuration file.
+Additional options are:
 .TP
 .BI -c " config
 The server configuration file
 (default
 .BR venti.conf )
 .TP
-.BI -o " line
-Set a server parameter, using the same syntax
-as in the configuration file.
-The
-.B -o
-options override the configuration file.
-.TP
 .B -d
 Produce various debugging information on standard error.
 Implies
@@ -413,6 +441,8 @@ Start the server and check the storage statistics:
 % venti/venti
 % hget http://$sysname/storage
 .EE
+.SH SOURCE
+.B \*9/src/cmd/venti/srv
 .SH "SEE ALSO"
 .IR venti (1),
 .IR venti (3),
@@ -429,3 +459,14 @@ Setting up a venti server is too complicated.
 .PP
 Venti should not require the user to decide how to
 partition its memory usage.
+.PP
+Users of shells other than 
+.IR rc (1)
+will not be able to use the program names shown.
+One solution is to define
+.B "V=$PLAN9/bin/venti"
+and then substitute
+.B $V/
+for
+.B venti/
+in the paths above.