Index: trunk/server/common/patches/openafs-linux-support.patch
===================================================================
--- trunk/server/common/patches/openafs-linux-support.patch	(revision 2337)
+++ trunk/server/common/patches/openafs-linux-support.patch	(revision 2337)
@@ -0,0 +1,984 @@
+From 53774c945e91ea344cbe51c9fafae8acf711f558 Mon Sep 17 00:00:00 2001
+From: Marc Dionne <marc.c.dionne@gmail.com>
+Date: Mon, 28 May 2012 21:43:12 -0400
+Subject: [PATCH 01/12] Linux 3.4: replace end_writeback with clear_inode
+
+end_writeback() is renamed to clear_inode().  Add a configure test
+and cope.
+
+Change-Id: Icaf5b6b54d0ee377fabcf0b295d690eaa6b4be5e
+Reviewed-on: http://gerrit.openafs.org/7503
+Reviewed-by: Derrick Brashear <shadow@dementix.org>
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+(cherry picked from commit 2b33384a4a7b88842281021129ffccc837d91d36)
+---
+ acinclude.m4               | 3 +++
+ src/afs/LINUX/osi_vfsops.c | 4 ++++
+ 2 files changed, 7 insertions(+)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index 6e2c9ae..c14b581 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -840,6 +840,9 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
+ #include <linux/page-flags.h>],
+ 				     [struct page *_page;
+                                       int bchecked = PageFsMisc(_page);])
++		 AC_CHECK_LINUX_FUNC([clear_inode],
++				     [#include <linux/fs.h>],
++				     [clear_inode(NULL);])
+ 		 AC_CHECK_LINUX_FUNC([current_kernel_time],
+ 				     [#include <linux/time.h>],
+ 			             [struct timespec s;
+diff --git a/src/afs/LINUX/osi_vfsops.c b/src/afs/LINUX/osi_vfsops.c
+index a6be1b3..bc951a2 100644
+--- a/src/afs/LINUX/osi_vfsops.c
++++ b/src/afs/LINUX/osi_vfsops.c
+@@ -284,7 +284,11 @@ afs_evict_inode(struct inode *ip)
+ 	osi_Panic("inode freed while still hashed");
+ 
+     truncate_inode_pages(&ip->i_data, 0);
++#if defined(HAVE_LINUX_CLEAR_INODE)
++    clear_inode(ip);
++#else
+     end_writeback(ip);
++#endif
+ 
+ #if !defined(STRUCT_SUPER_OPERATIONS_HAS_ALLOC_INODE)
+     afs_osi_Free(ip->u.generic_ip, sizeof(struct vcache));
+-- 
+1.8.0
+
+
+From 235dee4c449bb5d5307f9b14d5effa4509d58efc Mon Sep 17 00:00:00 2001
+From: Marc Dionne <marc.c.dionne@gmail.com>
+Date: Sat, 2 Jun 2012 21:35:53 -0400
+Subject: [PATCH 02/12] Linux 3.5: encode_fh API change
+
+The encode_fh export operation now expects two inode arguments
+instead of a dentry and a "connectable" flag.  Use the inode of
+the dentry we're interested in, and NULL as the parent inode which
+is the same as passing a 0 flag in the previous API.
+
+Change-Id: I05cf146fb2a4bacdca20a9f108d04ccb11530804
+Reviewed-on: http://gerrit.openafs.org/7523
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+Reviewed-by: Derrick Brashear <shadow@dementix.org>
+(cherry picked from commit 5227148ae17949705487ea673d558ebfe143e635)
+---
+ acinclude.m4               |  1 +
+ src/afs/LINUX/osi_compat.h |  4 ++++
+ src/cf/linux-test4.m4      | 14 ++++++++++++++
+ 3 files changed, 19 insertions(+)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index c14b581..25484cf 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -958,6 +958,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
+ 		 LINUX_D_COUNT_IS_INT
+ 		 LINUX_IOP_MKDIR_TAKES_UMODE_T
+ 		 LINUX_IOP_CREATE_TAKES_UMODE_T
++		 LINUX_EXPORT_OP_ENCODE_FH_TAKES_INODES
+ 
+ 		 dnl If we are guaranteed that keyrings will work - that is
+ 		 dnl  a) The kernel has keyrings enabled
+diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h
+index b94295c..4c7c261 100644
+--- a/src/afs/LINUX/osi_compat.h
++++ b/src/afs/LINUX/osi_compat.h
+@@ -333,7 +333,11 @@ afs_get_dentry_from_fh(struct super_block *afs_cacheSBp, afs_dcache_id_t *ainode
+ static inline int
+ afs_get_fh_from_dentry(struct dentry *dp, afs_ufs_dcache_id_t *ainode, int *max_lenp) {
+     if (dp->d_sb->s_export_op->encode_fh)
++#if defined(EXPORT_OP_ENCODE_FH_TAKES_INODES)
++        return dp->d_sb->s_export_op->encode_fh(dp->d_inode, &ainode->raw[0], max_lenp, NULL);
++#else
+         return dp->d_sb->s_export_op->encode_fh(dp, &ainode->raw[0], max_lenp, 0);
++#endif
+ #if defined(NEW_EXPORT_OPS)
+     /* If fs doesn't provide an encode_fh method, assume the default INO32 type */
+     *max_lenp = sizeof(struct fid)/4;
+diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4
+index f5e91b1..f13e97d 100644
+--- a/src/cf/linux-test4.m4
++++ b/src/cf/linux-test4.m4
+@@ -661,3 +661,17 @@ AC_DEFUN([LINUX_IOP_CREATE_TAKES_UMODE_T], [
+ 			[define if inode.i_op->create takes a umode_t argument],
+ 			[-Werror])
+ ])
++
++
++AC_DEFUN([LINUX_EXPORT_OP_ENCODE_FH_TAKES_INODES], [
++  AC_CHECK_LINUX_BUILD([whether export operation encode_fh takes inode arguments],
++			[ac_cv_linux_export_op_encode_fh__takes_inodes],
++			[#include <linux/exportfs.h>],
++			[struct export_operations _exp_ops;
++			int _encode_fh(struct inode *i, __u32 *fh, int *len, struct inode *p)
++				{return 0;};
++			_exp_ops.encode_fh = _encode_fh;],
++			[EXPORT_OP_ENCODE_FH_TAKES_INODES],
++			[define if encode_fh export op takes inode arguments],
++			[-Werror])
++])
+-- 
+1.8.0
+
+
+From f6093c4716d36b7499b5c84950e6ec4480745467 Mon Sep 17 00:00:00 2001
+From: Marc Dionne <marc.c.dionne@gmail.com>
+Date: Sat, 2 Jun 2012 20:45:08 -0400
+Subject: [PATCH 03/12] afsd: include sys/resource.h in afsd_kernel.c
+
+With a recent glibc update, sys/wait.h no longer includes
+sys/resource.h unless __USE_SVID, __USE_XOPEN or __USE_XOPEN2K8
+are set.
+
+Don't rely on the indirect inclusion to get the bits we need;
+include it directly in afsd_kernel.c.  This include used to be
+there but was dropped when afsd_kernel.c was split off.
+
+Reviewed-on: http://gerrit.openafs.org/7522
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+Reviewed-by: Derrick Brashear <shadow@dementix.org>
+(cherry picked from commit bc3a32a84facb8114a8c7de87025f972d0281098)
+
+Change-Id: Ia5ba6a0e662607e680b4431f146c969b7069bcfd
+Reviewed-on: http://gerrit.openafs.org/8155
+Reviewed-by: Ken Dreyer <ktdreyer@ktdreyer.com>
+Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
+Tested-by: Derrick Brashear <shadow@your-file-system.com>
+(cherry picked from commit 5842f856652051a4386b1e0170f18dca911ca4c6)
+---
+ src/afsd/afsd_kernel.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/afsd/afsd_kernel.c b/src/afsd/afsd_kernel.c
+index 1f7fdbb..e1e87a7 100644
+--- a/src/afsd/afsd_kernel.c
++++ b/src/afsd/afsd_kernel.c
+@@ -37,6 +37,10 @@
+ #include <sys/param.h>
+ #endif
+ 
++#if defined(AFS_LINUX20_ENV)
++#include <sys/resource.h>
++#endif
++
+ #ifdef HAVE_SYS_FS_TYPES_H
+ #include <sys/fs_types.h>
+ #endif
+-- 
+1.8.0
+
+
+From 31a7f5ef2fcb81c2510834befd15fb057d067eaf Mon Sep 17 00:00:00 2001
+From: Marc Dionne <marc.c.dionne@gmail.com>
+Date: Mon, 13 Aug 2012 20:32:08 -0400
+Subject: [PATCH 04/12] Linux: bypass: consolidate copy_page macros into a
+ single function
+
+The copy_page(s) macros are very similar; combine them into a
+single function that can be used for all cases.
+
+This will make it easier to add some pre-processor logic around
+the kmap_atomic calls to adapt to Linux API changes.
+
+Reviewed-on: http://gerrit.openafs.org/7980
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+Reviewed-by: Derrick Brashear <shadow@dementix.org>
+(cherry picked from commit 0a8256a26fafb490b454f2a857b0c15d859572c5)
+
+Change-Id: I6835a024428b26a8cd8d073f6304d0d0b3042b24
+Reviewed-on: http://gerrit.openafs.org/8077
+Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
+Reviewed-by: Ken Dreyer <ktdreyer@ktdreyer.com>
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+(cherry picked from commit 54db9af1a87c03d6f00ab70565c9d1f733813fc2)
+---
+ src/afs/afs_bypasscache.c | 63 ++++++++++++++++++-----------------------------
+ 1 file changed, 24 insertions(+), 39 deletions(-)
+
+diff --git a/src/afs/afs_bypasscache.c b/src/afs/afs_bypasscache.c
+index e447024..b350233 100644
+--- a/src/afs/afs_bypasscache.c
++++ b/src/afs/afs_bypasscache.c
+@@ -270,49 +270,12 @@ done:
+ #ifdef UKERNEL
+ typedef void * bypass_page_t;
+ 
+-#define copy_page(pp, pageoff, rxiov, iovno, iovoff, auio, curiov)	\
+-    do { \
+-	int dolen = auio->uio_iov[curiov].iov_len - pageoff; \
+-	memcpy(((char *)pp) + pageoff,		       \
+-	       ((char *)rxiov[iovno].iov_base) + iovoff, dolen);	\
+-	auio->uio_resid -= dolen; \
+-    } while(0)
+-
+-#define copy_pages(pp, pageoff, rxiov, iovno, iovoff, auio, curiov)	\
+-    do { \
+-	int dolen = rxiov[iovno].iov_len - iovoff; \
+-	memcpy(((char *)pp) + pageoff,				\
+-	       ((char *)rxiov[iovno].iov_base) + iovoff, dolen);	\
+-	auio->uio_resid -= dolen;	\
+-    } while(0)
+-
+ #define unlock_and_release_pages(auio)
+ #define release_full_page(pp, pageoff)
+ 
+ #else
+ typedef struct page * bypass_page_t;
+ 
+-#define copy_page(pp, pageoff, rxiov, iovno, iovoff, auio, curiov)	\
+-    do { \
+-        char *address;						\
+-	int dolen = auio->uio_iov[curiov].iov_len - pageoff; \
+-	address = kmap_atomic(pp, KM_USER0); \
+-	memcpy(address + pageoff, \
+-	       (char *)(rxiov[iovno].iov_base) + iovoff, dolen);	\
+-	kunmap_atomic(address, KM_USER0); \
+-    } while(0)
+-
+-#define copy_pages(pp, pageoff, rxiov, iovno, iovoff, auio, curiov)	\
+-    do { \
+-        char *address; \
+-	int dolen = rxiov[iovno].iov_len - iovoff; \
+-	address = kmap_atomic(pp, KM_USER0); \
+-	memcpy(address + pageoff, \
+-	       (char *)(rxiov[iovno].iov_base) + iovoff, dolen);	\
+-	kunmap_atomic(address, KM_USER0); \
+-    } while(0)
+-
+-
+ #define unlock_and_release_pages(auio) \
+     do { \
+ 	struct iovec *ciov;	\
+@@ -347,8 +310,30 @@ typedef struct page * bypass_page_t;
+ 	    afs_warn("afs_NoCacheFetchProc: page not locked!\n"); \
+ 	put_page(pp); /* decrement refcount */ \
+     } while(0)
++#endif
++
++static void
++afs_bypass_copy_page(bypass_page_t pp, int pageoff, struct iovec *rxiov,
++	int iovno, int iovoff, struct uio *auio, int curiov, int partial)
++{
++    char *address;
++    int dolen;
++
++    if (partial)
++	dolen = rxiov[iovno].iov_len - iovoff;
++    else
++	dolen = auio->uio_iov[curiov].iov_len - pageoff;
+ 
++#if !defined(UKERNEL)
++    address = kmap_atomic(pp, KM_USER0);
++#else
++    address = pp;
+ #endif
++    memcpy(address + pageoff, (char *)(rxiov[iovno].iov_base) + iovoff, dolen);
++#if !defined(UKERNEL)
++    kunmap_atomic(address, KM_USER0);
++#endif
++}
+ 
+ /* no-cache prefetch routine */
+ static afs_int32
+@@ -447,7 +432,7 @@ afs_NoCacheFetchProc(struct rx_call *acall,
+ 		if (pageoff + (rxiov[iovno].iov_len - iovoff) <= auio->uio_iov[curpage].iov_len) {
+ 		    /* Copy entire (or rest of) current iovec into current page */
+ 		    if (pp)
+-			copy_pages(pp, pageoff, rxiov, iovno, iovoff, auio, curpage);
++			afs_bypass_copy_page(pp, pageoff, rxiov, iovno, iovoff, auio, curpage, 0);
+ 		    length -= (rxiov[iovno].iov_len - iovoff);
+ 		    pageoff += rxiov[iovno].iov_len - iovoff;
+ 		    iovno++;
+@@ -455,7 +440,7 @@ afs_NoCacheFetchProc(struct rx_call *acall,
+ 		} else {
+ 		    /* Copy only what's needed to fill current page */
+ 		    if (pp)
+-			copy_page(pp, pageoff, rxiov, iovno, iovoff, auio, curpage);
++			afs_bypass_copy_page(pp, pageoff, rxiov, iovno, iovoff, auio, curpage, 1);
+ 		    length -= (auio->uio_iov[curpage].iov_len - pageoff);
+ 		    iovoff += auio->uio_iov[curpage].iov_len - pageoff;
+ 		    pageoff = auio->uio_iov[curpage].iov_len;
+-- 
+1.8.0
+
+
+From 51102503174a33c0bbb74a062a9413a0f041588e Mon Sep 17 00:00:00 2001
+From: Marc Dionne <marc.c.dionne@gmail.com>
+Date: Tue, 14 Aug 2012 16:34:42 -0400
+Subject: [PATCH 05/12] Linux 3.6: kmap_atomic API change
+
+kmap_atomic no longer requires a KM_TYPE argument.  Test for this
+and adjust the affected code.
+
+Reviewed-on: http://gerrit.openafs.org/7981
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+Reviewed-by: Derrick Brashear <shadow@dementix.org>
+(cherry picked from commit 049c485b4a39ba510035788b4959d839ef668c55)
+
+Change-Id: Iac8be7901da4b277864b1b6cc987cf5087992789
+Reviewed-on: http://gerrit.openafs.org/8078
+Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
+Reviewed-by: Chas Williams - CONTRACTOR <chas@cmf.nrl.navy.mil>
+Reviewed-by: Ken Dreyer <ktdreyer@ktdreyer.com>
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+(cherry picked from commit 76ab286feb1570efa9763e076020fc43fb0a95fa)
+---
+ acinclude.m4              |  1 +
+ src/afs/afs_bypasscache.c |  8 ++++++++
+ src/cf/linux-test4.m4     | 12 ++++++++++++
+ 3 files changed, 21 insertions(+)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index 25484cf..20fd15e 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -959,6 +959,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
+ 		 LINUX_IOP_MKDIR_TAKES_UMODE_T
+ 		 LINUX_IOP_CREATE_TAKES_UMODE_T
+ 		 LINUX_EXPORT_OP_ENCODE_FH_TAKES_INODES
++		 LINUX_KMAP_ATOMIC_TAKES_NO_KM_TYPE
+ 
+ 		 dnl If we are guaranteed that keyrings will work - that is
+ 		 dnl  a) The kernel has keyrings enabled
+diff --git a/src/afs/afs_bypasscache.c b/src/afs/afs_bypasscache.c
+index b350233..1138f89 100644
+--- a/src/afs/afs_bypasscache.c
++++ b/src/afs/afs_bypasscache.c
+@@ -325,13 +325,21 @@ afs_bypass_copy_page(bypass_page_t pp, int pageoff, struct iovec *rxiov,
+ 	dolen = auio->uio_iov[curiov].iov_len - pageoff;
+ 
+ #if !defined(UKERNEL)
++# if defined(KMAP_ATOMIC_TAKES_NO_KM_TYPE)
++    address = kmap_atomic(pp);
++# else
+     address = kmap_atomic(pp, KM_USER0);
++# endif
+ #else
+     address = pp;
+ #endif
+     memcpy(address + pageoff, (char *)(rxiov[iovno].iov_base) + iovoff, dolen);
+ #if !defined(UKERNEL)
++# if defined(KMAP_ATOMIC_TAKES_NO_KM_TYPE)
++    kunmap_atomic(address);
++# else
+     kunmap_atomic(address, KM_USER0);
++# endif
+ #endif
+ }
+ 
+diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4
+index f13e97d..7db805f 100644
+--- a/src/cf/linux-test4.m4
++++ b/src/cf/linux-test4.m4
+@@ -675,3 +675,15 @@ AC_DEFUN([LINUX_EXPORT_OP_ENCODE_FH_TAKES_INODES], [
+ 			[define if encode_fh export op takes inode arguments],
+ 			[-Werror])
+ ])
++
++
++AC_DEFUN([LINUX_KMAP_ATOMIC_TAKES_NO_KM_TYPE], [
++  AC_CHECK_LINUX_BUILD([whether kmap_atomic takes no km_type argument],
++			[ac_cv_linux_kma_atomic_takes_no_km_type],
++			[#include <linux/highmem.h>],
++			[struct page *p = NULL;
++			kmap_atomic(p);],
++			[KMAP_ATOMIC_TAKES_NO_KM_TYPE],
++			[define if kmap_atomic takes no km_type argument],
++			[-Werror])
++])
+-- 
+1.8.0
+
+
+From f842c54d6cba963ce34f2d092c9586c6ee21a13c Mon Sep 17 00:00:00 2001
+From: Marc Dionne <marc.c.dionne@gmail.com>
+Date: Mon, 13 Aug 2012 21:36:15 -0400
+Subject: [PATCH 06/12] Linux 3.6: dentry_open API change
+
+dentry_open now takes a path argument that combines the dentry and
+the vfsmount pointers.
+Add a configure test and a new compat inline function to keep things
+cleaner in the main source file.
+
+Reviewed-on: http://gerrit.openafs.org/7982
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+Reviewed-by: Derrick Brashear <shadow@dementix.org>
+(cherry picked from commit 8766a65e97eb90cb6c97ccd35181c441ece14f8a)
+
+Change-Id: I2c0f59ad9aa6e544a2a613e902933d463f22a5b6
+Reviewed-on: http://gerrit.openafs.org/8079
+Reviewed-by: Ken Dreyer <ktdreyer@ktdreyer.com>
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
+(cherry picked from commit 1bba9760b26bdb1ef1e17f9d1e15be9d565828cc)
+---
+ acinclude.m4               |  1 +
+ src/afs/LINUX/osi_compat.h | 16 ++++++++++++++++
+ src/afs/LINUX/osi_file.c   |  4 ++--
+ src/cf/linux-test4.m4      | 12 ++++++++++++
+ 4 files changed, 31 insertions(+), 2 deletions(-)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index 20fd15e..d99c755 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -960,6 +960,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
+ 		 LINUX_IOP_CREATE_TAKES_UMODE_T
+ 		 LINUX_EXPORT_OP_ENCODE_FH_TAKES_INODES
+ 		 LINUX_KMAP_ATOMIC_TAKES_NO_KM_TYPE
++		 LINUX_DENTRY_OPEN_TAKES_PATH
+ 
+ 		 dnl If we are guaranteed that keyrings will work - that is
+ 		 dnl  a) The kernel has keyrings enabled
+diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h
+index 4c7c261..84fcaa5 100644
+--- a/src/afs/LINUX/osi_compat.h
++++ b/src/afs/LINUX/osi_compat.h
+@@ -445,4 +445,20 @@ afs_get_dentry_ref(struct path *path, struct vfsmount **mnt, struct dentry **dpp
+ #endif
+ }
+ 
++#if defined(STRUCT_TASK_STRUCT_HAS_CRED)
++static inline struct file *
++afs_dentry_open(struct dentry *dp, struct vfsmount *mnt, int flags, const struct cred *creds) {
++#if defined(DENTRY_OPEN_TAKES_PATH)
++    struct path path;
++    struct file *filp;
++    path.mnt = mnt;
++    path.dentry = dp;
++    filp = dentry_open(&path, flags, creds);
++    return filp;
++#else
++    return dentry_open(dp, mntget(mnt), flags, creds);
++#endif
++}
++#endif
++
+ #endif /* AFS_LINUX_OSI_COMPAT_H */
+diff --git a/src/afs/LINUX/osi_file.c b/src/afs/LINUX/osi_file.c
+index 3c20fd9..27806ab 100644
+--- a/src/afs/LINUX/osi_file.c
++++ b/src/afs/LINUX/osi_file.c
+@@ -56,9 +56,9 @@ afs_linux_raw_open(afs_dcache_id_t *ainode)
+ 
+ #if defined(STRUCT_TASK_STRUCT_HAS_CRED)
+     /* Use stashed credentials - prevent selinux/apparmor problems  */
+-    filp = dentry_open(dp, mntget(afs_cacheMnt), O_RDWR, cache_creds);
++    filp = afs_dentry_open(dp, mntget(afs_cacheMnt), O_RDWR, cache_creds);
+     if (IS_ERR(filp))
+-	filp = dentry_open(dp, mntget(afs_cacheMnt), O_RDWR, current_cred());
++	filp = afs_dentry_open(dp, mntget(afs_cacheMnt), O_RDWR, current_cred());
+ #else
+     filp = dentry_open(dp, mntget(afs_cacheMnt), O_RDWR);
+ #endif
+diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4
+index 7db805f..427c5e1 100644
+--- a/src/cf/linux-test4.m4
++++ b/src/cf/linux-test4.m4
+@@ -687,3 +687,15 @@ AC_DEFUN([LINUX_KMAP_ATOMIC_TAKES_NO_KM_TYPE], [
+ 			[define if kmap_atomic takes no km_type argument],
+ 			[-Werror])
+ ])
++
++
++AC_DEFUN([LINUX_DENTRY_OPEN_TAKES_PATH], [
++  AC_CHECK_LINUX_BUILD([whether dentry_open takes a path argument],
++			[ac_cv_linux_dentry_open_takes_path],
++			[#include <linux/fs.h>],
++			[struct path p;
++			dentry_open(&p, 0, NULL);],
++			[DENTRY_OPEN_TAKES_PATH],
++			[define if dentry_open takes a path argument],
++			[-Werror])
++])
+-- 
+1.8.0
+
+
+From 1aebd8757ba9684e0be18d722797a594146cefce Mon Sep 17 00:00:00 2001
+From: Marc Dionne <marc.c.dionne@gmail.com>
+Date: Mon, 13 Aug 2012 21:55:25 -0400
+Subject: [PATCH 07/12] Linux 3.6: d_alias and i_dentry are now hlists
+
+The d_alias pointer is now the head of an hlist.  This means the
+iterator is a different macro and has no "reverse" version since
+hlists have no direct pointer to the list tail.
+
+inode->i_dentry gets the same treatment.  Adjust where we use it.
+
+Reviewed-on: http://gerrit.openafs.org/7983
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+Reviewed-by: Derrick Brashear <shadow@dementix.org>
+(cherry picked from commit 6bea047fb404bde828c6358ae06f7941aa2bc959)
+
+Change-Id: I7e7b87e5f5c240f3f0ff25fa723c857ab9d0108c
+Reviewed-on: http://gerrit.openafs.org/8080
+Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
+Reviewed-by: Ken Dreyer <ktdreyer@ktdreyer.com>
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+(cherry picked from commit b5a66fb391b47848f023042e96c87a1b7d49b888)
+---
+ acinclude.m4               |  1 +
+ src/afs/LINUX/osi_vcache.c | 12 ++++++++++++
+ src/afs/afs_daemons.c      |  5 +++++
+ src/cf/linux-test4.m4      | 13 +++++++++++++
+ 4 files changed, 31 insertions(+)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index d99c755..d52d149 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -961,6 +961,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
+ 		 LINUX_EXPORT_OP_ENCODE_FH_TAKES_INODES
+ 		 LINUX_KMAP_ATOMIC_TAKES_NO_KM_TYPE
+ 		 LINUX_DENTRY_OPEN_TAKES_PATH
++		 LINUX_D_ALIAS_IS_HLIST
+ 
+ 		 dnl If we are guaranteed that keyrings will work - that is
+ 		 dnl  a) The kernel has keyrings enabled
+diff --git a/src/afs/LINUX/osi_vcache.c b/src/afs/LINUX/osi_vcache.c
+index e82d78e..cd61c65 100644
+--- a/src/afs/LINUX/osi_vcache.c
++++ b/src/afs/LINUX/osi_vcache.c
+@@ -19,7 +19,11 @@ osi_TryEvictVCache(struct vcache *avc, int *slept, int defersleep) {
+ 
+     struct dentry *dentry;
+     struct inode *inode = AFSTOV(avc);
++#if defined(D_ALIAS_IS_HLIST)
++    struct hlist_node *cur, *head;
++#else
+     struct list_head *cur, *head;
++#endif
+ 
+     /* First, see if we can evict the inode from the dcache */
+     if (defersleep && avc != afs_globalVp && VREFCOUNT(avc) > 1 && avc->opens == 0) {
+@@ -53,12 +57,20 @@ restart:
+ 	spin_unlock(&dcache_lock);
+ #else /* HAVE_DCACHE_LOCK */
+ 	spin_lock(&inode->i_lock);
++#if defined(D_ALIAS_IS_HLIST)
++	head = inode->i_dentry.first;
++#else
+ 	head = &inode->i_dentry;
++#endif
+ 
+ restart:
+ 	cur = head;
+ 	while ((cur = cur->next) != head) {
++#if defined(D_ALIAS_IS_HLIST)
++	    dentry = hlist_entry(cur, struct dentry, d_alias);
++#else
+ 	    dentry = list_entry(cur, struct dentry, d_alias);
++#endif
+ 
+ 	    spin_lock(&dentry->d_lock);
+ 	    if (d_unhashed(dentry)) {
+diff --git a/src/afs/afs_daemons.c b/src/afs/afs_daemons.c
+index 23655e3..f47be0e 100644
+--- a/src/afs/afs_daemons.c
++++ b/src/afs/afs_daemons.c
+@@ -396,8 +396,13 @@ afs_CheckRootVolume(void)
+ 		    spin_lock(&dp->d_lock);
+ #endif
+ #endif
++#if defined(D_ALIAS_IS_HLIST)
++		    hlist_del_init(&dp->d_alias);
++		    hlist_add_head(&dp->d_alias, &(AFSTOV(vcp)->i_dentry));
++#else
+ 		    list_del_init(&dp->d_alias);
+ 		    list_add(&dp->d_alias, &(AFSTOV(vcp)->i_dentry));
++#endif
+ 		    dp->d_inode = AFSTOV(vcp);
+ #if defined(AFS_LINUX24_ENV)
+ #if defined(AFS_LINUX26_ENV)
+diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4
+index 427c5e1..6b70059 100644
+--- a/src/cf/linux-test4.m4
++++ b/src/cf/linux-test4.m4
+@@ -699,3 +699,16 @@ AC_DEFUN([LINUX_DENTRY_OPEN_TAKES_PATH], [
+ 			[define if dentry_open takes a path argument],
+ 			[-Werror])
+ ])
++
++
++AC_DEFUN([LINUX_D_ALIAS_IS_HLIST], [
++  AC_CHECK_LINUX_BUILD([whether dentry->d_alias is an hlist],
++			[ac_cv_linux_d_alias_is_hlist],
++			[#include <linux/fs.h>],
++			[struct dentry *d = NULL;
++			struct hlist_node *hn = NULL;
++			d->d_alias = *hn;],
++			[D_ALIAS_IS_HLIST],
++			[define if dentry->d_alias is an hlist],
++			[])
++])
+-- 
+1.8.0
+
+
+From 10f8f641542d9bc16c9a9c953324fa9d89b81607 Mon Sep 17 00:00:00 2001
+From: Marc Dionne <marc.c.dionne@gmail.com>
+Date: Tue, 14 Aug 2012 17:11:08 -0400
+Subject: [PATCH 08/12] Linux: fix variable used to test for the iop create
+ API
+
+Use correct variable when testing for the create API to use.
+
+This is just for looks - there is no effect since mkdir and create
+were changed in the same kernel release.
+
+Reviewed-on: http://gerrit.openafs.org/7984
+Reviewed-by: Alistair Ferguson <alistair.ferguson@mac.com>
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+Reviewed-by: Derrick Brashear <shadow@dementix.org>
+(cherry picked from commit c633a92a1bc7881f18ee641082ff2efe7da1a8cb)
+
+Change-Id: Ib23fe9a34bc07227614c149b0f16d3b0a067501b
+Reviewed-on: http://gerrit.openafs.org/8081
+Reviewed-by: Ken Dreyer <ktdreyer@ktdreyer.com>
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
+(cherry picked from commit aecd183acb34a0a9b850fb69eed472d2c9a27612)
+---
+ src/afs/LINUX/osi_vnodeops.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c
+index 4cda547..b3bf115 100644
+--- a/src/afs/LINUX/osi_vnodeops.c
++++ b/src/afs/LINUX/osi_vnodeops.c
+@@ -1094,7 +1094,7 @@ struct dentry_operations afs_dentry_operations = {
+  * name is in kernel space at this point.
+  */
+ static int
+-#if defined(IOP_MKDIR_TAKES_UMODE_T)
++#if defined(IOP_CREATE_TAKES_UMODE_T)
+ afs_linux_create(struct inode *dip, struct dentry *dp, umode_t mode,
+ 		 struct nameidata *nd)
+ #else
+-- 
+1.8.0
+
+
+From 6cbb9a258b73c28c0295f93b75cbd437efe3713a Mon Sep 17 00:00:00 2001
+From: Marc Dionne <marc.c.dionne@gmail.com>
+Date: Tue, 14 Aug 2012 17:28:50 -0400
+Subject: [PATCH 09/12] Linux 3.6: create inode operation API change
+
+The nameidata argument is dropped and a flag is added.
+
+Reviewed-on: http://gerrit.openafs.org/7985
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+Reviewed-by: Derrick Brashear <shadow@dementix.org>
+(cherry picked from commit 020e32779c103817ca89caa51259fb53bc3dde79)
+
+Change-Id: Iae2a0301a1c4acb6835eb0bdca6ae22b143b2cda
+Reviewed-on: http://gerrit.openafs.org/8082
+Reviewed-by: Ken Dreyer <ktdreyer@ktdreyer.com>
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
+(cherry picked from commit 5210d97865d974d5e14f68eec6a58b292d6b7893)
+---
+ acinclude.m4                 |  1 +
+ src/afs/LINUX/osi_vnodeops.c |  9 +++++----
+ src/cf/linux-test4.m4        | 15 +++++++++++++++
+ 3 files changed, 21 insertions(+), 4 deletions(-)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index d52d149..1c84354 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -962,6 +962,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
+ 		 LINUX_KMAP_ATOMIC_TAKES_NO_KM_TYPE
+ 		 LINUX_DENTRY_OPEN_TAKES_PATH
+ 		 LINUX_D_ALIAS_IS_HLIST
++		 LINUX_IOP_I_CREATE_TAKES_BOOL
+ 
+ 		 dnl If we are guaranteed that keyrings will work - that is
+ 		 dnl  a) The kernel has keyrings enabled
+diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c
+index b3bf115..8c8045b 100644
+--- a/src/afs/LINUX/osi_vnodeops.c
++++ b/src/afs/LINUX/osi_vnodeops.c
+@@ -1094,17 +1094,18 @@ struct dentry_operations afs_dentry_operations = {
+  * name is in kernel space at this point.
+  */
+ static int
+-#if defined(IOP_CREATE_TAKES_UMODE_T)
++#if defined(IOP_CREATE_TAKES_BOOL)
++afs_linux_create(struct inode *dip, struct dentry *dp, umode_t mode,
++		 bool excl)
++#elif defined(IOP_CREATE_TAKES_UMODE_T)
+ afs_linux_create(struct inode *dip, struct dentry *dp, umode_t mode,
+ 		 struct nameidata *nd)
+-#else
+-#ifdef IOP_CREATE_TAKES_NAMEIDATA
++#elif defined(IOP_CREATE_TAKES_NAMEIDATA)
+ afs_linux_create(struct inode *dip, struct dentry *dp, int mode,
+ 		 struct nameidata *nd)
+ #else
+ afs_linux_create(struct inode *dip, struct dentry *dp, int mode)
+ #endif
+-#endif
+ {
+     struct vattr vattr;
+     cred_t *credp = crref();
+diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4
+index 6b70059..dc30770 100644
+--- a/src/cf/linux-test4.m4
++++ b/src/cf/linux-test4.m4
+@@ -712,3 +712,18 @@ AC_DEFUN([LINUX_D_ALIAS_IS_HLIST], [
+ 			[define if dentry->d_alias is an hlist],
+ 			[])
+ ])
++
++
++AC_DEFUN([LINUX_IOP_I_CREATE_TAKES_BOOL], [
++  AC_CHECK_LINUX_BUILD([whether inode_operations.create takes a bool],
++			[ac_cv_linux_func_i_create_takes_bool],
++			[#include <linux/fs.h>
++			#include <linux/namei.h>],
++			[struct inode _inode = {};
++			struct dentry _dentry;
++			bool b = true;
++			(void)_inode.i_op->create(&_inode, &_dentry, 0, b);],
++		       [IOP_CREATE_TAKES_BOOL],
++		       [define if your iops.create takes a bool argument],
++		       [-Werror])
++])
+-- 
+1.8.0
+
+
+From ebfd3de107e0dd97127aa12e572684cc98a457cf Mon Sep 17 00:00:00 2001
+From: Marc Dionne <marc.c.dionne@gmail.com>
+Date: Tue, 14 Aug 2012 18:08:51 -0400
+Subject: [PATCH 10/12] Linux 3.6: revalidate dentry op API change
+
+The nameidata argument is dropped, replaced by an unsigned flags
+value.  The configure test is very specific; kernels with the
+older API with a signed int flags value should fall through.
+
+Reviewed-on: http://gerrit.openafs.org/7986
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+Reviewed-by: Derrick Brashear <shadow@dementix.org>
+(cherry picked from commit 7413cd09a53f89882a46fd100bf6c501348f2188)
+
+Change-Id: Ie68d70dcf414d24e7e980c8a8f35b83550d2da7c
+Reviewed-on: http://gerrit.openafs.org/8083
+Reviewed-by: Ken Dreyer <ktdreyer@ktdreyer.com>
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
+(cherry picked from commit 4ab59d7ee924a6be1d553f75a67b0b253cc85e88)
+---
+ acinclude.m4                 |  1 +
+ src/afs/LINUX/osi_vnodeops.c |  8 +++++++-
+ src/cf/linux-test4.m4        | 14 ++++++++++++++
+ 3 files changed, 22 insertions(+), 1 deletion(-)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index 1c84354..8bb5bf7 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -963,6 +963,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
+ 		 LINUX_DENTRY_OPEN_TAKES_PATH
+ 		 LINUX_D_ALIAS_IS_HLIST
+ 		 LINUX_IOP_I_CREATE_TAKES_BOOL
++		 LINUX_DOP_D_REVALIDATE_TAKES_UNSIGNED
+ 
+ 		 dnl If we are guaranteed that keyrings will work - that is
+ 		 dnl  a) The kernel has keyrings enabled
+diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c
+index 8c8045b..49f8b96 100644
+--- a/src/afs/LINUX/osi_vnodeops.c
++++ b/src/afs/LINUX/osi_vnodeops.c
+@@ -906,7 +906,9 @@ afs_linux_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *sta
+  * later on, we shouldn't have to do it until later. Perhaps in the future..
+  */
+ static int
+-#ifdef DOP_REVALIDATE_TAKES_NAMEIDATA
++#if defined(DOP_REVALIDATE_TAKES_UNSIGNED)
++afs_linux_dentry_revalidate(struct dentry *dp, unsigned int flags)
++#elif defined(DOP_REVALIDATE_TAKES_NAMEIDATA)
+ afs_linux_dentry_revalidate(struct dentry *dp, struct nameidata *nd)
+ #else
+ afs_linux_dentry_revalidate(struct dentry *dp, int flags)
+@@ -921,7 +923,11 @@ afs_linux_dentry_revalidate(struct dentry *dp, int flags)
+ 
+ #ifdef LOOKUP_RCU
+     /* We don't support RCU path walking */
++# if defined(DOP_REVALIDATE_TAKES_UNSIGNED)
++    if (flags & LOOKUP_RCU)
++# else
+     if (nd->flags & LOOKUP_RCU)
++# endif
+        return -ECHILD;
+ #endif
+     AFS_GLOCK();
+diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4
+index dc30770..4a6ec02 100644
+--- a/src/cf/linux-test4.m4
++++ b/src/cf/linux-test4.m4
+@@ -727,3 +727,17 @@ AC_DEFUN([LINUX_IOP_I_CREATE_TAKES_BOOL], [
+ 		       [define if your iops.create takes a bool argument],
+ 		       [-Werror])
+ ])
++
++
++AC_DEFUN([LINUX_DOP_D_REVALIDATE_TAKES_UNSIGNED], [
++  AC_CHECK_LINUX_BUILD([whether dentry_operations.d_revalidate takes an unsigned int],
++			[ac_cv_linux_func_d_revalidate_takes_unsigned],
++			[#include <linux/fs.h>
++			#include <linux/namei.h>],
++			[struct dentry_operations dops;
++			int reval(struct dentry *d, unsigned int i) { return 0; };
++			dops.d_revalidate = reval;],
++		       [DOP_REVALIDATE_TAKES_UNSIGNED],
++		       [define if your dops.d_revalidate takes an unsigned int argument],
++		       [-Werror])
++])
+-- 
+1.8.0
+
+
+From 208d7925bd59490712bfd6bedc41ba5e3a8f4a6c Mon Sep 17 00:00:00 2001
+From: Marc Dionne <marc.c.dionne@gmail.com>
+Date: Tue, 14 Aug 2012 18:26:24 -0400
+Subject: [PATCH 11/12] Linux 3.6: lookup inode operation API change
+
+The nameidata argument is replaced with an unsigned int flags
+argument.
+
+Reviewed-on: http://gerrit.openafs.org/7987
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+Reviewed-by: Derrick Brashear <shadow@dementix.org>
+(cherry picked from commit ec48dca871ef98adb69792a34047c6be5818f1b2)
+
+Change-Id: Ic8be26141ede6e1c4062872c79a846efb0045bda
+Reviewed-on: http://gerrit.openafs.org/8084
+Reviewed-by: Ken Dreyer <ktdreyer@ktdreyer.com>
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
+(cherry picked from commit 6c22f2e1de91fa3080221df22fdcd05064b57307)
+---
+ acinclude.m4                 |  1 +
+ src/afs/LINUX/osi_vnodeops.c |  5 ++++-
+ src/cf/linux-test4.m4        | 14 ++++++++++++++
+ 3 files changed, 19 insertions(+), 1 deletion(-)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index 8bb5bf7..4b49449 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -964,6 +964,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
+ 		 LINUX_D_ALIAS_IS_HLIST
+ 		 LINUX_IOP_I_CREATE_TAKES_BOOL
+ 		 LINUX_DOP_D_REVALIDATE_TAKES_UNSIGNED
++		 LINUX_IOP_LOOKUP_TAKES_UNSIGNED
+ 
+ 		 dnl If we are guaranteed that keyrings will work - that is
+ 		 dnl  a) The kernel has keyrings enabled
+diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c
+index 49f8b96..c376bd1 100644
+--- a/src/afs/LINUX/osi_vnodeops.c
++++ b/src/afs/LINUX/osi_vnodeops.c
+@@ -1147,7 +1147,10 @@ afs_linux_create(struct inode *dip, struct dentry *dp, int mode)
+ 
+ /* afs_linux_lookup */
+ static struct dentry *
+-#ifdef IOP_LOOKUP_TAKES_NAMEIDATA
++#if defined(IOP_LOOKUP_TAKES_UNSIGNED)
++afs_linux_lookup(struct inode *dip, struct dentry *dp,
++		 unsigned flags)
++#elif defined(IOP_LOOKUP_TAKES_NAMEIDATA)
+ afs_linux_lookup(struct inode *dip, struct dentry *dp,
+ 		 struct nameidata *nd)
+ #else
+diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4
+index 4a6ec02..fc0149f 100644
+--- a/src/cf/linux-test4.m4
++++ b/src/cf/linux-test4.m4
+@@ -741,3 +741,17 @@ AC_DEFUN([LINUX_DOP_D_REVALIDATE_TAKES_UNSIGNED], [
+ 		       [define if your dops.d_revalidate takes an unsigned int argument],
+ 		       [-Werror])
+ ])
++
++
++AC_DEFUN([LINUX_IOP_LOOKUP_TAKES_UNSIGNED], [
++  AC_CHECK_LINUX_BUILD([whether inode operation lookup takes an unsigned int],
++			[ac_cv_linux_func_lookup_takes_unsigned],
++			[#include <linux/fs.h>
++			#include <linux/namei.h>],
++			[struct inode_operations iops;
++			struct dentry *look(struct inode *i, struct dentry *d, unsigned int j) { return NULL; };
++			iops.lookup = look;],
++		       [IOP_LOOKUP_TAKES_UNSIGNED],
++		       [define if your iops.lookup takes an unsigned int argument],
++		       [-Werror])
++])
+-- 
+1.8.0
+
+
+From 6c53a1dea7d8fe3174405febf2bf7b98a219824d Mon Sep 17 00:00:00 2001
+From: Marc Dionne <marc.c.dionne@gmail.com>
+Date: Fri, 12 Oct 2012 16:25:43 -0400
+Subject: [PATCH 12/12] Linux: osi_vcache: Fix loop for the hlist case
+
+An hlist is not circular, and the end is marked by a NULL next
+pointer.
+
+Reviewed-on: http://gerrit.openafs.org/8233
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
+(cherry picked from commit 78ae01fb9837d79e7bbdb2918872ab106d4c7e98)
+
+Change-Id: I7e4e3ed2515dd8c2ec765d8acbb97eba189d6aeb
+Reviewed-on: http://gerrit.openafs.org/8239
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
+(cherry picked from commit 0506af9c058e22e3475f7e152c022571c0823253)
+---
+ src/afs/LINUX/osi_vcache.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/src/afs/LINUX/osi_vcache.c b/src/afs/LINUX/osi_vcache.c
+index cd61c65..dc3685b 100644
+--- a/src/afs/LINUX/osi_vcache.c
++++ b/src/afs/LINUX/osi_vcache.c
+@@ -20,9 +20,9 @@ osi_TryEvictVCache(struct vcache *avc, int *slept, int defersleep) {
+     struct dentry *dentry;
+     struct inode *inode = AFSTOV(avc);
+ #if defined(D_ALIAS_IS_HLIST)
+-    struct hlist_node *cur, *head;
++    struct hlist_node *cur, *head, *list_end;
+ #else
+-    struct list_head *cur, *head;
++    struct list_head *cur, *head, *list_end;
+ #endif
+ 
+     /* First, see if we can evict the inode from the dcache */
+@@ -59,13 +59,15 @@ restart:
+ 	spin_lock(&inode->i_lock);
+ #if defined(D_ALIAS_IS_HLIST)
+ 	head = inode->i_dentry.first;
++	list_end = NULL;
+ #else
+ 	head = &inode->i_dentry;
++	list_end = head;
+ #endif
+ 
+ restart:
+ 	cur = head;
+-	while ((cur = cur->next) != head) {
++	while ((cur = cur->next) != list_end) {
+ #if defined(D_ALIAS_IS_HLIST)
+ 	    dentry = hlist_entry(cur, struct dentry, d_alias);
+ #else
+-- 
+1.8.0
+
Index: trunk/server/common/patches/openafs-stable-1.6.1.1.patch
===================================================================
--- trunk/server/common/patches/openafs-stable-1.6.1.1.patch	(revision 2335)
+++ 	(revision )
@@ -1,20736 +1,0 @@
-diff --git a/Makefile.in b/Makefile.in
-index f1995c7..3a901b8 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -97,7 +97,7 @@ dpkg:
- packages: dest
- 	@case ${SYS_NAME} in \
- 	*_darwin_* ) \
--		${COMPILE_PART1} packaging/MacOS && sh ./buildpkg.sh ${DEST} ;; \
-+		${COMPILE_PART1} packaging/MacOS && bash ./buildpkg.sh ${DEST} ;; \
- 	hp_ux110 ) \
- 		${COMPILE_PART1} packaging/HP-UX && swpackage -s  psf-1.2.10-transarc-paths-11.00 ;; \
- 	hp_ux11i ) \
-diff --git a/acinclude.m4 b/acinclude.m4
-index 6e2c9ae..c14977a 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -458,13 +458,13 @@ else
- 			vm=${v#*.}
- 			AFS_SYSNAME="amd64_obsd${vM}${vm}"
- 			;;
--		i?86-*-freebsd?.*)
-+		i?86-*-freebsd*.*)
- 			v=${host#*freebsd}
- 			vM=${v%.*}
- 			vm=${v#*.}
- 			AFS_SYSNAME="i386_fbsd_${vM}${vm}"
- 			;;
--		x86_64-*-freebsd?.*)
-+		x86_64-*-freebsd*.*)
- 			v=${host#*freebsd}
- 			vM=${v%.*}
- 			vm=${v#*.}
-@@ -793,6 +793,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
- 		 AC_CHECK_LINUX_STRUCT([backing_dev_info], [name],
- 				       [backing-dev.h])
- 		 AC_CHECK_LINUX_STRUCT([ctl_table], [ctl_name], [sysctl.h])
-+		 AC_CHECK_LINUX_STRUCT([dentry_operations], [d_automount], [dcache.h])
- 		 AC_CHECK_LINUX_STRUCT([inode], [i_alloc_sem], [fs.h])
- 		 AC_CHECK_LINUX_STRUCT([inode], [i_blkbits], [fs.h])
- 		 AC_CHECK_LINUX_STRUCT([inode], [i_blksize], [fs.h])
-@@ -840,6 +841,9 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
- #include <linux/page-flags.h>],
- 				     [struct page *_page;
-                                       int bchecked = PageFsMisc(_page);])
-+		 AC_CHECK_LINUX_FUNC([clear_inode],
-+				     [#include <linux/fs.h>],
-+				     [clear_inode(NULL);])
- 		 AC_CHECK_LINUX_FUNC([current_kernel_time],
- 				     [#include <linux/time.h>],
- 			             [struct timespec s;
-@@ -887,6 +891,10 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
- 				     [#include <linux/fs.h>
- 				      #include <linux/namei.h>],
- 				     [path_lookup(NULL, 0, NULL);])
-+		 AC_CHECK_LINUX_FUNC([putname],
-+				     [#include <linux/fs.h>
-+				      #include <linux/namei.h>],
-+				     [putname(NULL);])
- 		 AC_CHECK_LINUX_FUNC([rcu_read_lock],
- 				     [#include <linux/rcupdate.h>],
- 				     [rcu_read_lock();])
-@@ -955,6 +963,13 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
- 		 LINUX_D_COUNT_IS_INT
- 		 LINUX_IOP_MKDIR_TAKES_UMODE_T
- 		 LINUX_IOP_CREATE_TAKES_UMODE_T
-+		 LINUX_EXPORT_OP_ENCODE_FH_TAKES_INODES
-+		 LINUX_KMAP_ATOMIC_TAKES_NO_KM_TYPE
-+		 LINUX_DENTRY_OPEN_TAKES_PATH
-+		 LINUX_D_ALIAS_IS_HLIST
-+		 LINUX_IOP_I_CREATE_TAKES_BOOL
-+		 LINUX_DOP_D_REVALIDATE_TAKES_UNSIGNED
-+		 LINUX_IOP_LOOKUP_TAKES_UNSIGNED
- 
- 		 dnl If we are guaranteed that keyrings will work - that is
- 		 dnl  a) The kernel has keyrings enabled
-@@ -1319,7 +1334,7 @@ AC_CHECK_FUNCS(snprintf strlcat strlcpy flock getrlimit strnlen tsearch)
- AC_CHECK_FUNCS(setprogname getprogname sigaction mkstemp vsnprintf strerror strcasestr)
- AC_CHECK_FUNCS(setvbuf vsyslog getcwd)
- AC_CHECK_FUNCS(regcomp regexec regerror)
--AC_CHECK_FUNCS(fseeko64 ftello64 pread preadv pwrite pwritev preadv64 pwritev64)
-+AC_CHECK_FUNCS(fseeko64 ftello64 poll pread preadv pwrite pwritev preadv64 pwritev64)
- AC_CHECK_FUNCS([setenv unsetenv])
- 
- case $AFS_SYSNAME in
-diff --git a/configure-libafs.ac b/configure-libafs.ac
-index bf2f34d..ea83846 100644
---- a/configure-libafs.ac
-+++ b/configure-libafs.ac
-@@ -5,7 +5,7 @@ AC_CONFIG_SRCDIR(src/libafs/Makefile.common.in)
- AM_INIT_AUTOMAKE
- 
- AC_CONFIG_HEADER(src/config/afsconfig.h)
--MACOS_VERSION=1.6.1
-+MACOS_VERSION=1.6.1.1
- 
- AC_SUBST(MACOS_VERSION)
- 
-diff --git a/configure.ac b/configure.ac
-index bd8b7e9..2f3631d 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -5,8 +5,8 @@ AC_CONFIG_SRCDIR([src/config/stds.h])
- AM_INIT_AUTOMAKE
- 
- AC_CONFIG_HEADER(src/config/afsconfig.h)
--MACOS_VERSION=1.6.1
--LINUX_PKGVER=1.6.1
-+MACOS_VERSION=1.6.1.1
-+LINUX_PKGVER=1.6.1.1
- 
- dnl Debian wants the release candidate version in the main upstream version,
- dnl and wants ~ before it.
-@@ -55,6 +55,7 @@ AS_IF([test x"$KRB5_LIBS" != x],
-         add_to_error_table \
-         encode_krb5_enc_tkt_part \
-         encode_krb5_ticket \
-+	krb5_524_conv_principal \
-         krb5_allow_weak_crypto \
-         krb5_c_encrypt \
-         krb5_decode_ticket \
-@@ -68,6 +69,9 @@ AS_IF([test x"$KRB5_LIBS" != x],
-              [AC_CHECK_LIB([krb524], [krb524_convert_creds_kdc],
-                  [LIBS="-lkrb524 $LIBS"
-                   KRB5_LIBS="-lkrb524 $KRB5_LIBS"
-+		  AC_CHECK_LIB([krb524], [krb5_524_conv_principal],
-+		  [AC_DEFINE([HAVE_KRB5_524_CONV_PRINCIPAL], 1,
-+		     [Define to 1 if you have the `krb5_524_conv_principal' function.])])
-                   AC_DEFINE([HAVE_KRB524_CONVERT_CREDS_KDC], 1,
-                      [Define to 1 if you have the `krb524_convert_creds_kdc' function.])])])])
-      AC_CHECK_HEADERS([kerberosIV/krb.h])
-diff --git a/doc/man-pages/NTMakefile b/doc/man-pages/NTMakefile
-index a00781d..cd4013c 100644
---- a/doc/man-pages/NTMakefile
-+++ b/doc/man-pages/NTMakefile
-@@ -37,6 +37,7 @@ PODS = \
-         pod1\dlog.pod                  \
-         pod1\fs.pod                    \
-         pod1\fs_apropos.pod            \
-+        pod1\fs_bypassthreshold.pod    \
-         pod1\fs_checkservers.pod       \
-         pod1\fs_checkvolumes.pod       \
-         pod1\fs_chgrp.pod              \
-@@ -352,6 +353,10 @@ clean::
-         $(CD) html
-         $(DEL) /s *.html
-         $(CD) ..
-+        $(DEL) pod1\fs_listquota.pod
-+        $(DEL) pod1\fs_quota.pod
-+        $(DEL) pod1\fs_setquota.pod
-+        $(DEL) pod1\fs_setvol.pod
-         $(DEL) pod1\pts_adduser.pod
-         $(DEL) pod1\pts_chown.pod
-         $(DEL) pod1\pts_creategroup.pod
-@@ -370,8 +375,15 @@ clean::
-         $(DEL) pod1\pts_setmax.pod
-         $(DEL) pod1\pts_sleep.pod
-         $(DEL) pod1\pts_source.pod
-+        $(DEL) pod1\vos.pod
-         $(DEL) pod1\vos_addsite.pod
-+        $(DEL) pod1\vos_clone.pod
-         $(DEL) pod1\vos_copy.pod
-+        $(DEL) pod1\vos_create.pod
-+        $(DEL) pod1\vos_examine.pod
-+        $(DEL) pod1\vos_move.pod
-+        $(DEL) pod1\vos_partinfo.pod
-+        $(DEL) pod1\vos_shadow.pod
-         $(DEL) pod1\vos_zap.pod
-         $(DEL) pod8\dafileserver.pod
-         $(DEL) pod8\dasalvager.pod
-diff --git a/doc/man-pages/pod1/.gitignore b/doc/man-pages/pod1/.gitignore
-index 1a1d4d6..97eb6d3 100644
---- a/doc/man-pages/pod1/.gitignore
-+++ b/doc/man-pages/pod1/.gitignore
-@@ -2,6 +2,10 @@
- #     git ls-files -i --exclude-standard
- # to check that you haven't inadvertently ignored any tracked files.
- 
-+/fs_listquota.pod
-+/fs_quota.pod
-+/fs_setquota.pod
-+/fs_setvol.pod
- /pts_adduser.pod
- /pts_chown.pod
- /pts_creategroup.pod
-@@ -20,6 +24,13 @@
- /pts_setmax.pod
- /pts_sleep.pod
- /pts_source.pod
-+/vos.pod
- /vos_addsite.pod
- /vos_copy.pod
-+/vos_clone.pod
-+/vos_create.pod
-+/vos_examine.pod
-+/vos_move.pod
-+/vos_partinfo.pod
-+/vos_shadow.pod
- /vos_zap.pod
-diff --git a/doc/man-pages/pod1/fragments/volsize-caution.pod b/doc/man-pages/pod1/fragments/volsize-caution.pod
-new file mode 100644
-index 0000000..a3d0759
---- /dev/null
-+++ b/doc/man-pages/pod1/fragments/volsize-caution.pod
-@@ -0,0 +1,5 @@
-+Currently, the maximum quota for a volume is 2 terabytes (2^41 bytes). Note
-+that this only affects the volume's quota; a volume may grow much larger if
-+the volume quota is disabled. However, volumes over 2 terabytes in size may
-+be impractical to move, and may have their size incorrectly reported by some
-+tools, such as L<fs_listquota(1)>.
-diff --git a/doc/man-pages/pod1/fs.pod b/doc/man-pages/pod1/fs.pod
-index 0a4dd14..266505b 100644
---- a/doc/man-pages/pod1/fs.pod
-+++ b/doc/man-pages/pod1/fs.pod
-@@ -57,6 +57,7 @@ and L<B<fs whichcell>|fs_whichcell(1)>.
- =item *
- 
- Commands to administer the local client cache and related information:
-+L<B<fs bypassthreshold>|fs_bypassthreshold(1)>,
- L<B<fs checkvolumes>|fs_checkvolumes(1)>,
- L<B<fs cscpolicy>|fs_cscpolicy(1)>,
- L<B<fs flush>|fs_flush(1)>,
-diff --git a/doc/man-pages/pod1/fs_bypassthreshold.pod b/doc/man-pages/pod1/fs_bypassthreshold.pod
-new file mode 100644
-index 0000000..51ab54e
---- /dev/null
-+++ b/doc/man-pages/pod1/fs_bypassthreshold.pod
-@@ -0,0 +1,99 @@
-+=head1 NAME
-+
-+fs_bypassthreshold - get/set Cache Bypass file size threshold
-+
-+=head1 SYNOPSIS
-+
-+=for html
-+<div class="synopsis">
-+
-+B<fs bypassthreshold> S<<< [B<-size> <I<file size>>] >>> [B<-help>]
-+
-+B<fs bypassthresh> S<<< [B<-s> <I<file size>>] >>> [B<-h>]
-+
-+=for html
-+</div>
-+
-+=head1 DESCRIPTION
-+
-+The B<fs bypassthreshold> command either changes the AFS client Cache
-+Bypass file size threshold, or reports the current threshold. Normally,
-+when an application tries to read data via the OpenAFS client, the client
-+will fetch the required data from the fileserver, store the results in
-+the local cache, and then serve the application request from the local
-+cache. When the Cache Bypass feature is enabled, certain files will be
-+read directly from the network, and the data will not be saved to the
-+local cache. In some scenarios, this can provide a significant
-+performance improvement, especially if the data is only read once.
-+
-+Currently, the only way to specify which files should bypass the cache
-+and which files should not, is by file size. In the future, different
-+mechanisms may exist for specifying which files should bypass the local
-+cache and which should not.
-+
-+If B<-size> is not specified, B<fs bypassthreshold> just reports the
-+current threshold and exits.
-+
-+=head1 CAUTIONS
-+
-+Cache Bypass is still considered an experimental feature. Even in stable
-+releases of OpenAFS, it is not considered as stable as the rest of OpenAFS.
-+
-+=head1 OPTIONS
-+
-+=over 4
-+
-+=item B<-size> <I<file size>>
-+
-+Specifies how large a file must be in order to enable Cache Bypass mode.
-+If a file is larger than the specified file size (in bytes), reading from
-+that file will bypass the local cache and be read directly from the
-+network. A file size of -1 indicates that Cache Bypass should be disabled
-+complete, so no files will enable Cache Bypass mode, no matter how large
-+they are.
-+
-+By default, Cache Bypass is disabled.
-+
-+=item B<-help>
-+
-+Prints the online help for this command. All other valid options are
-+ignored.
-+
-+=back
-+
-+=head1 OUTPUT
-+
-+The output format is identical whether or not B<-size> was specified. If
-+B<-size> is specified, the bypass threshold is changed, and the output
-+represents the new, changed, threshold. Otherwise the output represents
-+the current threshold.
-+
-+=head1 EXAMPLES
-+
-+The following example turns on Cache Bypass with a threshold of 4KiB:
-+
-+   % fs bypassthreshold 4096
-+   Cache bypass threshold 4096
-+
-+The following example disables Cache Bypass:
-+
-+   % fs bypassthreshold -1
-+   Cache bypass threshold -1 (disabled)
-+
-+The following example examines the current Cache Bypass threshold:
-+
-+   % fs bypassthreshold
-+   Cache bypass threshold 4096
-+
-+=head1 PRIVILEGE REQUIRED
-+
-+To set the bypass threshold, the issuer must be logged in as the local
-+superuser C<root>. Otherwise, no privilege is required.
-+
-+=head1 COPYRIGHT
-+
-+Copyright 2012 Sine Nomine Associates
-+
-+This documentation is covered by the BSD License as written in the
-+doc/LICENSE file. This man page was written by Andrew Deason for
-+OpenAFS.
-diff --git a/doc/man-pages/pod1/fs_listquota.pod b/doc/man-pages/pod1/fs_listquota.pod
-deleted file mode 100644
-index 385a449..0000000
---- a/doc/man-pages/pod1/fs_listquota.pod
-+++ /dev/null
-@@ -1,124 +0,0 @@
--=head1 NAME
--
--fs_listquota - Displays quota information for a volume
--
--=head1 SYNOPSIS
--
--=for html
--<div class="synopsis">
--
--B<fs listquota> S<<< [B<-path> <I<dir/file path>>+] >>> [B<-human>] [B<-help>]
--
--B<fs listq> S<<< [B<-p> <I<dir/file path>>+] >>> [B<-hu>] [B<-he>]
--
--B<fs lq> S<<< [B<-p> <I<dir/file path>>+] >>> [B<-hu>] [B<-he>]
--
--=for html
--</div>
--
--=head1 DESCRIPTION
--
--The B<fs listquota> command displays information about the volume
--containing each specified directory or file (its name, quota, and amount
--of disk space used), along with an indicator of the percentage of space
--used on the host partition.
--
--To display more information about the host partition, use the B<fs
--examine> command.
--
--To set volume quota, use the B<fs setquota> or B<fs setvol> command.
--
--=head1 CAUTIONS
--
--Currently, the maximum size of a volume is 2 terabytes (2^31 bytes).
--
--=head1 OPTIONS
--
--=over 4
--
--=item B<-path> <I<dir/file path>>+
--
--Names a file or directory that resides in the volume about which to
--produce output. Partial pathnames are interpreted relative to the current
--working directory, which is also the default value if this argument is
--omitted.
--
--=item B<-human>
--
--Print space in a "human-readable" format. Instead of always printing space
--in kilobytes, show disk space in kilobytes, megabytes, gigabytes,
--terabytes, or petabytes, as appropriate.
--
--=item B<-help>
--
--Prints the online help for this command. All other valid options are
--ignored.
--
--=back
--
--=head1 OUTPUT
--
--The output displays information about the volume that houses each
--specified directory or file, in a tabular format that uses the following
--headers:
--
--=over 4
--
--=item Volume Name
--
--The name of the volume.
--
--=item Quota
--
--The volume's quota in kilobytes, or the string C<no limit> to indicate an
--unlimited quota.
--
--=item Used
--
--The amount of space used. If B<-human> is not specified, this value is in
--kilobytes.
--
--=item % Used
--
--The percentage of the volume's quota that is used (the C<Used> statistic
--divided by the C<Quota> statistic, times 100).
--
--=item Partition
--
--The percentage of space used on the partition that houses the
--volume. Although not directly related to how much of the user's quota is
--used, it is reported because a full partition can cause writing of data
--back to the volume to fail even when the volume has not reached its quota.
--
--=back
--
--=head1 EXAMPLES
--
--The following example shows the output for the volume C<user.smith>:
--
--   % fs listquota -path /afs/abc.com/usr/smith
--   Volume Name     Quota    Used    % Used   Partition
--   user.smith      15000    5071       34%         86%
--
--=head1 PRIVILEGE REQUIRED
--
--The issuer must have the C<r> (read) permission on the ACL of the root
--directory of the volume that houses the file or directory named by the
--B<-path> argument, and C<l> (list) permission on the ACL of each 
--directory that precedes it in the pathname.
--
--=head1 SEE ALSO
--
--L<fs_diskfree(1)>,
--L<fs_examine(1)>,
--L<fs_quota(1)>,
--L<fs_setquota(1)>,
--L<fs_setvol(1)>
--
--=head1 COPYRIGHT
--
--IBM Corporation 2000. <http://www.ibm.com/> All Rights Reserved.
--
--This documentation is covered by the IBM Public License Version 1.0.  It was
--converted from HTML to POD by software written by Chas Williams and Russ
--Allbery, based on work by Alf Wachsmann and Elizabeth Cassell.
-diff --git a/doc/man-pages/pod1/fs_listquota.pod.in b/doc/man-pages/pod1/fs_listquota.pod.in
-new file mode 100644
-index 0000000..6628c2b
---- /dev/null
-+++ b/doc/man-pages/pod1/fs_listquota.pod.in
-@@ -0,0 +1,124 @@
-+=head1 NAME
-+
-+fs_listquota - Displays quota information for a volume
-+
-+=head1 SYNOPSIS
-+
-+=for html
-+<div class="synopsis">
-+
-+B<fs listquota> S<<< [B<-path> <I<dir/file path>>+] >>> [B<-human>] [B<-help>]
-+
-+B<fs listq> S<<< [B<-p> <I<dir/file path>>+] >>> [B<-hu>] [B<-he>]
-+
-+B<fs lq> S<<< [B<-p> <I<dir/file path>>+] >>> [B<-hu>] [B<-he>]
-+
-+=for html
-+</div>
-+
-+=head1 DESCRIPTION
-+
-+The B<fs listquota> command displays information about the volume
-+containing each specified directory or file (its name, quota, and amount
-+of disk space used), along with an indicator of the percentage of space
-+used on the host partition.
-+
-+To display more information about the host partition, use the B<fs
-+examine> command.
-+
-+To set volume quota, use the B<fs setquota> or B<fs setvol> command.
-+
-+=head1 CAUTIONS
-+
-+=include fragments/volsize-caution.pod
-+
-+=head1 OPTIONS
-+
-+=over 4
-+
-+=item B<-path> <I<dir/file path>>+
-+
-+Names a file or directory that resides in the volume about which to
-+produce output. Partial pathnames are interpreted relative to the current
-+working directory, which is also the default value if this argument is
-+omitted.
-+
-+=item B<-human>
-+
-+Print space in a "human-readable" format. Instead of always printing space
-+in kilobytes, show disk space in kilobytes, megabytes, gigabytes,
-+terabytes, or petabytes, as appropriate.
-+
-+=item B<-help>
-+
-+Prints the online help for this command. All other valid options are
-+ignored.
-+
-+=back
-+
-+=head1 OUTPUT
-+
-+The output displays information about the volume that houses each
-+specified directory or file, in a tabular format that uses the following
-+headers:
-+
-+=over 4
-+
-+=item Volume Name
-+
-+The name of the volume.
-+
-+=item Quota
-+
-+The volume's quota in kilobytes, or the string C<no limit> to indicate an
-+unlimited quota.
-+
-+=item Used
-+
-+The amount of space used. If B<-human> is not specified, this value is in
-+kilobytes.
-+
-+=item % Used
-+
-+The percentage of the volume's quota that is used (the C<Used> statistic
-+divided by the C<Quota> statistic, times 100).
-+
-+=item Partition
-+
-+The percentage of space used on the partition that houses the
-+volume. Although not directly related to how much of the user's quota is
-+used, it is reported because a full partition can cause writing of data
-+back to the volume to fail even when the volume has not reached its quota.
-+
-+=back
-+
-+=head1 EXAMPLES
-+
-+The following example shows the output for the volume C<user.smith>:
-+
-+   % fs listquota -path /afs/abc.com/usr/smith
-+   Volume Name     Quota    Used    % Used   Partition
-+   user.smith      15000    5071       34%         86%
-+
-+=head1 PRIVILEGE REQUIRED
-+
-+The issuer must have the C<r> (read) permission on the ACL of the root
-+directory of the volume that houses the file or directory named by the
-+B<-path> argument, and C<l> (list) permission on the ACL of each
-+directory that precedes it in the pathname.
-+
-+=head1 SEE ALSO
-+
-+L<fs_diskfree(1)>,
-+L<fs_examine(1)>,
-+L<fs_quota(1)>,
-+L<fs_setquota(1)>,
-+L<fs_setvol(1)>
-+
-+=head1 COPYRIGHT
-+
-+IBM Corporation 2000. <http://www.ibm.com/> All Rights Reserved.
-+
-+This documentation is covered by the IBM Public License Version 1.0.  It was
-+converted from HTML to POD by software written by Chas Williams and Russ
-+Allbery, based on work by Alf Wachsmann and Elizabeth Cassell.
-diff --git a/doc/man-pages/pod1/fs_newcell.pod b/doc/man-pages/pod1/fs_newcell.pod
-index 2f5554e..3f31ba5 100644
---- a/doc/man-pages/pod1/fs_newcell.pod
-+++ b/doc/man-pages/pod1/fs_newcell.pod
-@@ -76,6 +76,42 @@ ignored.
- 
- =back
- 
-+=head1 WINDOWS
-+
-+The B<fs newcell> command on Windows differs from the Unix version in a few ways.
-+
-+B<fs newcell> with no arguments discards the existing cell information.
-+The Windows client will reload a cell's information the next time it
-+needs the server list for a cell.
-+
-+Secondly, in addition to accepting the Unix options, B<fs newcell> on
-+Windows accepts the following options:
-+
-+=over 4
-+
-+=item B<-dns>
-+
-+Adds the new cell to the cache manager, and obtains the VLDB server
-+information from DNS.
-+
-+=item B<-registry>
-+
-+Adds the new cell to the cache manager, and also saves the cell
-+configuration data in the registry for use the next time the service
-+restarts.
-+
-+=item B<-vlport> <I<cell VLDB server port>>
-+
-+Specifies an alternate port number at which the cell's volume location
-+database servers are listening.
-+
-+=item B<-fsport> <I<cell fileserver port>>
-+
-+Specifies an alternate port number at which the cell's file servers are
-+listening.
-+
-+=back
-+
- =head1 EXAMPLES
- 
- The following example changes the machine's kernel-resident list of
-diff --git a/doc/man-pages/pod1/fs_quota.pod b/doc/man-pages/pod1/fs_quota.pod
-deleted file mode 100644
-index d5c6afa..0000000
---- a/doc/man-pages/pod1/fs_quota.pod
-+++ /dev/null
-@@ -1,92 +0,0 @@
--=head1 NAME
--
--fs_quota - Displays the quota used in the volume containing a directory or file
--
--=head1 SYNOPSIS
--
--=for html
--<div class="synopsis">
--
--B<fs quota> S<<< [B<-path> <I<dir/file path>>+] >>> [B<-help>]
--
--B<fs q> S<<< [B<-p> <I<dir/file path>>+] >>> [B<-h>]
--
--=for html
--</div>
--
--=head1 DESCRIPTION
--
--The B<fs quota> command displays the percent of quota consumed in the
--volume that contains each specified directory or file.
--
--To display more detailed information about the volume and the partition it
--resides on, use the B<fs examine> and B<fs listquota> commands.
--
--To set volume quota, use the B<fs setquota> or B<fs setvol> command.
--
--=head1 CAUTIONS
--
--Currently, the maximum size of a volume is 2 terabytes (2^31 bytes).
--
--=head1 OPTIONS
--
--=over 4
--
--=item B<-path> <I<dir/file path>>
--
--Names each file or directory for which to display the quota consumed in
--its parent volume. Partial pathnames are interpreted relative to the
--current working directory, which is also the default value if this
--argument is omitted.
--
--=item B<-help>
--
--Prints the online help for this command. All other valid options are
--ignored.
--
--=back
--
--=head1 OUTPUT
--
--The output reports the percent of volume quota used, in the following
--format:
--
--   <percent>% of quota used.
--
--=head1 EXAMPLES
--
--The following command lists the percent quota used of the volume housing
--the current working directory:
--
--   % fs quota
--   17% of quota used.
--
--The following command lists the percent quota used of both the volume
--housing the current working directory's parent directory and the volume
--housing the directory F</afs/abc.com/usr/smith>:
--
--   % fs quota -path .. /afs/abc.com/usr/smith
--   43% of quota used.
--   92% of quota used.
--
--=head1 PRIVILEGE REQUIRED
--
--The issuer must have the C<r> (read) permission on the ACL of the root
--directory of the volume that houses the file or directory named by the
--B<-path> argument, and C<l> (list) permission on the ACL of each 
--directory that precedes it in the pathname.
--
--=head1 SEE ALSO
--
--L<fs_examine(1)>,
--L<fs_listquota(1)>,
--L<fs_setquota(1)>,
--L<fs_setvol(1)>
--
--=head1 COPYRIGHT
--
--IBM Corporation 2000. <http://www.ibm.com/> All Rights Reserved.
--
--This documentation is covered by the IBM Public License Version 1.0.  It was
--converted from HTML to POD by software written by Chas Williams and Russ
--Allbery, based on work by Alf Wachsmann and Elizabeth Cassell.
-diff --git a/doc/man-pages/pod1/fs_quota.pod.in b/doc/man-pages/pod1/fs_quota.pod.in
-new file mode 100644
-index 0000000..b11337b
---- /dev/null
-+++ b/doc/man-pages/pod1/fs_quota.pod.in
-@@ -0,0 +1,92 @@
-+=head1 NAME
-+
-+fs_quota - Displays the quota used in the volume containing a directory or file
-+
-+=head1 SYNOPSIS
-+
-+=for html
-+<div class="synopsis">
-+
-+B<fs quota> S<<< [B<-path> <I<dir/file path>>+] >>> [B<-help>]
-+
-+B<fs q> S<<< [B<-p> <I<dir/file path>>+] >>> [B<-h>]
-+
-+=for html
-+</div>
-+
-+=head1 DESCRIPTION
-+
-+The B<fs quota> command displays the percent of quota consumed in the
-+volume that contains each specified directory or file.
-+
-+To display more detailed information about the volume and the partition it
-+resides on, use the B<fs examine> and B<fs listquota> commands.
-+
-+To set volume quota, use the B<fs setquota> or B<fs setvol> command.
-+
-+=head1 CAUTIONS
-+
-+=include fragments/volsize-caution.pod
-+
-+=head1 OPTIONS
-+
-+=over 4
-+
-+=item B<-path> <I<dir/file path>>
-+
-+Names each file or directory for which to display the quota consumed in
-+its parent volume. Partial pathnames are interpreted relative to the
-+current working directory, which is also the default value if this
-+argument is omitted.
-+
-+=item B<-help>
-+
-+Prints the online help for this command. All other valid options are
-+ignored.
-+
-+=back
-+
-+=head1 OUTPUT
-+
-+The output reports the percent of volume quota used, in the following
-+format:
-+
-+   <percent>% of quota used.
-+
-+=head1 EXAMPLES
-+
-+The following command lists the percent quota used of the volume housing
-+the current working directory:
-+
-+   % fs quota
-+   17% of quota used.
-+
-+The following command lists the percent quota used of both the volume
-+housing the current working directory's parent directory and the volume
-+housing the directory F</afs/abc.com/usr/smith>:
-+
-+   % fs quota -path .. /afs/abc.com/usr/smith
-+   43% of quota used.
-+   92% of quota used.
-+
-+=head1 PRIVILEGE REQUIRED
-+
-+The issuer must have the C<r> (read) permission on the ACL of the root
-+directory of the volume that houses the file or directory named by the
-+B<-path> argument, and C<l> (list) permission on the ACL of each
-+directory that precedes it in the pathname.
-+
-+=head1 SEE ALSO
-+
-+L<fs_examine(1)>,
-+L<fs_listquota(1)>,
-+L<fs_setquota(1)>,
-+L<fs_setvol(1)>
-+
-+=head1 COPYRIGHT
-+
-+IBM Corporation 2000. <http://www.ibm.com/> All Rights Reserved.
-+
-+This documentation is covered by the IBM Public License Version 1.0.  It was
-+converted from HTML to POD by software written by Chas Williams and Russ
-+Allbery, based on work by Alf Wachsmann and Elizabeth Cassell.
-diff --git a/doc/man-pages/pod1/fs_setquota.pod b/doc/man-pages/pod1/fs_setquota.pod
-deleted file mode 100644
-index e79deee..0000000
---- a/doc/man-pages/pod1/fs_setquota.pod
-+++ /dev/null
-@@ -1,99 +0,0 @@
--=head1 NAME
--
--fs_setquota - Sets the quota for the volume containing a file or directory
--
--=head1 SYNOPSIS
--
--=for html
--<div class="synopsis">
--
--B<fs setquota> S<<< [B<-path> <I<dir/file path>>] >>>
--    S<<< B<-max> <I<max quota in kbytes>> >>> [B<-help>]
--
--B<fs setq> S<<< [B<-p> <I<dir/file path>>] >>> S<<< B<-m> <I<max quota>> >>> [B<-h>]
--
--B<fs sq> S<<< [B<-p> <I<dir/file path>>] >>> S<<< B<-m> <I<max quota>> >>> [B<-h>]
--
--=for html
--</div>
--
--=head1 DESCRIPTION
--
--The B<fs setquota> command sets the quota (maximum possible size) of the
--read/write volume that contains the directory or file named by the
--B<-path> argument.
--
--To set the quota on multiple volumes at the same time, use the B<fs
--setvol> command.
--
--To display a volume's quota, use the B<fs examine>, B<fs listquota>, or
--B<fs quota> command.
--
--=head1 CAUTIONS
--
--Currently, the maximum size of a volume is 2 terabytes (2^31 bytes).
--
--=head1 OPTIONS
--
--=over 4
--
--=item B<-path> <I<dir/file path>>
--
--Names the directory or file for which to set the host volume's
--quota. Partial pathnames are interpreted relative to the current working
--directory, which is also the default value if this argument is omitted.
--
--Specify the read/write path to the file or directory, to avoid the failure
--that results from attempting to change a read-only volume. By convention,
--the read/write path is indicated by placing a period before the cell name
--at the pathname's second level (for example, F</afs/.abc.com>). For
--further discussion of the concept of read/write and read-only paths
--through the filespace, see the B<fs mkmount> reference page.
--
--=item B<-max> <I<max quota>>
--
--Sets the maximum amount of file server disk space the volume can occupy.
--The quota value should be a positive integer followed by an optional
--suffix: C<K> for kibibytes (1024 bytes, the default), C<M> for mebibytes
--(1024 kibibytes), C<G> for gibibytes (1024 mebibytes), and C<T> for
--tebibytes (1024 gibibytes).  A value of C<0> sets an unlimited quota, but
--the size of the disk partition that houses the volume places an absolute
--limit on the volume's size.
--
--If the B<-path> argument is omitted (to set the quota of the volume
--housing the current working directory), the B<-max> switch must be
--included with this argument.
--
--=item B<-help>
--
--Prints the online help for this command. All other valid options are
--ignored.
--
--=back
--
--=head1 EXAMPLES
--
--The following command imposes a maximum quota of 3000 kilobytes on the
--volume that houses the F</afs/abc.com/usr/smith> directory:
--
--   % fs setquota -path /afs/abc.com/usr/smith -max 3000
--
--=head1 PRIVILEGE REQUIRED
--
--The issuer must belong to the system:administrators group.
--
--=head1 SEE ALSO
--
--L<fs_examine(1)>,
--L<fs_listquota(1)>,
--L<fs_quota(1)>,
--L<fs_mkmount(1)>,
--L<fs_setvol(1)>
--
--=head1 COPYRIGHT
--
--IBM Corporation 2000. <http://www.ibm.com/> All Rights Reserved.
--
--This documentation is covered by the IBM Public License Version 1.0.  It was
--converted from HTML to POD by software written by Chas Williams and Russ
--Allbery, based on work by Alf Wachsmann and Elizabeth Cassell.
-diff --git a/doc/man-pages/pod1/fs_setquota.pod.in b/doc/man-pages/pod1/fs_setquota.pod.in
-new file mode 100644
-index 0000000..bffd992
---- /dev/null
-+++ b/doc/man-pages/pod1/fs_setquota.pod.in
-@@ -0,0 +1,99 @@
-+=head1 NAME
-+
-+fs_setquota - Sets the quota for the volume containing a file or directory
-+
-+=head1 SYNOPSIS
-+
-+=for html
-+<div class="synopsis">
-+
-+B<fs setquota> S<<< [B<-path> <I<dir/file path>>] >>>
-+    S<<< B<-max> <I<max quota in kbytes>> >>> [B<-help>]
-+
-+B<fs setq> S<<< [B<-p> <I<dir/file path>>] >>> S<<< B<-m> <I<max quota>> >>> [B<-h>]
-+
-+B<fs sq> S<<< [B<-p> <I<dir/file path>>] >>> S<<< B<-m> <I<max quota>> >>> [B<-h>]
-+
-+=for html
-+</div>
-+
-+=head1 DESCRIPTION
-+
-+The B<fs setquota> command sets the quota (maximum possible size) of the
-+read/write volume that contains the directory or file named by the
-+B<-path> argument.
-+
-+To set the quota on multiple volumes at the same time, use the B<fs
-+setvol> command.
-+
-+To display a volume's quota, use the B<fs examine>, B<fs listquota>, or
-+B<fs quota> command.
-+
-+=head1 CAUTIONS
-+
-+=include fragments/volsize-caution.pod
-+
-+=head1 OPTIONS
-+
-+=over 4
-+
-+=item B<-path> <I<dir/file path>>
-+
-+Names the directory or file for which to set the host volume's
-+quota. Partial pathnames are interpreted relative to the current working
-+directory, which is also the default value if this argument is omitted.
-+
-+Specify the read/write path to the file or directory, to avoid the failure
-+that results from attempting to change a read-only volume. By convention,
-+the read/write path is indicated by placing a period before the cell name
-+at the pathname's second level (for example, F</afs/.abc.com>). For
-+further discussion of the concept of read/write and read-only paths
-+through the filespace, see the B<fs mkmount> reference page.
-+
-+=item B<-max> <I<max quota>>
-+
-+Sets the maximum amount of file server disk space the volume can occupy.
-+The quota value should be a positive integer followed by an optional
-+suffix: C<K> for kibibytes (1024 bytes, the default), C<M> for mebibytes
-+(1024 kibibytes), C<G> for gibibytes (1024 mebibytes), and C<T> for
-+tebibytes (1024 gibibytes).  A value of C<0> sets an unlimited quota, but
-+the size of the disk partition that houses the volume places an absolute
-+limit on the volume's size.
-+
-+If the B<-path> argument is omitted (to set the quota of the volume
-+housing the current working directory), the B<-max> switch must be
-+included with this argument.
-+
-+=item B<-help>
-+
-+Prints the online help for this command. All other valid options are
-+ignored.
-+
-+=back
-+
-+=head1 EXAMPLES
-+
-+The following command imposes a maximum quota of 3000 kilobytes on the
-+volume that houses the F</afs/abc.com/usr/smith> directory:
-+
-+   % fs setquota -path /afs/abc.com/usr/smith -max 3000
-+
-+=head1 PRIVILEGE REQUIRED
-+
-+The issuer must belong to the system:administrators group.
-+
-+=head1 SEE ALSO
-+
-+L<fs_examine(1)>,
-+L<fs_listquota(1)>,
-+L<fs_quota(1)>,
-+L<fs_mkmount(1)>,
-+L<fs_setvol(1)>
-+
-+=head1 COPYRIGHT
-+
-+IBM Corporation 2000. <http://www.ibm.com/> All Rights Reserved.
-+
-+This documentation is covered by the IBM Public License Version 1.0.  It was
-+converted from HTML to POD by software written by Chas Williams and Russ
-+Allbery, based on work by Alf Wachsmann and Elizabeth Cassell.
-diff --git a/doc/man-pages/pod1/fs_setvol.pod b/doc/man-pages/pod1/fs_setvol.pod
-deleted file mode 100644
-index f09afbd..0000000
---- a/doc/man-pages/pod1/fs_setvol.pod
-+++ /dev/null
-@@ -1,113 +0,0 @@
--=head1 NAME
--
--fs_setvol - Set quota and messages for a volume containing a file or directory
--
--=head1 SYNOPSIS
--
--=for html
--<div class="synopsis">
--
--B<fs setvol> S<<< [B<-path> <I<dir/file path>>+] >>>
--    S<<< [B<-max> <I<disk space quota in 1K units>>] >>>
--    S<<< [B<-offlinemsg> <I<offline message>>] >>> [B<-help>]
--
--B<fs setv> S<<< [B<-p> <I<dir/file path>>+] >>>
--    S<<< [B<-ma> <I<disk space quota in 1K units>>] >>>
--    S<<< [B<-o> <I<offline message>>] >>> [B<-h>]
--
--B<fs sv> S<<< [B<-p> <I<dir/file path>>+] >>>
--    S<<< [B<-ma> <I<disk space quota in 1K units>>] >>>
--    S<<< [B<-o> <I<offline message>>] >>> [B<-h>]
--
--=for html
--</div>
--
--=head1 DESCRIPTION
--
--The B<fs setvol> command sets the quota (maximum possible size) of the
--read/write volume that contains each directory or file named by the
--B<-path> argument. To associate a message with the volume which then
--appears in the output of the B<fs examine> command, include the
--B<-offlinemsg> argument.
--
--To display all of the settings made with this command, use the B<fs
--examine> command. The B<fs listquota> command reports a fileset's quota,
--and the B<fs quota> command the percent of quota used.
--
--To set quota on one volume at a time, use the B<fs setquota> command.
--
--=head1 CAUTIONS
--
--Currently, the maximum size of a volume is 2 terabytes (2^31 bytes).
--
--=head1 OPTIONS
--
--=over 4
--
--=item B<-path> <I<dir/file path>>+
--
--Names each file or directory for which to set the host volume's quota and
--offline message. Partial pathnames are interpreted relative to the current
--working directory, which is also the default value if this argument is
--omitted.
--
--Specify the read/write path to the file or directory, to avoid the failure
--that results from attempting to change a read-only volume. By convention,
--the read/write path is indicated by placing a period before the cell name
--at the pathname's second level (for example, F</afs/.abc.com>). For
--further discussion of the concept of read/write and read-only paths
--through the filespace, see the B<fs mkmount> reference page.
--
--=item B<-max> <I<disk space quota in 1K units>>
--
--Sets the maximum amount of file server disk space the volume can
--occupy. Provide a positive integer to indicate the number of one-kilobyte
--blocks (C<1024> is one megabyte). A value of C<0> sets an unlimited quota,
--but the size of the disk partition that houses the volume places an
--absolute limit on the volume's size.
--
--If the B<-path> argument is omitted (so that the command sets the quota of
--the volume housing the current working directory), the B<-max> switch must
--be provided.
--
--=item B<-offlinemsg>
--
--Associates a message with the volume which then appears in the output of
--the B<fs examine> command. Its intended use is to explain why the volume
--is currently offline.
--
--=item B<-help>
--
--Prints the online help for this command. All other valid options are
--ignored.
--
--=back
--
--=head1 EXAMPLES
--
--The following command imposes a 6500 kilobyte quota on the volumes mounted
--at the home directories F</afs/abc.com/usr/smith> and
--F</afs/abc.com/usr/pat>:
--
--   % cd /afs/abc.com/usr
--   % fs setvol -path smith pat -max 6500B<>
--
--=head1 PRIVILEGE REQUIRED
--
--The issuer must belong to the system:administrators group.
--
--=head1 SEE ALSO
--
--L<fs_examine(1)>,
--L<fs_listquota(1)>,
--L<fs_mkmount(1)>,
--L<fs_quota(1)>,
--L<fs_setquota(1)>
--
--=head1 COPYRIGHT
--
--IBM Corporation 2000. <http://www.ibm.com/> All Rights Reserved.
--
--This documentation is covered by the IBM Public License Version 1.0.  It was
--converted from HTML to POD by software written by Chas Williams and Russ
--Allbery, based on work by Alf Wachsmann and Elizabeth Cassell.
-diff --git a/doc/man-pages/pod1/fs_setvol.pod.in b/doc/man-pages/pod1/fs_setvol.pod.in
-new file mode 100644
-index 0000000..7ebcc31
---- /dev/null
-+++ b/doc/man-pages/pod1/fs_setvol.pod.in
-@@ -0,0 +1,113 @@
-+=head1 NAME
-+
-+fs_setvol - Set quota and messages for a volume containing a file or directory
-+
-+=head1 SYNOPSIS
-+
-+=for html
-+<div class="synopsis">
-+
-+B<fs setvol> S<<< [B<-path> <I<dir/file path>>+] >>>
-+    S<<< [B<-max> <I<disk space quota in 1K units>>] >>>
-+    S<<< [B<-offlinemsg> <I<offline message>>] >>> [B<-help>]
-+
-+B<fs setv> S<<< [B<-p> <I<dir/file path>>+] >>>
-+    S<<< [B<-ma> <I<disk space quota in 1K units>>] >>>
-+    S<<< [B<-o> <I<offline message>>] >>> [B<-h>]
-+
-+B<fs sv> S<<< [B<-p> <I<dir/file path>>+] >>>
-+    S<<< [B<-ma> <I<disk space quota in 1K units>>] >>>
-+    S<<< [B<-o> <I<offline message>>] >>> [B<-h>]
-+
-+=for html
-+</div>
-+
-+=head1 DESCRIPTION
-+
-+The B<fs setvol> command sets the quota (maximum possible size) of the
-+read/write volume that contains each directory or file named by the
-+B<-path> argument. To associate a message with the volume which then
-+appears in the output of the B<fs examine> command, include the
-+B<-offlinemsg> argument.
-+
-+To display all of the settings made with this command, use the B<fs
-+examine> command. The B<fs listquota> command reports a fileset's quota,
-+and the B<fs quota> command the percent of quota used.
-+
-+To set quota on one volume at a time, use the B<fs setquota> command.
-+
-+=head1 CAUTIONS
-+
-+=include fragments/volsize-caution.pod
-+
-+=head1 OPTIONS
-+
-+=over 4
-+
-+=item B<-path> <I<dir/file path>>+
-+
-+Names each file or directory for which to set the host volume's quota and
-+offline message. Partial pathnames are interpreted relative to the current
-+working directory, which is also the default value if this argument is
-+omitted.
-+
-+Specify the read/write path to the file or directory, to avoid the failure
-+that results from attempting to change a read-only volume. By convention,
-+the read/write path is indicated by placing a period before the cell name
-+at the pathname's second level (for example, F</afs/.abc.com>). For
-+further discussion of the concept of read/write and read-only paths
-+through the filespace, see the B<fs mkmount> reference page.
-+
-+=item B<-max> <I<disk space quota in 1K units>>
-+
-+Sets the maximum amount of file server disk space the volume can
-+occupy. Provide a positive integer to indicate the number of one-kilobyte
-+blocks (C<1024> is one megabyte). A value of C<0> sets an unlimited quota,
-+but the size of the disk partition that houses the volume places an
-+absolute limit on the volume's size.
-+
-+If the B<-path> argument is omitted (so that the command sets the quota of
-+the volume housing the current working directory), the B<-max> switch must
-+be provided.
-+
-+=item B<-offlinemsg>
-+
-+Associates a message with the volume which then appears in the output of
-+the B<fs examine> command. Its intended use is to explain why the volume
-+is currently offline.
-+
-+=item B<-help>
-+
-+Prints the online help for this command. All other valid options are
-+ignored.
-+
-+=back
-+
-+=head1 EXAMPLES
-+
-+The following command imposes a 6500 kilobyte quota on the volumes mounted
-+at the home directories F</afs/abc.com/usr/smith> and
-+F</afs/abc.com/usr/pat>:
-+
-+   % cd /afs/abc.com/usr
-+   % fs setvol -path smith pat -max 6500B<>
-+
-+=head1 PRIVILEGE REQUIRED
-+
-+The issuer must belong to the system:administrators group.
-+
-+=head1 SEE ALSO
-+
-+L<fs_examine(1)>,
-+L<fs_listquota(1)>,
-+L<fs_mkmount(1)>,
-+L<fs_quota(1)>,
-+L<fs_setquota(1)>
-+
-+=head1 COPYRIGHT
-+
-+IBM Corporation 2000. <http://www.ibm.com/> All Rights Reserved.
-+
-+This documentation is covered by the IBM Public License Version 1.0.  It was
-+converted from HTML to POD by software written by Chas Williams and Russ
-+Allbery, based on work by Alf Wachsmann and Elizabeth Cassell.
-diff --git a/doc/man-pages/pod1/vos.pod b/doc/man-pages/pod1/vos.pod
-deleted file mode 100644
-index fb100c5..0000000
---- a/doc/man-pages/pod1/vos.pod
-+++ /dev/null
-@@ -1,321 +0,0 @@
--=head1 NAME
--
--vos - Introduction to the vos command suite
--
--=head1 DESCRIPTION
--
--The commands in the B<vos> command suite are the administrative interface
--to the Volume Server and Volume Location (VL) Server. System
--administrators use B<vos> commands to create, move, delete, replicate,
--back up and examine volumes, among other operations. The VL Server
--automatically records in the Volume Location Database (VLDB) changes in
--volume status and location that result from B<vos> commands.
--
--The operations invoked by most B<vos> commands are idempotent, meaning
--that if an operation is interrupted by a network, server machine, or
--process outage, then a subsequent attempt at the same operation continues
--from the interruption point, rather than starting over at the beginning of
--the operation. Before executing a command, the Volume and VL Servers check
--the current state of the volumes and VLDB records to be altered by the
--command. If they are already in the desired end state (or a consistent
--intermediate state), there is no need to repeat the internal steps that
--brought them there. Idempotency does not apply if the command issuer
--explicitly interrupts the operation with the Ctrl-C command or another
--interrupt signal. In that case, the volume is left locked and the
--administrator must use the L<B<vos unlock>|vos_unlock(1)> command to
--unlock it before proceeding.
--
--It is important that the VLDB accurately indicate the status of the
--volumes on file server machines at all times. L<vldb.DB0(5)> and
--L<afs_volume_header(5)> describe the information recorded in the VLDB and
--volume headers, respectively. If a B<vos> command changes volume status,
--it automatically records the change in the corresponding VLDB entry. The
--most common cause of discrepancies between the VLDB and volume status on
--file server machines is interrupted operations; to restore consistency,
--use the L<B<vos syncserv>|vos_syncserv(1)> and
--L<B<vos syncvldb>|vos_syncvldb(1)> commands.
--
--There are several categories of commands in the vos command suite:
--
--=over 4
--
--=item *
--
--Commands to create, move, and rename volumes:
--L<B<vos backup>|vos_backup(1)>,
--L<B<vos backupsys>|vos_backupsys(1)>,
--L<B<vos changeloc>|vos_changeloc(1)>,
--L<B<vos create>|vos_create(1)>,
--L<B<vos move>|vos_move(1)>,
--and L<B<vos rename>|vos_rename(1)>.
--
--=item *
--
--Commands to remove VLDB volume records or volumes or both:
--L<B<vos delentry>|vos_delentry(1)>,
--L<B<vos remove>|vos_remove(1)>,
--and L<B<vos zap>|vos_zap(1)>.
--
--=item *
--
--Commands to edit or display VLDB server entries:
--L<B<vos changeaddr>|vos_changeaddr(1)>,
--L<B<vos listaddrs>|vos_listaddrs(1)>
--and L<B<vos setaddrs>|vos_setaddrs(1)>.
--
--=item *
--
--Commands to create, size, and restore dump files:
--L<B<vos dump>|vos_dump(1)>,
--L<B<vos restore>|vos_restore(1)>,
--and L<B<vos size>|vos_size(1)>.
--
--=item *
--
--Commands to administer replicated volumes:
--L<B<vos addsite>|vos_addsite(1)>,
--L<B<vos release>|vos_release(1)>,
--and L<B<vos remsite>|vos_remsite(1)>.
--
--=item *
--
--Commands to display VLDB records, volume headers, or both:
--L<B<vos examine>|vos_examine(1)>,
--L<B<vos listvldb>|vos_listvldb(1)>,
--and L<B<vos listvol>|vos_listvol(1)>.
--
--=item *
--
--Commands to display information about partitions that house volumes:
--L<B<vos listpart>|vos_listpart(1)>
--and L<B<vos partinfo>|vos_partinfo(1)>.
--
--=item *
--
--Commands to restore consistency between the VLDB and volume headers:
--L<B<vos syncserv>|vos_syncserv(1)>
--and L<B<vos syncvldb>|vos_syncvldb(1)>.
--
--=item *
--
--Commands to lock and unlock VLDB entries:
--L<B<vos lock>|vos_lock(1)>,
--L<B<vos unlock>|vos_unlock(1)>,
--and L<B<vos unlockvldb>|vos_unlockvldb(1)>.
--
--=item *
--
--A command to report Volume Server status:
--L<B<vos status>|vos_status(1)>.
--
--=item *
--
--A command to end Volume Server transactions:
--L<B<vos endtrans>|vos_endtrans(1)>.
--
--=item *
--
--A command to change volume fields:
--L<B<vos setfields>|vos_setfields(1)>.
--
--=item *
--
--Commands to obtain help:
--L<B<vos apropos>|vos_apropos(1)>
--and L<B<vos help>|vos_help(1)>.
--
--=back
--
--=head1 CAUTIONS
--
--Currently, the maximum size of a volume is 2 terabytes (2^31 bytes).
--
--=head1 OPTIONS
--
--The following arguments and flags are available on many commands in the
--B<bos> suite. The reference page for each command also lists them, but
--they are described here in greater detail.
--
--=over 4
--
--=item B<-cell> <I<cell name>>
--
--Names the cell in which to run the command. It is acceptable to abbreviate
--the cell name to the shortest form that distinguishes it from the other
--entries in the F</usr/vice/etc/CellServDB> file on the local machine. If
--the B<-cell> argument is omitted, the command interpreter determines the
--name of the local cell by reading the following in order:
--
--=over 4
--
--=item *
--
--The value of the AFSCELL environment variable.
--
--=item *
--
--The local F</usr/vice/etc/ThisCell> file.
--
--=back
--
--Do not combine the B<-cell> and B<-localauth> options. A command on which
--the B<-localauth> flag is included always runs in the local cell (as
--defined in the server machine's local F</usr/afs/etc/ThisCell> file),
--whereas a command on which the B<-cell> argument is included runs in the
--specified foreign cell.
--
--=item B<-help>
--
--Prints a command's online help message on the standard output stream. Do
--not combine this flag with any of the command's other options; when it is
--provided, the command interpreter ignores all other options, and only
--prints the help message.
--
--=item B<-localauth>
--
--Constructs a server ticket using the server encryption key with the
--highest key version number in the local F</usr/afs/etc/KeyFile> file. The
--B<vos> command interpreter presents the ticket, which never expires, to
--the Volume Server and VL Server during mutual authentication.
--
--Use this flag only when issuing a command on a server machine; client
--machines do not usually have a F</usr/afs/etc/KeyFile> file.  The issuer
--of a command that includes this flag must be logged on to the server
--machine as the local superuser C<root>. The flag is useful for commands
--invoked by an unattended application program, such as a process controlled
--by the UNIX B<cron> utility or by a cron entry in the machine's
--F</usr/afs/local/BosConfig> file. It is also useful if an administrator is
--unable to authenticate to AFS but is logged in as the local superuser
--B<root>.
--
--Do not combine the B<-cell> and B<-localauth> options. A command on which
--the B<-localauth> flag is included always runs in the local cell (as
--defined in the server machine's local F</usr/afs/etc/ThisCell> file),
--whereas a command on which the B<-cell> argument is included runs in the
--specified foreign cell. Also, do not combine the B<-localauth> and
--B<-noauth> flags.
--
--=item B<-noauth>
--
--Establishes an unauthenticated connection to the Volume Server and VL
--Server, in which the servers treat the issuer as the unprivileged user
--C<anonymous>. It is useful only when authorization checking is disabled on
--the server machine (during the installation of a file server machine or
--when the L<B<bos setauth>|bos_setauth(8)> command has been used during
--other unusual circumstances). In normal circumstances, the servers allow
--only privileged users to issue commands that change the status of a volume
--or VLDB record, and refuses to perform such an action even if the
--B<-noauth> flag is provided. Do not combine the B<-noauth> and
--B<-localauth> flags.
--
--=item B<-partition> <I<partition name>>
--
--Identifies the AFS server partition on a file server machine that houses,
--or is to house, the volumes of interest, or about which to list
--information. The B<vos> command interpreter accepts any of the following
--four name formats:
--
--   /vicepa     =     vicepa      =      a      =      0
--   /vicepb     =     vicepb      =      b      =      1
--
--After /vicepz (for which the index is 25) comes
--
--   /vicepaa    =     vicepaa     =      aa     =      26
--   /vicepab    =     vicepab     =      ab     =      27
--
--and so on through
--
--   /vicepiv    =     vicepiv     =      iv     =      255
--
--The B<-frompartition> and B<-topartition> arguments to the
--L<B<vos move>|vos_move(1)> command also accept this notation.
--
--=item B<-server> <I<machine name>>
--
--Identifies the file server machine that houses, or is to house, the
--volumes or AFS server partitions of interest. Provide the machine's IP
--address in dotted decimal format, its fully qualified host name (for
--example, C<fs1.abc.com>), or the shortest abbreviated form of its host
--name that distinguishes it from other machines. Successful use of an
--abbreviated form depends on the availability of a name resolution service
--(such as the Domain Name Service or a local host table) at the time the
--command is issued.
--
--The B<-fromserver> and B<-toserver> arguments to the
--L<B<vos move>|vos_move(1)> command also accept these name formats.
--
--=item B<-noresolve>
--
--Shows all servers as IP addresses instead of the DNS name. This is very
--useful when the server address is registered as 127.0.0.1 or when dealing
--with multi-homed servers. The B<-noresolve> option is available in OpenAFS
--versions 1.4.8 or later and 1.5.35 or later.
--
--=item B<-verbose>
--
--Produces on the standard output stream a detailed trace of the command's
--execution. If this argument is omitted, only warnings and error messages
--appear.
--
--=back
--
--=head1 PRIVILEGE REQUIRED
--
--To issue most vos commands, the issuer must be listed in the
--F</usr/afs/etc/UserList> file on each server machine that houses or is to
--house an affected volume, and on each database server machine. The most
--predictable performance results if all database server and file server
--machines in the cell share a common F<UserList> file.  Alternatively, if
--the B<-localauth> flag is included, the issuer must be logged on to a
--server machine as the local superuser C<root>.
--
--To issue a vos command that only displays information, no privilege is
--required.
--
--=head1 SEE ALSO
--
--L<vos_addsite(1)>,
--L<vos_apropos(1)>,
--L<vos_backup(1)>,
--L<vos_backupsys(1)>,
--L<vos_changeaddr(1)>,
--L<vos_convertROtoRW(1)>,
--L<vos_clone(1)>,
--L<vos_copy(1)>,
--L<vos_create(1)>,
--L<vos_delentry(1)>,
--L<vos_dump(1)>,
--L<vos_endtrans(1)>,
--L<vos_examine(1)>,
--L<vos_help(1)>,
--L<vos_listaddrs(1)>,
--L<vos_listpart(1)>,
--L<vos_listvldb(1)>,
--L<vos_listvol(1)>,
--L<vos_lock(1)>,
--L<vos_move(1)>,
--L<vos_partinfo(1)>,
--L<vos_release(1)>,
--L<vos_remove(1)>,
--L<vos_remsite(1)>,
--L<vos_rename(1)>,
--L<vos_restore(1)>,
--L<vos_setfields(1)>,
--L<vos_shadow(1)>,
--L<vos_size(1)>,
--L<vos_status(1)>,
--L<vos_syncserv(1)>,
--L<vos_syncvldb(1)>,
--L<vos_unlock(1)>,
--L<vos_unlockvldb(1)>,
--L<vos_zap(1)>,
--L<CellServDB(5)>,
--L<UserList(5)>
--
--=head1 COPYRIGHT
--
--IBM Corporation 2000. <http://www.ibm.com/> All Rights Reserved.
--
--This documentation is covered by the IBM Public License Version 1.0.  It was
--converted from HTML to POD by software written by Chas Williams and Russ
--Allbery, based on work by Alf Wachsmann and Elizabeth Cassell.
-diff --git a/doc/man-pages/pod1/vos.pod.in b/doc/man-pages/pod1/vos.pod.in
-new file mode 100644
-index 0000000..101a5ed
---- /dev/null
-+++ b/doc/man-pages/pod1/vos.pod.in
-@@ -0,0 +1,321 @@
-+=head1 NAME
-+
-+vos - Introduction to the vos command suite
-+
-+=head1 DESCRIPTION
-+
-+The commands in the B<vos> command suite are the administrative interface
-+to the Volume Server and Volume Location (VL) Server. System
-+administrators use B<vos> commands to create, move, delete, replicate,
-+back up and examine volumes, among other operations. The VL Server
-+automatically records in the Volume Location Database (VLDB) changes in
-+volume status and location that result from B<vos> commands.
-+
-+The operations invoked by most B<vos> commands are idempotent, meaning
-+that if an operation is interrupted by a network, server machine, or
-+process outage, then a subsequent attempt at the same operation continues
-+from the interruption point, rather than starting over at the beginning of
-+the operation. Before executing a command, the Volume and VL Servers check
-+the current state of the volumes and VLDB records to be altered by the
-+command. If they are already in the desired end state (or a consistent
-+intermediate state), there is no need to repeat the internal steps that
-+brought them there. Idempotency does not apply if the command issuer
-+explicitly interrupts the operation with the Ctrl-C command or another
-+interrupt signal. In that case, the volume is left locked and the
-+administrator must use the L<B<vos unlock>|vos_unlock(1)> command to
-+unlock it before proceeding.
-+
-+It is important that the VLDB accurately indicate the status of the
-+volumes on file server machines at all times. L<vldb.DB0(5)> and
-+L<afs_volume_header(5)> describe the information recorded in the VLDB and
-+volume headers, respectively. If a B<vos> command changes volume status,
-+it automatically records the change in the corresponding VLDB entry. The
-+most common cause of discrepancies between the VLDB and volume status on
-+file server machines is interrupted operations; to restore consistency,
-+use the L<B<vos syncserv>|vos_syncserv(1)> and
-+L<B<vos syncvldb>|vos_syncvldb(1)> commands.
-+
-+There are several categories of commands in the vos command suite:
-+
-+=over 4
-+
-+=item *
-+
-+Commands to create, move, and rename volumes:
-+L<B<vos backup>|vos_backup(1)>,
-+L<B<vos backupsys>|vos_backupsys(1)>,
-+L<B<vos changeloc>|vos_changeloc(1)>,
-+L<B<vos create>|vos_create(1)>,
-+L<B<vos move>|vos_move(1)>,
-+and L<B<vos rename>|vos_rename(1)>.
-+
-+=item *
-+
-+Commands to remove VLDB volume records or volumes or both:
-+L<B<vos delentry>|vos_delentry(1)>,
-+L<B<vos remove>|vos_remove(1)>,
-+and L<B<vos zap>|vos_zap(1)>.
-+
-+=item *
-+
-+Commands to edit or display VLDB server entries:
-+L<B<vos changeaddr>|vos_changeaddr(1)>,
-+L<B<vos listaddrs>|vos_listaddrs(1)>
-+and L<B<vos setaddrs>|vos_setaddrs(1)>.
-+
-+=item *
-+
-+Commands to create, size, and restore dump files:
-+L<B<vos dump>|vos_dump(1)>,
-+L<B<vos restore>|vos_restore(1)>,
-+and L<B<vos size>|vos_size(1)>.
-+
-+=item *
-+
-+Commands to administer replicated volumes:
-+L<B<vos addsite>|vos_addsite(1)>,
-+L<B<vos release>|vos_release(1)>,
-+and L<B<vos remsite>|vos_remsite(1)>.
-+
-+=item *
-+
-+Commands to display VLDB records, volume headers, or both:
-+L<B<vos examine>|vos_examine(1)>,
-+L<B<vos listvldb>|vos_listvldb(1)>,
-+and L<B<vos listvol>|vos_listvol(1)>.
-+
-+=item *
-+
-+Commands to display information about partitions that house volumes:
-+L<B<vos listpart>|vos_listpart(1)>
-+and L<B<vos partinfo>|vos_partinfo(1)>.
-+
-+=item *
-+
-+Commands to restore consistency between the VLDB and volume headers:
-+L<B<vos syncserv>|vos_syncserv(1)>
-+and L<B<vos syncvldb>|vos_syncvldb(1)>.
-+
-+=item *
-+
-+Commands to lock and unlock VLDB entries:
-+L<B<vos lock>|vos_lock(1)>,
-+L<B<vos unlock>|vos_unlock(1)>,
-+and L<B<vos unlockvldb>|vos_unlockvldb(1)>.
-+
-+=item *
-+
-+A command to report Volume Server status:
-+L<B<vos status>|vos_status(1)>.
-+
-+=item *
-+
-+A command to end Volume Server transactions:
-+L<B<vos endtrans>|vos_endtrans(1)>.
-+
-+=item *
-+
-+A command to change volume fields:
-+L<B<vos setfields>|vos_setfields(1)>.
-+
-+=item *
-+
-+Commands to obtain help:
-+L<B<vos apropos>|vos_apropos(1)>
-+and L<B<vos help>|vos_help(1)>.
-+
-+=back
-+
-+=head1 CAUTIONS
-+
-+=include fragments/volsize-caution.pod
-+
-+=head1 OPTIONS
-+
-+The following arguments and flags are available on many commands in the
-+B<bos> suite. The reference page for each command also lists them, but
-+they are described here in greater detail.
-+
-+=over 4
-+
-+=item B<-cell> <I<cell name>>
-+
-+Names the cell in which to run the command. It is acceptable to abbreviate
-+the cell name to the shortest form that distinguishes it from the other
-+entries in the F</usr/vice/etc/CellServDB> file on the local machine. If
-+the B<-cell> argument is omitted, the command interpreter determines the
-+name of the local cell by reading the following in order:
-+
-+=over 4
-+
-+=item *
-+
-+The value of the AFSCELL environment variable.
-+
-+=item *
-+
-+The local F</usr/vice/etc/ThisCell> file.
-+
-+=back
-+
-+Do not combine the B<-cell> and B<-localauth> options. A command on which
-+the B<-localauth> flag is included always runs in the local cell (as
-+defined in the server machine's local F</usr/afs/etc/ThisCell> file),
-+whereas a command on which the B<-cell> argument is included runs in the
-+specified foreign cell.
-+
-+=item B<-help>
-+
-+Prints a command's online help message on the standard output stream. Do
-+not combine this flag with any of the command's other options; when it is
-+provided, the command interpreter ignores all other options, and only
-+prints the help message.
-+
-+=item B<-localauth>
-+
-+Constructs a server ticket using the server encryption key with the
-+highest key version number in the local F</usr/afs/etc/KeyFile> file. The
-+B<vos> command interpreter presents the ticket, which never expires, to
-+the Volume Server and VL Server during mutual authentication.
-+
-+Use this flag only when issuing a command on a server machine; client
-+machines do not usually have a F</usr/afs/etc/KeyFile> file.  The issuer
-+of a command that includes this flag must be logged on to the server
-+machine as the local superuser C<root>. The flag is useful for commands
-+invoked by an unattended application program, such as a process controlled
-+by the UNIX B<cron> utility or by a cron entry in the machine's
-+F</usr/afs/local/BosConfig> file. It is also useful if an administrator is
-+unable to authenticate to AFS but is logged in as the local superuser
-+B<root>.
-+
-+Do not combine the B<-cell> and B<-localauth> options. A command on which
-+the B<-localauth> flag is included always runs in the local cell (as
-+defined in the server machine's local F</usr/afs/etc/ThisCell> file),
-+whereas a command on which the B<-cell> argument is included runs in the
-+specified foreign cell. Also, do not combine the B<-localauth> and
-+B<-noauth> flags.
-+
-+=item B<-noauth>
-+
-+Establishes an unauthenticated connection to the Volume Server and VL
-+Server, in which the servers treat the issuer as the unprivileged user
-+C<anonymous>. It is useful only when authorization checking is disabled on
-+the server machine (during the installation of a file server machine or
-+when the L<B<bos setauth>|bos_setauth(8)> command has been used during
-+other unusual circumstances). In normal circumstances, the servers allow
-+only privileged users to issue commands that change the status of a volume
-+or VLDB record, and refuses to perform such an action even if the
-+B<-noauth> flag is provided. Do not combine the B<-noauth> and
-+B<-localauth> flags.
-+
-+=item B<-partition> <I<partition name>>
-+
-+Identifies the AFS server partition on a file server machine that houses,
-+or is to house, the volumes of interest, or about which to list
-+information. The B<vos> command interpreter accepts any of the following
-+four name formats:
-+
-+   /vicepa     =     vicepa      =      a      =      0
-+   /vicepb     =     vicepb      =      b      =      1
-+
-+After /vicepz (for which the index is 25) comes
-+
-+   /vicepaa    =     vicepaa     =      aa     =      26
-+   /vicepab    =     vicepab     =      ab     =      27
-+
-+and so on through
-+
-+   /vicepiv    =     vicepiv     =      iv     =      255
-+
-+The B<-frompartition> and B<-topartition> arguments to the
-+L<B<vos move>|vos_move(1)> command also accept this notation.
-+
-+=item B<-server> <I<machine name>>
-+
-+Identifies the file server machine that houses, or is to house, the
-+volumes or AFS server partitions of interest. Provide the machine's IP
-+address in dotted decimal format, its fully qualified host name (for
-+example, C<fs1.abc.com>), or the shortest abbreviated form of its host
-+name that distinguishes it from other machines. Successful use of an
-+abbreviated form depends on the availability of a name resolution service
-+(such as the Domain Name Service or a local host table) at the time the
-+command is issued.
-+
-+The B<-fromserver> and B<-toserver> arguments to the
-+L<B<vos move>|vos_move(1)> command also accept these name formats.
-+
-+=item B<-noresolve>
-+
-+Shows all servers as IP addresses instead of the DNS name. This is very
-+useful when the server address is registered as 127.0.0.1 or when dealing
-+with multi-homed servers. The B<-noresolve> option is available in OpenAFS
-+versions 1.4.8 or later and 1.5.35 or later.
-+
-+=item B<-verbose>
-+
-+Produces on the standard output stream a detailed trace of the command's
-+execution. If this argument is omitted, only warnings and error messages
-+appear.
-+
-+=back
-+
-+=head1 PRIVILEGE REQUIRED
-+
-+To issue most vos commands, the issuer must be listed in the
-+F</usr/afs/etc/UserList> file on each server machine that houses or is to
-+house an affected volume, and on each database server machine. The most
-+predictable performance results if all database server and file server
-+machines in the cell share a common F<UserList> file.  Alternatively, if
-+the B<-localauth> flag is included, the issuer must be logged on to a
-+server machine as the local superuser C<root>.
-+
-+To issue a vos command that only displays information, no privilege is
-+required.
-+
-+=head1 SEE ALSO
-+
-+L<vos_addsite(1)>,
-+L<vos_apropos(1)>,
-+L<vos_backup(1)>,
-+L<vos_backupsys(1)>,
-+L<vos_changeaddr(1)>,
-+L<vos_convertROtoRW(1)>,
-+L<vos_clone(1)>,
-+L<vos_copy(1)>,
-+L<vos_create(1)>,
-+L<vos_delentry(1)>,
-+L<vos_dump(1)>,
-+L<vos_endtrans(1)>,
-+L<vos_examine(1)>,
-+L<vos_help(1)>,
-+L<vos_listaddrs(1)>,
-+L<vos_listpart(1)>,
-+L<vos_listvldb(1)>,
-+L<vos_listvol(1)>,
-+L<vos_lock(1)>,
-+L<vos_move(1)>,
-+L<vos_partinfo(1)>,
-+L<vos_release(1)>,
-+L<vos_remove(1)>,
-+L<vos_remsite(1)>,
-+L<vos_rename(1)>,
-+L<vos_restore(1)>,
-+L<vos_setfields(1)>,
-+L<vos_shadow(1)>,
-+L<vos_size(1)>,
-+L<vos_status(1)>,
-+L<vos_syncserv(1)>,
-+L<vos_syncvldb(1)>,
-+L<vos_unlock(1)>,
-+L<vos_unlockvldb(1)>,
-+L<vos_zap(1)>,
-+L<CellServDB(5)>,
-+L<UserList(5)>
-+
-+=head1 COPYRIGHT
-+
-+IBM Corporation 2000. <http://www.ibm.com/> All Rights Reserved.
-+
-+This documentation is covered by the IBM Public License Version 1.0.  It was
-+converted from HTML to POD by software written by Chas Williams and Russ
-+Allbery, based on work by Alf Wachsmann and Elizabeth Cassell.
-diff --git a/doc/man-pages/pod1/vos_clone.pod b/doc/man-pages/pod1/vos_clone.pod
-deleted file mode 100644
-index 13b6c9f..0000000
---- a/doc/man-pages/pod1/vos_clone.pod
-+++ /dev/null
-@@ -1,172 +0,0 @@
--=head1 NAME
--
--vos_clone - Creates a shared-space copy of a volume on a partition
--
--=head1 SYNOPSIS
--
--=for html
--<div class="synopsis">
--
--B<vos clone> S<<< [B<-id>] <I<volume name or ID>> >>>
--    S<<< [B<-server>] <I<server name>> >>>
--    S<<< [B<-partition>] <I<partition name>> >>>
--    S<<< [B<-toname> <I<volume name on destination>>] >>>
--    S<<< [B<-toid> <I<volume ID on destination>>] >>>
--    [B<-offline>] [B<-readonly>]
--    S<<< [B<-cell> <I<cell name>>] >>> [B<-noauth>] [B<-localauth>]
--    [B<-verbose>] [B<-encrypt>] [B<-noresolve>] [B<-help>]
--
--B<vos cl> S<<< [B<-i>] <I<volume name or ID>> >>>
--    S<<< [B<-s>] <I<server name>> >>>
--    S<<< [B<-p>] <I<partition name>> >>>
--    S<<< [B<-ton> <I<volume name on destination>>] >>>
--    S<<< [B<-toi> <I<volume ID on destination>>] >>> [B<-o>] [B<-r>]
--    S<<< [B<-c> <I<cell name>>] >>> [B<-noa>]
--    [B<-l>] [B<-v>] [B<-e>] [B<-nor>] [B<-h>]
--
--=for html
--</div>
--
--=head1 DESCRIPTION
--
--The B<vos clone> command creates a copy-on-write copy of a volume on the
--same partition and server as the parent volume.
--
--A clone is a copy of a volume that only stores the changes from the
--parent volume. Cloning is a primitive operation that is used by the B<vos
--move>, B<vos backup>, and B<vos release> commands. A clone functions using
--the same mechanism as a backup volume, but it is persistent. Clone volumes
--can be used as point-in-time copies of the parent volume, but they must be
--used with care.
--
--=head1 CAUTIONS
--
--This command is not used during normal OpenAFS administration and may
--have adverse effects on the VLDB if not used properly! This command
--should only be used by an expert.
--
--Deleting or moving the parent volume makes the clone volume inaccessible,
--but the clone volume remains in the VLDB and on disk, and it needs to be
--cleaned up manually.
--
--There is a maximum limitation of 7 clones when using the namei
--fileserver. You may safely create up to 4 clones using the B<vos clone>
--command. The other three clone slots are used by the backup volume, a
--read-only replica and the temporary clone that is created when executing a
--B<vos move>, B<vos dump>, or other B<vos> commands.
--
--Some commands do not work properly on clone volumes. B<vos move> is one
--such command.
--
--Currently, the maximum size of a volume is 2 terabytes (2^31 bytes).
--
--=head1 OPTIONS
--
--=over 4
--
--=item [B<-id>] <I<volume name or ID>>
--
--Specifies either the complete name or volume ID number of a read/write
--volume.
--
--=item [B<-server>] <I<machine name>>
--
--Identifies the file server machine where the source volume resides. Provide
--the machine's IP address or its host name (either fully qualified or using
--an unambiguous abbreviation). For details, see L<vos(1)>.
--
--=item [B<-partition>] <I<partition name>>
--
--Names the partition where the source volume resides. Provide the full
--partition name (for, example, B</vicepa>) or one of the abbreviated forms
--described in L<vos(1)>.
--
--=item B<-toname> <I<volume name for new copy>>
--
--The complete name of the new volume to create.
--
--=item B<-toid> <I<volume id for new copy>>
--
--The complete id of the new volume to create.
--
--=item B<-offline>
--
--Leaves the new volume flagged as off-line in the volume database.
--
--=item B<-readonly>
--
--Flags the new volume as read-only in the volume database.
--
--=item B<-cell> <I<cell name>>
--
--Names the cell in which to run the command. Do not combine this argument
--with the B<-localauth> flag. For more details, see L<vos(1)>.
--
--=item B<-noauth>
--
--Assigns the unprivileged identity C<anonymous> to the issuer. Do not
--combine this flag with the B<-localauth> flag. For more details, see
--L<vos(1)>.
--
--=item B<-localauth>
--
--Constructs a server ticket using a key from the local
--F</usr/afs/etc/KeyFile> file. The B<vos> command interpreter presents
--it to the Volume Server and Volume Location Server during mutual
--authentication. Do not combine this flag with the B<-cell> argument or
--B<-noauth> flag. For more details, see L<vos(1)>.
--
--=item B<-verbose>
--
--Produces on the standard output stream a detailed trace of the command's
--execution. If this argument is omitted, only warnings and error messages
--appear.
--
--=item B<-encrypt>
--
--Encrypts the command so that the operation's results are not transmitted
--across the network in clear text. This option is available in OpenAFS
--versions 1.4.11 or later and 1.5.60 or later.
--
--=item B<-noresolve>
--
--Shows all servers as IP addresses instead of the DNS name. This is very
--useful when the server address is registered as 127.0.0.1 or when dealing
--with multi-homed servers. This option is available in OpenAFS
--versions 1.4.8 or later and 1.5.35 or later.
--
--=item B<-help>
--
--Prints the online help for this command. All other valid options are
--ignored.
--
--=back
--
--=head1 OUTPUT
--
--This command has no output unless C<-verbose> is specified or there is
--an error.
--
--=head1 PRIVILEGE REQUIRED
--
--The issuer must be listed in the F</usr/afs/etc/UserList> file on the
--machines specified with the B<-toserver> and B<-fromserver> arguments and
--on each database server machine.  If the B<-localauth> flag is included,
--the issuer must instead be logged on to a server machine as the local
--superuser C<root>.
--
--=head1 SEE ALSO
--
--L<vos(1)>,
--L<vos_backup(1)>,
--L<vos_copy(1)>,
--L<vos_move(1)>,
--L<vos_shadow(1)>
--
--=head1 COPYRIGHT
--
--Copyright 2008 Jason Edgecombe <jason@rampaginggeek.com>
--
--This documentation is covered by the BSD License as written in the
--doc/LICENSE file. This man page was written by Jason Edgecombe for
--OpenAFS.
-diff --git a/doc/man-pages/pod1/vos_clone.pod.in b/doc/man-pages/pod1/vos_clone.pod.in
-new file mode 100644
-index 0000000..34fdcd6
---- /dev/null
-+++ b/doc/man-pages/pod1/vos_clone.pod.in
-@@ -0,0 +1,172 @@
-+=head1 NAME
-+
-+vos_clone - Creates a shared-space copy of a volume on a partition
-+
-+=head1 SYNOPSIS
-+
-+=for html
-+<div class="synopsis">
-+
-+B<vos clone> S<<< [B<-id>] <I<volume name or ID>> >>>
-+    S<<< [B<-server>] <I<server name>> >>>
-+    S<<< [B<-partition>] <I<partition name>> >>>
-+    S<<< [B<-toname> <I<volume name on destination>>] >>>
-+    S<<< [B<-toid> <I<volume ID on destination>>] >>>
-+    [B<-offline>] [B<-readonly>]
-+    S<<< [B<-cell> <I<cell name>>] >>> [B<-noauth>] [B<-localauth>]
-+    [B<-verbose>] [B<-encrypt>] [B<-noresolve>] [B<-help>]
-+
-+B<vos cl> S<<< [B<-i>] <I<volume name or ID>> >>>
-+    S<<< [B<-s>] <I<server name>> >>>
-+    S<<< [B<-p>] <I<partition name>> >>>
-+    S<<< [B<-ton> <I<volume name on destination>>] >>>
-+    S<<< [B<-toi> <I<volume ID on destination>>] >>> [B<-o>] [B<-r>]
-+    S<<< [B<-c> <I<cell name>>] >>> [B<-noa>]
-+    [B<-l>] [B<-v>] [B<-e>] [B<-nor>] [B<-h>]
-+
-+=for html
-+</div>
-+
-+=head1 DESCRIPTION
-+
-+The B<vos clone> command creates a copy-on-write copy of a volume on the
-+same partition and server as the parent volume.
-+
-+A clone is a copy of a volume that only stores the changes from the
-+parent volume. Cloning is a primitive operation that is used by the B<vos
-+move>, B<vos backup>, and B<vos release> commands. A clone functions using
-+the same mechanism as a backup volume, but it is persistent. Clone volumes
-+can be used as point-in-time copies of the parent volume, but they must be
-+used with care.
-+
-+=head1 CAUTIONS
-+
-+This command is not used during normal OpenAFS administration and may
-+have adverse effects on the VLDB if not used properly! This command
-+should only be used by an expert.
-+
-+Deleting or moving the parent volume makes the clone volume inaccessible,
-+but the clone volume remains in the VLDB and on disk, and it needs to be
-+cleaned up manually.
-+
-+There is a maximum limitation of 7 clones when using the namei
-+fileserver. You may safely create up to 4 clones using the B<vos clone>
-+command. The other three clone slots are used by the backup volume, a
-+read-only replica and the temporary clone that is created when executing a
-+B<vos move>, B<vos dump>, or other B<vos> commands.
-+
-+Some commands do not work properly on clone volumes. B<vos move> is one
-+such command.
-+
-+=include fragments/volsize-caution.pod
-+
-+=head1 OPTIONS
-+
-+=over 4
-+
-+=item [B<-id>] <I<volume name or ID>>
-+
-+Specifies either the complete name or volume ID number of a read/write
-+volume.
-+
-+=item [B<-server>] <I<machine name>>
-+
-+Identifies the file server machine where the source volume resides. Provide
-+the machine's IP address or its host name (either fully qualified or using
-+an unambiguous abbreviation). For details, see L<vos(1)>.
-+
-+=item [B<-partition>] <I<partition name>>
-+
-+Names the partition where the source volume resides. Provide the full
-+partition name (for, example, B</vicepa>) or one of the abbreviated forms
-+described in L<vos(1)>.
-+
-+=item B<-toname> <I<volume name for new copy>>
-+
-+The complete name of the new volume to create.
-+
-+=item B<-toid> <I<volume id for new copy>>
-+
-+The complete id of the new volume to create.
-+
-+=item B<-offline>
-+
-+Leaves the new volume flagged as off-line in the volume database.
-+
-+=item B<-readonly>
-+
-+Flags the new volume as read-only in the volume database.
-+
-+=item B<-cell> <I<cell name>>
-+
-+Names the cell in which to run the command. Do not combine this argument
-+with the B<-localauth> flag. For more details, see L<vos(1)>.
-+
-+=item B<-noauth>
-+
-+Assigns the unprivileged identity C<anonymous> to the issuer. Do not
-+combine this flag with the B<-localauth> flag. For more details, see
-+L<vos(1)>.
-+
-+=item B<-localauth>
-+
-+Constructs a server ticket using a key from the local
-+F</usr/afs/etc/KeyFile> file. The B<vos> command interpreter presents
-+it to the Volume Server and Volume Location Server during mutual
-+authentication. Do not combine this flag with the B<-cell> argument or
-+B<-noauth> flag. For more details, see L<vos(1)>.
-+
-+=item B<-verbose>
-+
-+Produces on the standard output stream a detailed trace of the command's
-+execution. If this argument is omitted, only warnings and error messages
-+appear.
-+
-+=item B<-encrypt>
-+
-+Encrypts the command so that the operation's results are not transmitted
-+across the network in clear text. This option is available in OpenAFS
-+versions 1.4.11 or later and 1.5.60 or later.
-+
-+=item B<-noresolve>
-+
-+Shows all servers as IP addresses instead of the DNS name. This is very
-+useful when the server address is registered as 127.0.0.1 or when dealing
-+with multi-homed servers. This option is available in OpenAFS
-+versions 1.4.8 or later and 1.5.35 or later.
-+
-+=item B<-help>
-+
-+Prints the online help for this command. All other valid options are
-+ignored.
-+
-+=back
-+
-+=head1 OUTPUT
-+
-+This command has no output unless C<-verbose> is specified or there is
-+an error.
-+
-+=head1 PRIVILEGE REQUIRED
-+
-+The issuer must be listed in the F</usr/afs/etc/UserList> file on the
-+machines specified with the B<-toserver> and B<-fromserver> arguments and
-+on each database server machine.  If the B<-localauth> flag is included,
-+the issuer must instead be logged on to a server machine as the local
-+superuser C<root>.
-+
-+=head1 SEE ALSO
-+
-+L<vos(1)>,
-+L<vos_backup(1)>,
-+L<vos_copy(1)>,
-+L<vos_move(1)>,
-+L<vos_shadow(1)>
-+
-+=head1 COPYRIGHT
-+
-+Copyright 2008 Jason Edgecombe <jason@rampaginggeek.com>
-+
-+This documentation is covered by the BSD License as written in the
-+doc/LICENSE file. This man page was written by Jason Edgecombe for
-+OpenAFS.
-diff --git a/doc/man-pages/pod1/vos_convertROtoRW.pod b/doc/man-pages/pod1/vos_convertROtoRW.pod
-index 580993c..56f71d2 100644
---- a/doc/man-pages/pod1/vos_convertROtoRW.pod
-+++ b/doc/man-pages/pod1/vos_convertROtoRW.pod
-@@ -116,7 +116,7 @@ partition vicepb on server1 to a read-write volume:
- =head1 PRIVILEGE REQUIRED
- 
- The issuer must be listed in the F</usr/afs/etc/UserList> file on the
--machines specified with the B<-toserver> and B<-fromserver> arguments and
-+machine specified with the B<-server> argument and
- on each database server machine.  If the B<-localauth> flag is included,
- the issuer must instead be logged on to a server machine as the local
- superuser C<root>.
-diff --git a/doc/man-pages/pod1/vos_copy.pod.in b/doc/man-pages/pod1/vos_copy.pod.in
-index 50cc0a0..dfbfaa6 100644
---- a/doc/man-pages/pod1/vos_copy.pod.in
-+++ b/doc/man-pages/pod1/vos_copy.pod.in
-@@ -38,7 +38,7 @@ the volume be stored locally by the client.
- 
- =head1 CAUTIONS
- 
--Currently, the maximum size of a volume is 2 terabytes (2^31 bytes).
-+=include fragments/volsize-caution.pod
- 
- =head1 OPTIONS
- 
-diff --git a/doc/man-pages/pod1/vos_create.pod b/doc/man-pages/pod1/vos_create.pod
-deleted file mode 100644
-index 89dad2c..0000000
---- a/doc/man-pages/pod1/vos_create.pod
-+++ /dev/null
-@@ -1,213 +0,0 @@
--=head1 NAME
--
--vos_create - Creates a read/write volume and associated VLDB entry
--
--=head1 SYNOPSIS
--
--=for html
--<div class="synopsis">
--
--B<vos create> S<<< B<-server> <I<machine name>> >>>
--    S<<< B<-partition> <I<partition name>> >>>
--    S<<< B<-name> <I<volume name>> >>>
--    S<<< [B<-maxquota> <I<initial quota (KB)>>] >>>
--    S<<< [B<-cell> <I<cell name>>] >>>
--    [B<-noauth>] [B<-localauth>] [B<-verbose>]
--    [B<-encrypt>] [B<-noresolve>] [B<-help>]
--
--B<vos cr> S<<< B<-s> <I<machine name>> >>> S<<< B<-p> <I<partition name>> >>>
--    S<<< B<-na> <I<volume name>> >>> S<<< [B<-m> <I<initial quota>>] >>>
--    S<<< [B<-c> <I<cell name>>] >>> [B<-noa>] [B<-l>] [B<-v>]
--    [B<-e>] [B<-nor>] [B<-h>]
--
--=for html
--</div>
--
--=head1 DESCRIPTION
--
--The B<vos create> command creates a read/write volume with the name
--specified by the B<-name> argument at the site specified by the B<-server>
--and B<-partition> arguments. In addition, the command allocates or sets
--the following:
--
--=over 4
--
--=item *
--
--Volume ID numbers for the read/write volume and its associated read-only
--and backup volumes (this command does not actually create the latter two
--types of volume). A volume ID number is an identification number
--guaranteed to be unique within a cell.
--
--=item *
--
--An access control list (ACL) associated with the volume's root directory,
--which takes the same name as volume's mount point when the volume is
--mounted with the B<fs mkmount> command. An entry that grants all seven
--permissions to the members of the system:administrators group is
--automatically placed on the ACL. (In addition, the File Server by default
--always implicitly grants the C<l> (lookup) and C<a> (administer)
--permissions on every ACL to members of the system:administrators group,
--even when the group does not appear on an ACL; use the B<-implicit>
--argument to the B<fileserver> initialization command to alter the set of
--rights on a server-by-server basis if desired.)
--
--=item *
--
--The volume's space quota, set to 5000 kilobyte blocks by default. Use the
--B<-maxquota> argument to specify a different quota, or use the B<fs
--setquota> command to change the volume's quota after mounting the volume
--with the B<fs mkmount> command.
--
--=back
--
--The volume is empty when created. To access it via the Cache Manager,
--mount it in the file space by using the B<fs mkmount> command.
--
--=head1 CAUTIONS
--
--Currently, the maximum size of a volume is 2 terabytes (2^31 bytes).
--
--=head1 OPTIONS
--
--=over 4
--
--=item B<-server> <I<server name>>
--
--Identifies the file server machine on which to create the read/write
--volume. Provide the machine's IP address or its host name (either fully
--qualified or using an unambiguous abbreviation). For details, see
--L<vos(1)>.
--
--=item B<-partition> <I<partition name>>
--
--Identifies the partition on which to create the read/write volume, on the
--file server machine specified by the B<-server> argument.  Provide the
--partition's complete name with preceding slash (for example, C</vicepa>)
--or use one of the three acceptable abbreviated forms. For details, see
--L<vos(1)>.
--
--=item B<-name> <I<volume name>>
--
--Specifies a name for the read/write volume. The maximum length is 22
--characters, which can include any alphanumeric or punctuation
--character. By convention, periods separate the fields in a name.  Do not
--apply the C<.backup> or C<.readonly> extension to a read/write volume
--name; they are reserved for the Volume Server to add to the read/write
--name when creating those backup and read-only volumes respectively.
--
--=item B<-maxquota> <I<initial quota>>
--
--Specifies the maximum amount of disk space the volume can use.  The size
--should be a positive integer followed by an optional suffix: C<K> for
--kibibytes (1024 bytes, the default), C<M> for mebibytes (1024 kibibytes),
--C<G> for gibibytes (1024 mebibytes), and C<T> for tebibytes (1024
--gibibytes).  The value C<0> (zero) grants an unlimited quota, but the size
--of the disk partition that houses the volume places an absolute limit on
--its size.  If this argument is omitted, the default value is C<5000K>.
--
--=item B<-id> <I<volume ID>>
--
--Specifies the volume ID for the read/write volume. If this options is not
--specified, or the given volume ID is 0, a volume ID will be allocated for
--the volume automatically. The volume IDs allocated should be fine for
--almost all cases, so you should almost never need to specify this option.
--
--=item B<-roid> <I<readonly volume ID>>
--
--Specifies the volume ID for the readonly volume corresponding to the
--read/write volume that is being created. The readonly volume will not be
--created; this merely specifies what volume ID the readonly volume will use
--when it is created. If a volume ID of 0 is specified here, no readonly
--volume ID will be assigned to the created volume immediately. A readonly
--volume ID can still be assigned later when B<vos addsite> is run; if a
--volume does not have a readonly volume ID associated with it by the time
--B<vos release> is run, a volume ID will be allocated for it.
--
--If this option is not specified, the default readonly volume ID is one
--number higher than the read-write volume ID, whether or not that ID was
--manually specified.
--
--As with the B<-id> option, the default allocated volume IDs should be
--sufficient for almost all cases, so you should almost never need to
--specify them explicitly. This option is available in OpenAFS
--versions 1.5.61 or later.
--
--=item B<-cell> <I<cell name>>
--
--Names the cell in which to run the command. Do not combine this argument
--with the B<-localauth> flag. For more details, see L<vos(1)>.
--
--=item B<-noauth>
--
--Assigns the unprivileged identity C<anonymous> to the issuer. Do not
--combine this flag with the B<-localauth> flag. For more details, see
--L<vos(1)>.
--
--=item B<-localauth>
--
--Constructs a server ticket using a key from the local
--F</usr/afs/etc/KeyFile> file. The B<vos> command interpreter presents it
--to the Volume Server and Volume Location Server during mutual
--authentication. Do not combine this flag with the B<-cell> argument or
--B<-noauth> flag. For more details, see L<vos(1)>.
--
--=item B<-verbose>
--
--Produces on the standard output stream a detailed trace of the command's
--execution. If this argument is omitted, only warnings and error messages
--appear.
--
--=item B<-encrypt>
--
--Encrypts the command so that the operation's results are not transmitted
--across the network in clear text. This option is available in OpenAFS
--versions 1.4.11 or later and 1.5.60 or later.
--
--=item B<-noresolve>
--
--Shows all servers as IP addresses instead of the DNS name. This is very
--useful when the server address is registered as 127.0.0.1 or when dealing
--with multi-homed servers. This option is available in OpenAFS
--versions 1.4.8 or later and 1.5.35 or later.
--
--=item B<-help>
--
--Prints the online help for this command. All other valid options are
--ignored.
--
--=back
--
--=head1 OUTPUT
--
--The Volume Server produces the following message to confirm that it
--created the volume:
--
--   Volume <volume_ID> created on partition <partition_name> of <machine_name>
--
--=head1 EXAMPLES
--
--The following command creates the read/write volume C<user.pat> on the
--F</vicepf> partition of the file server machine C<fs4.abc.com>.
--
--   % vos create -server fs4.abc.com -partition /vicepf -name user.pat
--   Volume user.pat created on partition /vicepf of fs4.abc.com
--
--=head1 PRIVILEGE REQUIRED
--
--The issuer must be listed in the F</usr/afs/etc/UserList> file on the
--machine specified with the B<-server> argument and on each database server
--machine. If the B<-localauth> flag is included, the issuer must instead be
--logged on to a server machine as the local superuser C<root>.
--
--=head1 SEE ALSO
--
--L<vos(1)>
--
--=head1 COPYRIGHT
--
--IBM Corporation 2000. <http://www.ibm.com/> All Rights Reserved.
--
--This documentation is covered by the IBM Public License Version 1.0.  It was
--converted from HTML to POD by software written by Chas Williams and Russ
--Allbery, based on work by Alf Wachsmann and Elizabeth Cassell.
-diff --git a/doc/man-pages/pod1/vos_create.pod.in b/doc/man-pages/pod1/vos_create.pod.in
-new file mode 100644
-index 0000000..0807280
---- /dev/null
-+++ b/doc/man-pages/pod1/vos_create.pod.in
-@@ -0,0 +1,213 @@
-+=head1 NAME
-+
-+vos_create - Creates a read/write volume and associated VLDB entry
-+
-+=head1 SYNOPSIS
-+
-+=for html
-+<div class="synopsis">
-+
-+B<vos create> S<<< B<-server> <I<machine name>> >>>
-+    S<<< B<-partition> <I<partition name>> >>>
-+    S<<< B<-name> <I<volume name>> >>>
-+    S<<< [B<-maxquota> <I<initial quota (KB)>>] >>>
-+    S<<< [B<-cell> <I<cell name>>] >>>
-+    [B<-noauth>] [B<-localauth>] [B<-verbose>]
-+    [B<-encrypt>] [B<-noresolve>] [B<-help>]
-+
-+B<vos cr> S<<< B<-s> <I<machine name>> >>> S<<< B<-p> <I<partition name>> >>>
-+    S<<< B<-na> <I<volume name>> >>> S<<< [B<-m> <I<initial quota>>] >>>
-+    S<<< [B<-c> <I<cell name>>] >>> [B<-noa>] [B<-l>] [B<-v>]
-+    [B<-e>] [B<-nor>] [B<-h>]
-+
-+=for html
-+</div>
-+
-+=head1 DESCRIPTION
-+
-+The B<vos create> command creates a read/write volume with the name
-+specified by the B<-name> argument at the site specified by the B<-server>
-+and B<-partition> arguments. In addition, the command allocates or sets
-+the following:
-+
-+=over 4
-+
-+=item *
-+
-+Volume ID numbers for the read/write volume and its associated read-only
-+and backup volumes (this command does not actually create the latter two
-+types of volume). A volume ID number is an identification number
-+guaranteed to be unique within a cell.
-+
-+=item *
-+
-+An access control list (ACL) associated with the volume's root directory,
-+which takes the same name as volume's mount point when the volume is
-+mounted with the B<fs mkmount> command. An entry that grants all seven
-+permissions to the members of the system:administrators group is
-+automatically placed on the ACL. (In addition, the File Server by default
-+always implicitly grants the C<l> (lookup) and C<a> (administer)
-+permissions on every ACL to members of the system:administrators group,
-+even when the group does not appear on an ACL; use the B<-implicit>
-+argument to the B<fileserver> initialization command to alter the set of
-+rights on a server-by-server basis if desired.)
-+
-+=item *
-+
-+The volume's space quota, set to 5000 kilobyte blocks by default. Use the
-+B<-maxquota> argument to specify a different quota, or use the B<fs
-+setquota> command to change the volume's quota after mounting the volume
-+with the B<fs mkmount> command.
-+
-+=back
-+
-+The volume is empty when created. To access it via the Cache Manager,
-+mount it in the file space by using the B<fs mkmount> command.
-+
-+=head1 CAUTIONS
-+
-+=include fragments/volsize-caution.pod
-+
-+=head1 OPTIONS
-+
-+=over 4
-+
-+=item B<-server> <I<server name>>
-+
-+Identifies the file server machine on which to create the read/write
-+volume. Provide the machine's IP address or its host name (either fully
-+qualified or using an unambiguous abbreviation). For details, see
-+L<vos(1)>.
-+
-+=item B<-partition> <I<partition name>>
-+
-+Identifies the partition on which to create the read/write volume, on the
-+file server machine specified by the B<-server> argument.  Provide the
-+partition's complete name with preceding slash (for example, C</vicepa>)
-+or use one of the three acceptable abbreviated forms. For details, see
-+L<vos(1)>.
-+
-+=item B<-name> <I<volume name>>
-+
-+Specifies a name for the read/write volume. The maximum length is 22
-+characters, which can include any alphanumeric or punctuation
-+character. By convention, periods separate the fields in a name.  Do not
-+apply the C<.backup> or C<.readonly> extension to a read/write volume
-+name; they are reserved for the Volume Server to add to the read/write
-+name when creating those backup and read-only volumes respectively.
-+
-+=item B<-maxquota> <I<initial quota>>
-+
-+Specifies the maximum amount of disk space the volume can use.  The size
-+should be a positive integer followed by an optional suffix: C<K> for
-+kibibytes (1024 bytes, the default), C<M> for mebibytes (1024 kibibytes),
-+C<G> for gibibytes (1024 mebibytes), and C<T> for tebibytes (1024
-+gibibytes).  The value C<0> (zero) grants an unlimited quota, but the size
-+of the disk partition that houses the volume places an absolute limit on
-+its size.  If this argument is omitted, the default value is C<5000K>.
-+
-+=item B<-id> <I<volume ID>>
-+
-+Specifies the volume ID for the read/write volume. If this options is not
-+specified, or the given volume ID is 0, a volume ID will be allocated for
-+the volume automatically. The volume IDs allocated should be fine for
-+almost all cases, so you should almost never need to specify this option.
-+
-+=item B<-roid> <I<readonly volume ID>>
-+
-+Specifies the volume ID for the readonly volume corresponding to the
-+read/write volume that is being created. The readonly volume will not be
-+created; this merely specifies what volume ID the readonly volume will use
-+when it is created. If a volume ID of 0 is specified here, no readonly
-+volume ID will be assigned to the created volume immediately. A readonly
-+volume ID can still be assigned later when B<vos addsite> is run; if a
-+volume does not have a readonly volume ID associated with it by the time
-+B<vos release> is run, a volume ID will be allocated for it.
-+
-+If this option is not specified, the default readonly volume ID is one
-+number higher than the read-write volume ID, whether or not that ID was
-+manually specified.
-+
-+As with the B<-id> option, the default allocated volume IDs should be
-+sufficient for almost all cases, so you should almost never need to
-+specify them explicitly. This option is available in OpenAFS
-+versions 1.5.61 or later.
-+
-+=item B<-cell> <I<cell name>>
-+
-+Names the cell in which to run the command. Do not combine this argument
-+with the B<-localauth> flag. For more details, see L<vos(1)>.
-+
-+=item B<-noauth>
-+
-+Assigns the unprivileged identity C<anonymous> to the issuer. Do not
-+combine this flag with the B<-localauth> flag. For more details, see
-+L<vos(1)>.
-+
-+=item B<-localauth>
-+
-+Constructs a server ticket using a key from the local
-+F</usr/afs/etc/KeyFile> file. The B<vos> command interpreter presents it
-+to the Volume Server and Volume Location Server during mutual
-+authentication. Do not combine this flag with the B<-cell> argument or
-+B<-noauth> flag. For more details, see L<vos(1)>.
-+
-+=item B<-verbose>
-+
-+Produces on the standard output stream a detailed trace of the command's
-+execution. If this argument is omitted, only warnings and error messages
-+appear.
-+
-+=item B<-encrypt>
-+
-+Encrypts the command so that the operation's results are not transmitted
-+across the network in clear text. This option is available in OpenAFS
-+versions 1.4.11 or later and 1.5.60 or later.
-+
-+=item B<-noresolve>
-+
-+Shows all servers as IP addresses instead of the DNS name. This is very
-+useful when the server address is registered as 127.0.0.1 or when dealing
-+with multi-homed servers. This option is available in OpenAFS
-+versions 1.4.8 or later and 1.5.35 or later.
-+
-+=item B<-help>
-+
-+Prints the online help for this command. All other valid options are
-+ignored.
-+
-+=back
-+
-+=head1 OUTPUT
-+
-+The Volume Server produces the following message to confirm that it
-+created the volume:
-+
-+   Volume <volume_ID> created on partition <partition_name> of <machine_name>
-+
-+=head1 EXAMPLES
-+
-+The following command creates the read/write volume C<user.pat> on the
-+F</vicepf> partition of the file server machine C<fs4.abc.com>.
-+
-+   % vos create -server fs4.abc.com -partition /vicepf -name user.pat
-+   Volume user.pat created on partition /vicepf of fs4.abc.com
-+
-+=head1 PRIVILEGE REQUIRED
-+
-+The issuer must be listed in the F</usr/afs/etc/UserList> file on the
-+machine specified with the B<-server> argument and on each database server
-+machine. If the B<-localauth> flag is included, the issuer must instead be
-+logged on to a server machine as the local superuser C<root>.
-+
-+=head1 SEE ALSO
-+
-+L<vos(1)>
-+
-+=head1 COPYRIGHT
-+
-+IBM Corporation 2000. <http://www.ibm.com/> All Rights Reserved.
-+
-+This documentation is covered by the IBM Public License Version 1.0.  It was
-+converted from HTML to POD by software written by Chas Williams and Russ
-+Allbery, based on work by Alf Wachsmann and Elizabeth Cassell.
-diff --git a/doc/man-pages/pod1/vos_examine.pod b/doc/man-pages/pod1/vos_examine.pod
-deleted file mode 100644
-index 1da1d68..0000000
---- a/doc/man-pages/pod1/vos_examine.pod
-+++ /dev/null
-@@ -1,438 +0,0 @@
--=head1 NAME
--
--vos_examine - Shows volume header and VLDB entry information for a volume
--
--=head1 SYNOPSIS
--
--=for html
--<div class="synopsis">
--
--B<vos examine> S<<< B<-id> <I<volume name or ID>> >>> [B<-extended>]
--    [B<-format>] S<<< [B<-cell> <I<cell name>>] >>>
--    [B<-noauth>] [B<-localauth>] [B<-verbose>]
--    [B<-encrypt>] [B<-noresolve>] [B<-help>]
--
--B<vos e> S<<< B<-i> <I<volume name or ID>> >>> [B<-ex>] [B<-f>]
--    S<<< [B<-c> <I<cell name>>] >>>
--    [B<-noa>] [B<-l>] [B<-v>] [B<-e>] [B<-nor>] [B<-h>]
--
--B<vos volinfo> S<<< B<-id> <I<volume name or ID>> >>> [B<-extended>]
--    [B<-format>] S<<< [B<-cell> <I<cell name>>] >>>
--    [B<-noauth>] [B<-localauth>] [B<-verbose>]
--    [B<-encrypt>] [B<-noresolve>] [B<-help>]
--
--B<vos v> S<<< B<-i> <I<volume name or ID>> >>> [B<-ex>] [B<-f>]
--    S<<< [B<-c> <I<cell name>>] >>>
--    [B<-noa>] [B<-l>] [B<-v>] [B<-e>] [B<-nor>] [B<-h>]
--
--=for html
--</div>
--
--=head1 DESCRIPTION
--
--The B<vos examine> command formats and displays information from the
--Volume Location Database (VLDB) entry and the volume header of the volume
--specified by the B<-id> argument.
--
--To display the volume header only, use the B<vos listvol> command. To
--display information from the VLDB only, use the B<vos listvldb> command.
--
--=head1 CAUTIONS
--
--Currently, the maximum size of a volume is 2 terabytes (2^31 bytes).
--
--=head1 OPTIONS
--
--=over 4
--
--=item B<-id> <I<volume name or ID>>
--
--Specifies either the complete name or volume ID number of the volume,
--which can be read/write, read-only, or backup.
--
--=item B<-extended>
--
--Displays statistics about read and write operations on files and
--directories in the volume.
--
--=item B<-format>
--
--Shows information in a format suitable for machine parsing.
--
--=item B<-cell> <I<cell name>>
--
--Names the cell in which to run the command. Do not combine this argument
--with the B<-localauth> flag. For more details, see L<vos(1)>.
--
--=item B<-noauth>
--
--Assigns the unprivileged identity C<anonymous> to the issuer. Do not
--combine this flag with the B<-localauth> flag. For more details, see
--L<vos(1)>.
--
--=item B<-localauth>
--
--Constructs a server ticket using a key from the local
--F</usr/afs/etc/KeyFile> file. The B<vos> command interpreter presents it
--to the Volume Server and Volume Location Server during mutual
--authentication. Do not combine this flag with the B<-cell> argument or
--B<-noauth> flag. For more details, see L<vos(1)>.
--
--=item B<-verbose>
--
--Produces on the standard output stream a detailed trace of the command's
--execution. If this argument is omitted, only warnings and error messages
--appear.
--
--=item B<-encrypt>
--
--Encrypts the command so that the operation's results are not transmitted
--across the network in clear text. This option is available in OpenAFS
--versions 1.4.11 or later and 1.5.60 or later.
--
--=item B<-noresolve>
--
--Shows all servers as IP addresses instead of the DNS name. This is very
--useful when the server address is registered as 127.0.0.1 or when dealing
--with multi-homed servers. This option is available in OpenAFS
--versions 1.4.8 or later and 1.5.35 or later.
--
--=item B<-help>
--
--Prints the online help for this command. All other valid options are
--ignored.
--
--=back
--
--=head1 OUTPUT
--
--The first seven lines of the output show information from the volume
--header and the remaining lines come from the VLDB. Each item in the
--following list corresponds to a line of output derived from the volume
--header.
--
--=over 4
--
--=item *
--
--Basic information about the specified volume (displayed on a single
--line):
--
--=over 4
--
--=item *
--
--Name
--
--=item *
--
--Volume ID number
--
--=item *
--
--Type (the flag is C<RW> for read/write, C<RO> for read-only, C<BK> for
--backup)
--
--=item *
--
--Size in kilobytes (C<1024> equals a megabyte)
--
--=item *
--
--Number of files in the volume, if the B<-extended> flag is provided
--
--=item *
--
--Status on the file server machine, which is one of the following:
--
--=over 4
--
--=item On-line
--
--The volume is completely accessible to Cache Managers.
--
--=item Off-line
--
--The volume is not accessible to Cache Managers, but does not seem to be
--corrupted. This status appears while a volume is being dumped, for
--example.
--
--=item Off-line**needs salvage**
--
--The volume is not accessible to Cache Managers, because it seems to be
--corrupted. Use the B<bos salvage> or B<salvager> command to repair the
--corruption.
--
--=back
--
--=back
--
--=item *
--
--The file server machine and partition that house the volume, as determined
--by the command interpreter as the command runs, rather than derived from
--the VLDB or the volume header.
--
--=item *
--
--The volume ID numbers associated with the various versions of the volume:
--read/write (C<RWrite>), read-only (C<ROnly>), backup (C<Backup>), and
--ReleaseClone (C<RClone>). One of them matches the volume ID number that
--appears on the first line of the volume's output. If the value in the
--C<RWrite>, C<ROnly>, or C<Backup> field is C<0> (zero), there is no volume
--of that type. If there is currently no ReleaseClone, the C<RClone> field
--does not appear at all.
--
--=item *
--
--The maximum space quota allotted to the read/write copy of the volume,
--expressed in kilobyte blocks in the C<MaxQuota> field.
--
--=item *
--
--The date and time the volume was created, in the C<Creation> field. If the
--volume has been restored with the B<backup diskrestore>, B<backup
--volrestore>, or B<vos restore> command, this is the restore time. For a
--read-only volume, this is the last release time.
--
--=item *
--
--The date and time this copy of this volume was created, in the C<Copy>
--field.  This is the time when the volume was created on this server and
--partition.  For read-only volumes, it is not updated by a release (unlike
--the Creation date).  The copy date is not stored in volume dumps.
--
--=item *
--
--The date and time when the contents of the volume last changed, in the
--C<Last Update> field. For read-only and backup volumes, it matches the
--timestamp in the C<Creation> field.
--
--=item *
--
--The number of times the volume has been accessed for a fetch or store
--operation since the later of the two following times:
--
--=over 4
--
--=item *
--
--12:00 a.m. on the day the command is issued
--
--=item *
--
--The last time the volume changed location
--
--=back
--
--=back
--
--When the B<-extended> flag is included, two tables appear next:
--
--=over 4
--
--=item *
--
--The table labeled C<Raw Read/Write Stats> contains information on the
--number of reads (fetches) and writes (stores) made on the specified
--volume.
--
--=item *
--
--The table labeled C<Writes Affecting Authorship> contains information on
--writes made to files and directories in the specified volume.
--
--=back
--
--If the following message appears instead of the previously listed
--information, it indicates that a volume is not accessible to Cache
--Managers or the B<vos> command interpreter, for example because a clone is
--being created.
--
--   **** Volume <volume_ID> is busy ****
--
--If the following message appears instead of the previously listed
--information, it indicates that the File Server is unable to attach the
--volume, perhaps because it is seriously corrupted. The F<FileLog> and
--F<VolserLog> log files in the F</usr/afs/logs> directory on the file
--server machine possibly provide additional information; use the B<bos
--getlog> command to display them.
--
--   **** Could not attach volume <volume_ID> ****
--
--Following a blank line, information from the VLDB entry appears.  Each
--item in this list corresponds to a separate line in the output:
--
--=over 4
--
--=item *
--
--The base (read/write) volume name. The read-only and backup versions have
--the same name with a C<.readonly> and C<.backup> extension, respectively.
--
--=item *
--
--The volume ID numbers allocated to the versions of the volume that
--actually exist, in fields labeled C<RWrite> for the read/write, C<ROnly>
--for the read-only, C<Backup> for the backup, and C<RClone> for the
--ReleaseClone. (If a field does not appear, the corresponding version of
--the volume does not exist.) The appearance of the C<RClone> field normally
--indicates that a release operation did not complete successfully; the
--C<Old release> and C<New release> flags often also appear on one or more
--of the site definition lines described just following.
--
--=item *
--
--The number of sites that house a read/write or read-only copy of the
--volume, following the string C<< number of sites -> >>.
--
--=item *
--
--A line for each site that houses a read/write or read-only copy of the
--volume, specifying the file server machine, partition, and type of volume
--(C<RW> for read/write or C<RO> for read-only). If a backup version exists,
--it is understood to share the read/write site.  Several flags can appear
--with a site definition:
--
--=over 4
--
--=item Not released
--
--Indicates that the vos release command has not been issued since the B<vos
--addsite> command was used to define the read-only site.
--
--=item Old release
--
--Indicates that a vos release command did not complete successfully,
--leaving the previous, obsolete version of the volume at this site.
--
--=item New release
--
--Indicates that a vos release command did not complete successfully, but
--that this site did receive the correct new version of the volume.
--
--=back
--
--=item *
--
--If the VLDB entry is locked, the string C<Volume is currently LOCKED>, as
--well as (in OpenAFS 1.5.75 and later) one or more of the following strings:
--
--=over 4
--
--=item Volume is locked for a move operation
--
--Indicates that the volume was locked due to a B<vos move> or a B<vos
--convertROtoRW> command.
--
--=item Volume is locked for a release operation
--
--Indicates that the volume was locked due to a B<vos release> command.
--
--=item Volume is locked for a backup operation
--
--Indicates that the volume was locked due to a B<vos backup> command.
--
--=item Volume is locked for a delete/misc operation
--
--Indicates that the volume was locked due to a B<vos delentry>, B<vos
--addsite>, B<vos remsite>, B<vos changeloc>, B<vos syncvldb>, B<vos
--syncserv>, B<vos rename>, or B<vos lock> command.
--
--=item Volume is locked for a dump/restore operation
--
--Indicates that the volume was locked due to a B<vos dump> or B<vos restore>
--command.
--
--=back
--
--=back
--
--For further discussion of the C<New release> and C<Old release> flags, see
--L<vos_release(1)>.
--
--=head1 EXAMPLES
--
--The following example shows output for the ABC Corporation volume called
--C<usr> with two read-only replication sites (this volume is mounted at the
--F</afs/abc.com/usr> directory). For the sake of illustration, the output
--shows the volume as locked.
--
--   % vos examine usr
--   usr                           536870981 RW   3459 K On-line
--        fs2.abc.com /vicepb
--        RWrite 5360870981   ROnly 536870982   Backup 536870983
--        MaxQuota      40000 K
--        Creation    Mon Jun 12 15:22:06 1989
--        Copy        Mon Jun 12 15:22:06 1989
--        Last Update Fri Jun 16 09:34:35 1989
--        5719 accesses in the past day (i.e., vnode references)
--        RWrite: 5360870981   ROnly: 536870982   Backup: 536870983
--        number of sites -> 3
--           server fs1.abc.com partition /vicepa RO Site
--           server fs3.abc.com partition /vicepa RO Site
--           server fs2.abc.com partition /vicepb RW Site
--        Volume is currently LOCKED
--
--The following example shows the output for the volume C<user.terry> using
--the B<-extended> flag. The volume has no read-only replication sites.
--
--   % vos examine -id user.terry -extended
--   user.terry         354287190 RW    2302 K used 119 files On-line
--       fs4.abc.com /vicepc
--       RWrite 354287190 ROnly          0 Backup 354287192
--       MaxQuota       5000 K
--       Creation    Wed Nov 25 17:38:57 1992
--       Copy        Wed Nov 25 17:38:57 1992
--       Last Update Tue Dec 15 10:46:20 1992
--       598 accesses in the past day (i.e., vnode references)
--                         Raw Read/Write Stats
--             |-------------------------------------------|
--             |    Same Network     |    Diff Network     |
--             |----------|----------|----------|----------|
--             |  Total   |   Auth   |   Total  |   Auth   |
--             |----------|----------|----------|----------|
--   Reads     |       55 |       55 |       38 |       38 |
--   Writes    |       95 |       95 |        0 |        0 |
--             |-------------------------------------------|
--                      Writes Affecting Authorship
--             |-------------------------------------------|
--             |   File Authorship   | Directory Authorship|
--             |----------|----------|----------|----------|
--             |   Same   |   Diff   |    Same  |   Diff   |
--             |----------|----------|----------|----------|
--   0-60 sec  |       38 |        0 |       21 |        1 |
--   1-10 min  |        2 |        0 |        7 |        0 |
--   10min-1hr |        0 |        0 |        1 |        0 |
--   1hr-1day  |        1 |        0 |        5 |        1 |
--   1day-1wk  |        0 |        0 |        0 |        0 |
--   > 1wk     |        0 |        0 |        0 |        0 |
--             |-------------------------------------------|
--       RWrite: 354287190    Backup: 354287192
--       number of sites -> 1
--          server fs4.abc.com partition /vicepc RW Site
--
--=head1 PRIVILEGE REQUIRED
--
--None
--
--=head1 SEE ALSO
--
--L<backup_diskrestore(8)>,
--L<backup_volrestore(8)>,
--L<bos_getlog(8)>,
--L<bos_salvage(8)>,
--L<salvager(8)>,
--L<vos(1)>,
--L<vos_listvol(1)>,
--L<vos_listvldb(1)>,
--L<vos_release(1)>,
--L<vos_restore(1)>
--
--=head1 COPYRIGHT
--
--IBM Corporation 2000. <http://www.ibm.com/> All Rights Reserved.
--
--This documentation is covered by the IBM Public License Version 1.0.  It was
--converted from HTML to POD by software written by Chas Williams and Russ
--Allbery, based on work by Alf Wachsmann and Elizabeth Cassell.
-diff --git a/doc/man-pages/pod1/vos_examine.pod.in b/doc/man-pages/pod1/vos_examine.pod.in
-new file mode 100644
-index 0000000..8b145a3
---- /dev/null
-+++ b/doc/man-pages/pod1/vos_examine.pod.in
-@@ -0,0 +1,438 @@
-+=head1 NAME
-+
-+vos_examine - Shows volume header and VLDB entry information for a volume
-+
-+=head1 SYNOPSIS
-+
-+=for html
-+<div class="synopsis">
-+
-+B<vos examine> S<<< B<-id> <I<volume name or ID>> >>> [B<-extended>]
-+    [B<-format>] S<<< [B<-cell> <I<cell name>>] >>>
-+    [B<-noauth>] [B<-localauth>] [B<-verbose>]
-+    [B<-encrypt>] [B<-noresolve>] [B<-help>]
-+
-+B<vos e> S<<< B<-i> <I<volume name or ID>> >>> [B<-ex>] [B<-f>]
-+    S<<< [B<-c> <I<cell name>>] >>>
-+    [B<-noa>] [B<-l>] [B<-v>] [B<-e>] [B<-nor>] [B<-h>]
-+
-+B<vos volinfo> S<<< B<-id> <I<volume name or ID>> >>> [B<-extended>]
-+    [B<-format>] S<<< [B<-cell> <I<cell name>>] >>>
-+    [B<-noauth>] [B<-localauth>] [B<-verbose>]
-+    [B<-encrypt>] [B<-noresolve>] [B<-help>]
-+
-+B<vos v> S<<< B<-i> <I<volume name or ID>> >>> [B<-ex>] [B<-f>]
-+    S<<< [B<-c> <I<cell name>>] >>>
-+    [B<-noa>] [B<-l>] [B<-v>] [B<-e>] [B<-nor>] [B<-h>]
-+
-+=for html
-+</div>
-+
-+=head1 DESCRIPTION
-+
-+The B<vos examine> command formats and displays information from the
-+Volume Location Database (VLDB) entry and the volume header of the volume
-+specified by the B<-id> argument.
-+
-+To display the volume header only, use the B<vos listvol> command. To
-+display information from the VLDB only, use the B<vos listvldb> command.
-+
-+=head1 CAUTIONS
-+
-+=include fragments/volsize-caution.pod
-+
-+=head1 OPTIONS
-+
-+=over 4
-+
-+=item B<-id> <I<volume name or ID>>
-+
-+Specifies either the complete name or volume ID number of the volume,
-+which can be read/write, read-only, or backup.
-+
-+=item B<-extended>
-+
-+Displays statistics about read and write operations on files and
-+directories in the volume.
-+
-+=item B<-format>
-+
-+Shows information in a format suitable for machine parsing.
-+
-+=item B<-cell> <I<cell name>>
-+
-+Names the cell in which to run the command. Do not combine this argument
-+with the B<-localauth> flag. For more details, see L<vos(1)>.
-+
-+=item B<-noauth>
-+
-+Assigns the unprivileged identity C<anonymous> to the issuer. Do not
-+combine this flag with the B<-localauth> flag. For more details, see
-+L<vos(1)>.
-+
-+=item B<-localauth>
-+
-+Constructs a server ticket using a key from the local
-+F</usr/afs/etc/KeyFile> file. The B<vos> command interpreter presents it
-+to the Volume Server and Volume Location Server during mutual
-+authentication. Do not combine this flag with the B<-cell> argument or
-+B<-noauth> flag. For more details, see L<vos(1)>.
-+
-+=item B<-verbose>
-+
-+Produces on the standard output stream a detailed trace of the command's
-+execution. If this argument is omitted, only warnings and error messages
-+appear.
-+
-+=item B<-encrypt>
-+
-+Encrypts the command so that the operation's results are not transmitted
-+across the network in clear text. This option is available in OpenAFS
-+versions 1.4.11 or later and 1.5.60 or later.
-+
-+=item B<-noresolve>
-+
-+Shows all servers as IP addresses instead of the DNS name. This is very
-+useful when the server address is registered as 127.0.0.1 or when dealing
-+with multi-homed servers. This option is available in OpenAFS
-+versions 1.4.8 or later and 1.5.35 or later.
-+
-+=item B<-help>
-+
-+Prints the online help for this command. All other valid options are
-+ignored.
-+
-+=back
-+
-+=head1 OUTPUT
-+
-+The first seven lines of the output show information from the volume
-+header and the remaining lines come from the VLDB. Each item in the
-+following list corresponds to a line of output derived from the volume
-+header.
-+
-+=over 4
-+
-+=item *
-+
-+Basic information about the specified volume (displayed on a single
-+line):
-+
-+=over 4
-+
-+=item *
-+
-+Name
-+
-+=item *
-+
-+Volume ID number
-+
-+=item *
-+
-+Type (the flag is C<RW> for read/write, C<RO> for read-only, C<BK> for
-+backup)
-+
-+=item *
-+
-+Size in kilobytes (C<1024> equals a megabyte)
-+
-+=item *
-+
-+Number of files in the volume, if the B<-extended> flag is provided
-+
-+=item *
-+
-+Status on the file server machine, which is one of the following:
-+
-+=over 4
-+
-+=item On-line
-+
-+The volume is completely accessible to Cache Managers.
-+
-+=item Off-line
-+
-+The volume is not accessible to Cache Managers, but does not seem to be
-+corrupted. This status appears while a volume is being dumped, for
-+example.
-+
-+=item Off-line**needs salvage**
-+
-+The volume is not accessible to Cache Managers, because it seems to be
-+corrupted. Use the B<bos salvage> or B<salvager> command to repair the
-+corruption.
-+
-+=back
-+
-+=back
-+
-+=item *
-+
-+The file server machine and partition that house the volume, as determined
-+by the command interpreter as the command runs, rather than derived from
-+the VLDB or the volume header.
-+
-+=item *
-+
-+The volume ID numbers associated with the various versions of the volume:
-+read/write (C<RWrite>), read-only (C<ROnly>), backup (C<Backup>), and
-+ReleaseClone (C<RClone>). One of them matches the volume ID number that
-+appears on the first line of the volume's output. If the value in the
-+C<RWrite>, C<ROnly>, or C<Backup> field is C<0> (zero), there is no volume
-+of that type. If there is currently no ReleaseClone, the C<RClone> field
-+does not appear at all.
-+
-+=item *
-+
-+The maximum space quota allotted to the read/write copy of the volume,
-+expressed in kilobyte blocks in the C<MaxQuota> field.
-+
-+=item *
-+
-+The date and time the volume was created, in the C<Creation> field. If the
-+volume has been restored with the B<backup diskrestore>, B<backup
-+volrestore>, or B<vos restore> command, this is the restore time. For a
-+read-only volume, this is the last release time.
-+
-+=item *
-+
-+The date and time this copy of this volume was created, in the C<Copy>
-+field.  This is the time when the volume was created on this server and
-+partition.  For read-only volumes, it is not updated by a release (unlike
-+the Creation date).  The copy date is not stored in volume dumps.
-+
-+=item *
-+
-+The date and time when the contents of the volume last changed, in the
-+C<Last Update> field. For read-only and backup volumes, it matches the
-+timestamp in the C<Creation> field.
-+
-+=item *
-+
-+The number of times the volume has been accessed for a fetch or store
-+operation since the later of the two following times:
-+
-+=over 4
-+
-+=item *
-+
-+12:00 a.m. on the day the command is issued
-+
-+=item *
-+
-+The last time the volume changed location
-+
-+=back
-+
-+=back
-+
-+When the B<-extended> flag is included, two tables appear next:
-+
-+=over 4
-+
-+=item *
-+
-+The table labeled C<Raw Read/Write Stats> contains information on the
-+number of reads (fetches) and writes (stores) made on the specified
-+volume.
-+
-+=item *
-+
-+The table labeled C<Writes Affecting Authorship> contains information on
-+writes made to files and directories in the specified volume.
-+
-+=back
-+
-+If the following message appears instead of the previously listed
-+information, it indicates that a volume is not accessible to Cache
-+Managers or the B<vos> command interpreter, for example because a clone is
-+being created.
-+
-+   **** Volume <volume_ID> is busy ****
-+
-+If the following message appears instead of the previously listed
-+information, it indicates that the File Server is unable to attach the
-+volume, perhaps because it is seriously corrupted. The F<FileLog> and
-+F<VolserLog> log files in the F</usr/afs/logs> directory on the file
-+server machine possibly provide additional information; use the B<bos
-+getlog> command to display them.
-+
-+   **** Could not attach volume <volume_ID> ****
-+
-+Following a blank line, information from the VLDB entry appears.  Each
-+item in this list corresponds to a separate line in the output:
-+
-+=over 4
-+
-+=item *
-+
-+The base (read/write) volume name. The read-only and backup versions have
-+the same name with a C<.readonly> and C<.backup> extension, respectively.
-+
-+=item *
-+
-+The volume ID numbers allocated to the versions of the volume that
-+actually exist, in fields labeled C<RWrite> for the read/write, C<ROnly>
-+for the read-only, C<Backup> for the backup, and C<RClone> for the
-+ReleaseClone. (If a field does not appear, the corresponding version of
-+the volume does not exist.) The appearance of the C<RClone> field normally
-+indicates that a release operation did not complete successfully; the
-+C<Old release> and C<New release> flags often also appear on one or more
-+of the site definition lines described just following.
-+
-+=item *
-+
-+The number of sites that house a read/write or read-only copy of the
-+volume, following the string C<< number of sites -> >>.
-+
-+=item *
-+
-+A line for each site that houses a read/write or read-only copy of the
-+volume, specifying the file server machine, partition, and type of volume
-+(C<RW> for read/write or C<RO> for read-only). If a backup version exists,
-+it is understood to share the read/write site.  Several flags can appear
-+with a site definition:
-+
-+=over 4
-+
-+=item Not released
-+
-+Indicates that the vos release command has not been issued since the B<vos
-+addsite> command was used to define the read-only site.
-+
-+=item Old release
-+
-+Indicates that a vos release command did not complete successfully,
-+leaving the previous, obsolete version of the volume at this site.
-+
-+=item New release
-+
-+Indicates that a vos release command did not complete successfully, but
-+that this site did receive the correct new version of the volume.
-+
-+=back
-+
-+=item *
-+
-+If the VLDB entry is locked, the string C<Volume is currently LOCKED>, as
-+well as (in OpenAFS 1.5.75 and later) one or more of the following strings:
-+
-+=over 4
-+
-+=item Volume is locked for a move operation
-+
-+Indicates that the volume was locked due to a B<vos move> or a B<vos
-+convertROtoRW> command.
-+
-+=item Volume is locked for a release operation
-+
-+Indicates that the volume was locked due to a B<vos release> command.
-+
-+=item Volume is locked for a backup operation
-+
-+Indicates that the volume was locked due to a B<vos backup> command.
-+
-+=item Volume is locked for a delete/misc operation
-+
-+Indicates that the volume was locked due to a B<vos delentry>, B<vos
-+addsite>, B<vos remsite>, B<vos changeloc>, B<vos syncvldb>, B<vos
-+syncserv>, B<vos rename>, or B<vos lock> command.
-+
-+=item Volume is locked for a dump/restore operation
-+
-+Indicates that the volume was locked due to a B<vos dump> or B<vos restore>
-+command.
-+
-+=back
-+
-+=back
-+
-+For further discussion of the C<New release> and C<Old release> flags, see
-+L<vos_release(1)>.
-+
-+=head1 EXAMPLES
-+
-+The following example shows output for the ABC Corporation volume called
-+C<usr> with two read-only replication sites (this volume is mounted at the
-+F</afs/abc.com/usr> directory). For the sake of illustration, the output
-+shows the volume as locked.
-+
-+   % vos examine usr
-+   usr                           536870981 RW   3459 K On-line
-+        fs2.abc.com /vicepb
-+        RWrite 5360870981   ROnly 536870982   Backup 536870983
-+        MaxQuota      40000 K
-+        Creation    Mon Jun 12 15:22:06 1989
-+        Copy        Mon Jun 12 15:22:06 1989
-+        Last Update Fri Jun 16 09:34:35 1989
-+        5719 accesses in the past day (i.e., vnode references)
-+        RWrite: 5360870981   ROnly: 536870982   Backup: 536870983
-+        number of sites -> 3
-+           server fs1.abc.com partition /vicepa RO Site
-+           server fs3.abc.com partition /vicepa RO Site
-+           server fs2.abc.com partition /vicepb RW Site
-+        Volume is currently LOCKED
-+
-+The following example shows the output for the volume C<user.terry> using
-+the B<-extended> flag. The volume has no read-only replication sites.
-+
-+   % vos examine -id user.terry -extended
-+   user.terry         354287190 RW    2302 K used 119 files On-line
-+       fs4.abc.com /vicepc
-+       RWrite 354287190 ROnly          0 Backup 354287192
-+       MaxQuota       5000 K
-+       Creation    Wed Nov 25 17:38:57 1992
-+       Copy        Wed Nov 25 17:38:57 1992
-+       Last Update Tue Dec 15 10:46:20 1992
-+       598 accesses in the past day (i.e., vnode references)
-+                         Raw Read/Write Stats
-+             |-------------------------------------------|
-+             |    Same Network     |    Diff Network     |
-+             |----------|----------|----------|----------|
-+             |  Total   |   Auth   |   Total  |   Auth   |
-+             |----------|----------|----------|----------|
-+   Reads     |       55 |       55 |       38 |       38 |
-+   Writes    |       95 |       95 |        0 |        0 |
-+             |-------------------------------------------|
-+                      Writes Affecting Authorship
-+             |-------------------------------------------|
-+             |   File Authorship   | Directory Authorship|
-+             |----------|----------|----------|----------|
-+             |   Same   |   Diff   |    Same  |   Diff   |
-+             |----------|----------|----------|----------|
-+   0-60 sec  |       38 |        0 |       21 |        1 |
-+   1-10 min  |        2 |        0 |        7 |        0 |
-+   10min-1hr |        0 |        0 |        1 |        0 |
-+   1hr-1day  |        1 |        0 |        5 |        1 |
-+   1day-1wk  |        0 |        0 |        0 |        0 |
-+   > 1wk     |        0 |        0 |        0 |        0 |
-+             |-------------------------------------------|
-+       RWrite: 354287190    Backup: 354287192
-+       number of sites -> 1
-+          server fs4.abc.com partition /vicepc RW Site
-+
-+=head1 PRIVILEGE REQUIRED
-+
-+None
-+
-+=head1 SEE ALSO
-+
-+L<backup_diskrestore(8)>,
-+L<backup_volrestore(8)>,
-+L<bos_getlog(8)>,
-+L<bos_salvage(8)>,
-+L<salvager(8)>,
-+L<vos(1)>,
-+L<vos_listvol(1)>,
-+L<vos_listvldb(1)>,
-+L<vos_release(1)>,
-+L<vos_restore(1)>
-+
-+=head1 COPYRIGHT
-+
-+IBM Corporation 2000. <http://www.ibm.com/> All Rights Reserved.
-+
-+This documentation is covered by the IBM Public License Version 1.0.  It was
-+converted from HTML to POD by software written by Chas Williams and Russ
-+Allbery, based on work by Alf Wachsmann and Elizabeth Cassell.
-diff --git a/doc/man-pages/pod1/vos_move.pod b/doc/man-pages/pod1/vos_move.pod
-deleted file mode 100644
-index 4787196..0000000
---- a/doc/man-pages/pod1/vos_move.pod
-+++ /dev/null
-@@ -1,212 +0,0 @@
--=head1 NAME
--
--vos_move - Moves a read/write volume to another site
--
--=head1 SYNOPSIS
--
--=for html
--<div class="synopsis">
--
--B<vos move> S<<< B<-id> <I<volume name or ID>> >>>
--    S<<< B<-fromserver> <I<machine name on source>> >>>
--    S<<< B<-frompartition> <I<partition name on source>> >>>
--    S<<< B<-toserver> <I<machine name on destination>> >>>
--    S<<< B<-topartition> <I<partition name on destination>> >>>
--    [B<-live>] S<<< [B<-cell> <I<cell name>>] >>> [B<-noauth>] [B<-localauth>]
--    [B<-verbose>] [B<-encrypt>] [B<-noresolve>] [B<-help>]
--
--B<vos m> S<<< B<-i> <I<volume name or ID>> >>>
--    S<<< B<-froms> <I<machine name on source>> >>>
--    S<<< B<-fromp> <I<partition name on source>> >>>
--    S<<< B<-tos> <I<machine name on destination>> >>>
--    S<<< B<-top> <I<partition name on destination>> >>>
--    [B<-li>] S<<< [B<-c> <I<cell name>>] >>> [B<-noa>]
--    [B<-lo>] [B<-v>] [B<-e>] [B<-nor>] [B<-h>]
--
--=for html
--</div>
--
--=head1 DESCRIPTION
--
--The B<vos move> command moves the indicated read/write volume from its
--current site (specified with the B<-fromserver> and B<-frompartition>
--arguments) to the destination site (specified with the B<-toserver> and
--B<-topartition> arguments). This command automatically removes the backup
--copy from the current site, if it exists. To create a new backup volume at
--the destination site, use the B<vos backup> command.
--
--This command works on read/write volumes only. To move a read-only volume,
--use the B<vos addsite> and B<vos release> commands to define a new
--read-only site and release the volume contents to it, and then use the
--B<vos remove> command to remove the previous read-only volume's definition
--from the Volume Location Database (VLDB) and data from the partition. To
--move a backup volume, use this command to move its read/write source and
--then issue the B<vos backup> command.
--
--Before executing this command, the B<vos> command interpreter initiates a
--check that the destination partition contains enough space to house the
--volume being moved. If there is not enough space, the move operation is
--not attempted and the following message appears:
--
--   vos: no space on target partition <dest_part> to move volume <volume>
--
--=head1 CAUTIONS
--
--Unless there is a compelling reason, do not interrupt a B<vos move>
--command in progress. Interrupting a move can result in one or more of the
--following inconsistent states:
--
--=over 4
--
--=item *
--
--There are two versions of the volume, one at the source site and one at
--the destination site. (If this happens, retain the version identified by
--the VLDB and use the B<vos zap> command to remove the other version.)
--
--=item *
--
--The backup version of the volume is stranded at the old site. (If this
--happens, use the B<vos zap> command to remove it.)
--
--=item *
--
--The volume is off-line. (If this happens, run the B<bos salvage> command
--to bring it back on line.)
--
--=back
--
--If the Ctrl-C interrupt signal is pressed while a vos move operation is
--executing, the following message warns of the consequences and requests
--confirmation of the kill signal:
--
--   SIGINT handler: vos move operation in progress
--   WARNING: may leave AFS storage and metadata in indeterminate state
--   enter second control-c to exit
--
--To confirm termination of the operation, press Ctrl-C a second time; press
--any other key to continue the operation.
--
--Currently, the maximum size of a volume is 2 terabytes (2^31 bytes).
--
--=head1 OPTIONS
--
--=over 4
--
--=item B<-id> <I<volume name or ID>>
--
--Specifies either the complete name or volume ID number of a read/write
--volume.
--
--=item B<-fromserver> <I<server name>>
--
--Identifies the file server machine where the volume currently
--resides. Provide the machine's IP address or its host name (either fully
--qualified or using an unambiguous abbreviation). For details, see
--L<vos(1)>.
--
--=item B<-frompartition> <I<partition name>>
--
--Names the partition where the volume currently resides. Provide the full
--partition name (for, example, B</vicepa>) or one of the abbreviated forms
--described in L<vos(1)>.
--
--=item B<-toserver> <I<server name>>
--
--Identifies the file server machine to which to move the volume.  Provide
--the machine's IP address or its host name (either fully qualified or using
--an unambiguous abbreviation). For details, see L<vos(1)>.
--
--=item B<-topartition> <I<partition name>>
--
--Names the partition to which to move the volume. Provide the full
--partition name (for, example, B</vicepa>) or one of the abbreviated forms
--described in L<vos(1)>.
--
--=item B<-live>
--
--Avoids making a temporary copy of the volume during the move. This is
--useful if the partition is full, but the administrator needs to move
--volumes to a another partition or server to free up disk space. The
--caveat is that the volume is locked during the entire operation
--instead of the short time that is needed to make the temporary clone.
--
--=item B<-cell> <I<cell name>>
--
--Names the cell in which to run the command. Do not combine this argument
--with the B<-localauth> flag. For more details, see L<vos(1)>.
--
--=item B<-noauth>
--
--Assigns the unprivileged identity C<anonymous> to the issuer. Do not
--combine this flag with the B<-localauth> flag. For more details, see
--L<vos(1)>.
--
--=item B<-localauth>
--
--Constructs a server ticket using a key from the local
--F</usr/afs/etc/KeyFile> file. The B<vos> command interpreter presents it
--to the Volume Server and Volume Location Server during mutual
--authentication. Do not combine this flag with the B<-cell> argument or
--B<-noauth> flag. For more details, see L<vos(1)>.
--
--=item B<-verbose>
--
--Produces on the standard output stream a detailed trace of the command's
--execution. If this argument is omitted, only warnings and error messages
--appear.
--
--=item B<-encrypt>
--
--Encrypts the command so that the operation's results are not transmitted
--across the network in clear text. This option is available in OpenAFS
--versions 1.4.11 or later and 1.5.60 or later.
--
--=item B<-noresolve>
--
--Shows all servers as IP addresses instead of the DNS name. This is very
--useful when the server address is registered as 127.0.0.1 or when dealing
--with multi-homed servers. This option is available in OpenAFS
--versions 1.4.8 or later and 1.5.35 or later.
--
--=item B<-help>
--
--Prints the online help for this command. All other valid options are
--ignored.
--
--=back
--
--=head1 EXAMPLES
--
--The following example moves the volume C<user.smith> from the F</vicepb>
--partition on the file server machine C<fs3.abc.com> to the F</vicepg>
--partition on the file server machine C<fs7.abc.com>.
--
--   % vos move -id user.smith -fromserver fs3.abc.com -frompartition b \
--       -toserver fs7.abc.com -topartition g
--
--=head1 PRIVILEGE REQUIRED
--
--The issuer must be listed in the F</usr/afs/etc/UserList> file on the
--machines specified with the B<-toserver> and B<-fromserver> arguments and
--on each database server machine.  If the B<-localauth> flag is included,
--the issuer must instead be logged on to a server machine as the local
--superuser C<root>.
--
--=head1 SEE ALSO
--
--L<vos(1)>,
--L<vos_addsite(1)>,
--L<vos_backup(1)>,
--L<vos_copy(1)>,
--L<vos_release(1)>,
--L<vos_listvol(1)>,
--L<vos_remove(1)>
--
--=head1 COPYRIGHT
--
--IBM Corporation 2000. <http://www.ibm.com/> All Rights Reserved.
--
--This documentation is covered by the IBM Public License Version 1.0.  It was
--converted from HTML to POD by software written by Chas Williams and Russ
--Allbery, based on work by Alf Wachsmann and Elizabeth Cassell.
-diff --git a/doc/man-pages/pod1/vos_move.pod.in b/doc/man-pages/pod1/vos_move.pod.in
-new file mode 100644
-index 0000000..4dea987
---- /dev/null
-+++ b/doc/man-pages/pod1/vos_move.pod.in
-@@ -0,0 +1,212 @@
-+=head1 NAME
-+
-+vos_move - Moves a read/write volume to another site
-+
-+=head1 SYNOPSIS
-+
-+=for html
-+<div class="synopsis">
-+
-+B<vos move> S<<< B<-id> <I<volume name or ID>> >>>
-+    S<<< B<-fromserver> <I<machine name on source>> >>>
-+    S<<< B<-frompartition> <I<partition name on source>> >>>
-+    S<<< B<-toserver> <I<machine name on destination>> >>>
-+    S<<< B<-topartition> <I<partition name on destination>> >>>
-+    [B<-live>] S<<< [B<-cell> <I<cell name>>] >>> [B<-noauth>] [B<-localauth>]
-+    [B<-verbose>] [B<-encrypt>] [B<-noresolve>] [B<-help>]
-+
-+B<vos m> S<<< B<-i> <I<volume name or ID>> >>>
-+    S<<< B<-froms> <I<machine name on source>> >>>
-+    S<<< B<-fromp> <I<partition name on source>> >>>
-+    S<<< B<-tos> <I<machine name on destination>> >>>
-+    S<<< B<-top> <I<partition name on destination>> >>>
-+    [B<-li>] S<<< [B<-c> <I<cell name>>] >>> [B<-noa>]
-+    [B<-lo>] [B<-v>] [B<-e>] [B<-nor>] [B<-h>]
-+
-+=for html
-+</div>
-+
-+=head1 DESCRIPTION
-+
-+The B<vos move> command moves the indicated read/write volume from its
-+current site (specified with the B<-fromserver> and B<-frompartition>
-+arguments) to the destination site (specified with the B<-toserver> and
-+B<-topartition> arguments). This command automatically removes the backup
-+copy from the current site, if it exists. To create a new backup volume at
-+the destination site, use the B<vos backup> command.
-+
-+This command works on read/write volumes only. To move a read-only volume,
-+use the B<vos addsite> and B<vos release> commands to define a new
-+read-only site and release the volume contents to it, and then use the
-+B<vos remove> command to remove the previous read-only volume's definition
-+from the Volume Location Database (VLDB) and data from the partition. To
-+move a backup volume, use this command to move its read/write source and
-+then issue the B<vos backup> command.
-+
-+Before executing this command, the B<vos> command interpreter initiates a
-+check that the destination partition contains enough space to house the
-+volume being moved. If there is not enough space, the move operation is
-+not attempted and the following message appears:
-+
-+   vos: no space on target partition <dest_part> to move volume <volume>
-+
-+=head1 CAUTIONS
-+
-+Unless there is a compelling reason, do not interrupt a B<vos move>
-+command in progress. Interrupting a move can result in one or more of the
-+following inconsistent states:
-+
-+=over 4
-+
-+=item *
-+
-+There are two versions of the volume, one at the source site and one at
-+the destination site. (If this happens, retain the version identified by
-+the VLDB and use the B<vos zap> command to remove the other version.)
-+
-+=item *
-+
-+The backup version of the volume is stranded at the old site. (If this
-+happens, use the B<vos zap> command to remove it.)
-+
-+=item *
-+
-+The volume is off-line. (If this happens, run the B<bos salvage> command
-+to bring it back on line.)
-+
-+=back
-+
-+If the Ctrl-C interrupt signal is pressed while a vos move operation is
-+executing, the following message warns of the consequences and requests
-+confirmation of the kill signal:
-+
-+   SIGINT handler: vos move operation in progress
-+   WARNING: may leave AFS storage and metadata in indeterminate state
-+   enter second control-c to exit
-+
-+To confirm termination of the operation, press Ctrl-C a second time; press
-+any other key to continue the operation.
-+
-+=include fragments/volsize-caution.pod
-+
-+=head1 OPTIONS
-+
-+=over 4
-+
-+=item B<-id> <I<volume name or ID>>
-+
-+Specifies either the complete name or volume ID number of a read/write
-+volume.
-+
-+=item B<-fromserver> <I<server name>>
-+
-+Identifies the file server machine where the volume currently
-+resides. Provide the machine's IP address or its host name (either fully
-+qualified or using an unambiguous abbreviation). For details, see
-+L<vos(1)>.
-+
-+=item B<-frompartition> <I<partition name>>
-+
-+Names the partition where the volume currently resides. Provide the full
-+partition name (for, example, B</vicepa>) or one of the abbreviated forms
-+described in L<vos(1)>.
-+
-+=item B<-toserver> <I<server name>>
-+
-+Identifies the file server machine to which to move the volume.  Provide
-+the machine's IP address or its host name (either fully qualified or using
-+an unambiguous abbreviation). For details, see L<vos(1)>.
-+
-+=item B<-topartition> <I<partition name>>
-+
-+Names the partition to which to move the volume. Provide the full
-+partition name (for, example, B</vicepa>) or one of the abbreviated forms
-+described in L<vos(1)>.
-+
-+=item B<-live>
-+
-+Avoids making a temporary copy of the volume during the move. This is
-+useful if the partition is full, but the administrator needs to move
-+volumes to a another partition or server to free up disk space. The
-+caveat is that the volume is locked during the entire operation
-+instead of the short time that is needed to make the temporary clone.
-+
-+=item B<-cell> <I<cell name>>
-+
-+Names the cell in which to run the command. Do not combine this argument
-+with the B<-localauth> flag. For more details, see L<vos(1)>.
-+
-+=item B<-noauth>
-+
-+Assigns the unprivileged identity C<anonymous> to the issuer. Do not
-+combine this flag with the B<-localauth> flag. For more details, see
-+L<vos(1)>.
-+
-+=item B<-localauth>
-+
-+Constructs a server ticket using a key from the local
-+F</usr/afs/etc/KeyFile> file. The B<vos> command interpreter presents it
-+to the Volume Server and Volume Location Server during mutual
-+authentication. Do not combine this flag with the B<-cell> argument or
-+B<-noauth> flag. For more details, see L<vos(1)>.
-+
-+=item B<-verbose>
-+
-+Produces on the standard output stream a detailed trace of the command's
-+execution. If this argument is omitted, only warnings and error messages
-+appear.
-+
-+=item B<-encrypt>
-+
-+Encrypts the command so that the operation's results are not transmitted
-+across the network in clear text. This option is available in OpenAFS
-+versions 1.4.11 or later and 1.5.60 or later.
-+
-+=item B<-noresolve>
-+
-+Shows all servers as IP addresses instead of the DNS name. This is very
-+useful when the server address is registered as 127.0.0.1 or when dealing
-+with multi-homed servers. This option is available in OpenAFS
-+versions 1.4.8 or later and 1.5.35 or later.
-+
-+=item B<-help>
-+
-+Prints the online help for this command. All other valid options are
-+ignored.
-+
-+=back
-+
-+=head1 EXAMPLES
-+
-+The following example moves the volume C<user.smith> from the F</vicepb>
-+partition on the file server machine C<fs3.abc.com> to the F</vicepg>
-+partition on the file server machine C<fs7.abc.com>.
-+
-+   % vos move -id user.smith -fromserver fs3.abc.com -frompartition b \
-+       -toserver fs7.abc.com -topartition g
-+
-+=head1 PRIVILEGE REQUIRED
-+
-+The issuer must be listed in the F</usr/afs/etc/UserList> file on the
-+machines specified with the B<-toserver> and B<-fromserver> arguments and
-+on each database server machine.  If the B<-localauth> flag is included,
-+the issuer must instead be logged on to a server machine as the local
-+superuser C<root>.
-+
-+=head1 SEE ALSO
-+
-+L<vos(1)>,
-+L<vos_addsite(1)>,
-+L<vos_backup(1)>,
-+L<vos_copy(1)>,
-+L<vos_release(1)>,
-+L<vos_listvol(1)>,
-+L<vos_remove(1)>
-+
-+=head1 COPYRIGHT
-+
-+IBM Corporation 2000. <http://www.ibm.com/> All Rights Reserved.
-+
-+This documentation is covered by the IBM Public License Version 1.0.  It was
-+converted from HTML to POD by software written by Chas Williams and Russ
-+Allbery, based on work by Alf Wachsmann and Elizabeth Cassell.
-diff --git a/doc/man-pages/pod1/vos_partinfo.pod b/doc/man-pages/pod1/vos_partinfo.pod
-deleted file mode 100644
-index 483a942..0000000
---- a/doc/man-pages/pod1/vos_partinfo.pod
-+++ /dev/null
-@@ -1,145 +0,0 @@
--=head1 NAME
--
--vos_partinfo - Reports the available and total space on a partition
--
--=head1 SYNOPSIS
--
--=for html
--<div class="synopsis">
--
--B<vos partinfo> S<<< B<-server> <I<machine name>> >>>
--    S<<< [B<-partition> <I<partition name>>] >>> [B<-summary>]
--    S<<< [B<-cell> <I<cell name>>] >>>
--    [B<-noauth>] [B<-localauth>]
--    [B<-verbose>] [B<-encrypt>] [B<-noresolve>] [B<-help>]
--
--B<vos p> S<<< B<-se> <I<machine name>> >>>
--    S<<< [B<-p> <I<partition name>>] >>> [B<-su>]
--    S<<< [B<-c> <I<cell name>>] >>>
--    [B<-noa>] [B<-l>] [B<-v>] [B<-e>] [B<-nor>] [B<-h>]
--
--=for html
--</div>
--
--=head1 DESCRIPTION
--
--The vos partinfo command reports the amount of space available and total
--size on either all of the partitions on the indicated file server machine
--(if the B<-partition> argument is omitted) or the specified partition on
--that file server machine. The Volume Location Database (VLDB) is not
--consulted.
--
--=head1 CAUTIONS
--
--Currently, the maximum size of a volume is 2 terabytes (2^31 bytes).
--
--=head1 OPTIONS
--
--=over 4
--
--=item B<-server> <I<server name>>
--
--Identifies the file server machine for which to display partition
--information. Provide the machine's IP address or its host name (either
--fully qualified or using an unambiguous abbreviation). For details, see
--L<vos(1)>.
--
--=item B<-partition> <I<partition name>>
--
--Identifies which partition on the file server machine specified by the
--B<-server> argument for which to display information. Provide the
--partition's complete name with preceding slash (for example, C</vicepa>)
--or use one of the three acceptable abbreviated forms. For details, see
--L<vos(1)>.
--
--=item B<-summary>
--
--Prints storage summary.
--
--=item B<-cell> <I<cell name>>
--
--Names the cell in which to run the command. Do not combine this argument
--with the B<-localauth> flag. For more details, see L<vos(1)>.
--
--=item B<-noauth>
--
--Assigns the unprivileged identity C<anonymous> to the issuer. Do not
--combine this flag with the B<-localauth> flag. For more details, see
--L<vos(1)>.
--
--=item B<-localauth>
--
--Constructs a server ticket using a key from the local
--F</usr/afs/etc/KeyFile> file. The B<vos> command interpreter presents it
--to the Volume Server and Volume Location Server during mutual
--authentication. Do not combine this flag with the B<-cell> argument or
--B<-noauth> flag. For more details, see L<vos(1)>.
--
--=item B<-verbose>
--
--Produces on the standard output stream a detailed trace of the command's
--execution. If this argument is omitted, only warnings and error messages
--appear.
--
--=item B<-encrypt>
--
--Encrypts the command so that the operation's results are not transmitted
--across the network in clear text. This option is available in OpenAFS
--versions 1.4.11 or later and 1.5.60 or later.
--
--=item B<-noresolve>
--
--Shows all servers as IP addresses instead of the DNS name. This is very
--useful when the server address is registered as 127.0.0.1 or when dealing
--with multi-homed servers. This option is available in OpenAFS
--versions 1.4.8 or later and 1.5.35 or later.
--
--=item B<-help>
--
--Prints the online help for this command. All other valid options are
--ignored.
--
--=back
--
--=head1 CAUTIONS
--
--The partition-related statistics in this command's output do not always
--agree with the corresponding values in the output of the standard UNIX
--B<df> command. The statistics reported by this command can be up to five
--minutes old, because the Cache Manager polls the File Server for partition
--information at that frequency. Also, on some operating systems, the B<df>
--command's report of partition size includes reserved space not included in
--this command's calculation, and so is likely to be about 10% larger.
--
--=head1 OUTPUT
--
--The output reports the amount of space available and total space for each
--specified partition.
--
--=head1 EXAMPLES
--
--The following command displays all partitions on the file server machine
--C<fs2.abc.com>.
--
--   % vos partinfo fs2.abc.com
--   Free space on partition /vicepa: 27301 K blocks out of total 549197
--   Free space on partition /vicepb: 13646 K blocks out of total 69194
--   Free space on partition /vicepc: 31798 K blocks out of total 320315
--   Free space on partition /vicepd: 33302 K blocks out of total 494954
--
--=head1 PRIVILEGE REQUIRED
--
--None
--
--=head1 SEE ALSO
--
--L<vos(1)>,
--L<vos_listpart(1)>
--
--=head1 COPYRIGHT
--
--IBM Corporation 2000. <http://www.ibm.com/> All Rights Reserved.
--
--This documentation is covered by the IBM Public License Version 1.0.  It was
--converted from HTML to POD by software written by Chas Williams and Russ
--Allbery, based on work by Alf Wachsmann and Elizabeth Cassell.
-diff --git a/doc/man-pages/pod1/vos_partinfo.pod.in b/doc/man-pages/pod1/vos_partinfo.pod.in
-new file mode 100644
-index 0000000..5aeccf1
---- /dev/null
-+++ b/doc/man-pages/pod1/vos_partinfo.pod.in
-@@ -0,0 +1,145 @@
-+=head1 NAME
-+
-+vos_partinfo - Reports the available and total space on a partition
-+
-+=head1 SYNOPSIS
-+
-+=for html
-+<div class="synopsis">
-+
-+B<vos partinfo> S<<< B<-server> <I<machine name>> >>>
-+    S<<< [B<-partition> <I<partition name>>] >>> [B<-summary>]
-+    S<<< [B<-cell> <I<cell name>>] >>>
-+    [B<-noauth>] [B<-localauth>]
-+    [B<-verbose>] [B<-encrypt>] [B<-noresolve>] [B<-help>]
-+
-+B<vos p> S<<< B<-se> <I<machine name>> >>>
-+    S<<< [B<-p> <I<partition name>>] >>> [B<-su>]
-+    S<<< [B<-c> <I<cell name>>] >>>
-+    [B<-noa>] [B<-l>] [B<-v>] [B<-e>] [B<-nor>] [B<-h>]
-+
-+=for html
-+</div>
-+
-+=head1 DESCRIPTION
-+
-+The vos partinfo command reports the amount of space available and total
-+size on either all of the partitions on the indicated file server machine
-+(if the B<-partition> argument is omitted) or the specified partition on
-+that file server machine. The Volume Location Database (VLDB) is not
-+consulted.
-+
-+=head1 CAUTIONS
-+
-+=include fragments/volsize-caution.pod
-+
-+=head1 OPTIONS
-+
-+=over 4
-+
-+=item B<-server> <I<server name>>
-+
-+Identifies the file server machine for which to display partition
-+information. Provide the machine's IP address or its host name (either
-+fully qualified or using an unambiguous abbreviation). For details, see
-+L<vos(1)>.
-+
-+=item B<-partition> <I<partition name>>
-+
-+Identifies which partition on the file server machine specified by the
-+B<-server> argument for which to display information. Provide the
-+partition's complete name with preceding slash (for example, C</vicepa>)
-+or use one of the three acceptable abbreviated forms. For details, see
-+L<vos(1)>.
-+
-+=item B<-summary>
-+
-+Prints storage summary.
-+
-+=item B<-cell> <I<cell name>>
-+
-+Names the cell in which to run the command. Do not combine this argument
-+with the B<-localauth> flag. For more details, see L<vos(1)>.
-+
-+=item B<-noauth>
-+
-+Assigns the unprivileged identity C<anonymous> to the issuer. Do not
-+combine this flag with the B<-localauth> flag. For more details, see
-+L<vos(1)>.
-+
-+=item B<-localauth>
-+
-+Constructs a server ticket using a key from the local
-+F</usr/afs/etc/KeyFile> file. The B<vos> command interpreter presents it
-+to the Volume Server and Volume Location Server during mutual
-+authentication. Do not combine this flag with the B<-cell> argument or
-+B<-noauth> flag. For more details, see L<vos(1)>.
-+
-+=item B<-verbose>
-+
-+Produces on the standard output stream a detailed trace of the command's
-+execution. If this argument is omitted, only warnings and error messages
-+appear.
-+
-+=item B<-encrypt>
-+
-+Encrypts the command so that the operation's results are not transmitted
-+across the network in clear text. This option is available in OpenAFS
-+versions 1.4.11 or later and 1.5.60 or later.
-+
-+=item B<-noresolve>
-+
-+Shows all servers as IP addresses instead of the DNS name. This is very
-+useful when the server address is registered as 127.0.0.1 or when dealing
-+with multi-homed servers. This option is available in OpenAFS
-+versions 1.4.8 or later and 1.5.35 or later.
-+
-+=item B<-help>
-+
-+Prints the online help for this command. All other valid options are
-+ignored.
-+
-+=back
-+
-+=head1 CAUTIONS
-+
-+The partition-related statistics in this command's output do not always
-+agree with the corresponding values in the output of the standard UNIX
-+B<df> command. The statistics reported by this command can be up to five
-+minutes old, because the Cache Manager polls the File Server for partition
-+information at that frequency. Also, on some operating systems, the B<df>
-+command's report of partition size includes reserved space not included in
-+this command's calculation, and so is likely to be about 10% larger.
-+
-+=head1 OUTPUT
-+
-+The output reports the amount of space available and total space for each
-+specified partition.
-+
-+=head1 EXAMPLES
-+
-+The following command displays all partitions on the file server machine
-+C<fs2.abc.com>.
-+
-+   % vos partinfo fs2.abc.com
-+   Free space on partition /vicepa: 27301 K blocks out of total 549197
-+   Free space on partition /vicepb: 13646 K blocks out of total 69194
-+   Free space on partition /vicepc: 31798 K blocks out of total 320315
-+   Free space on partition /vicepd: 33302 K blocks out of total 494954
-+
-+=head1 PRIVILEGE REQUIRED
-+
-+None
-+
-+=head1 SEE ALSO
-+
-+L<vos(1)>,
-+L<vos_listpart(1)>
-+
-+=head1 COPYRIGHT
-+
-+IBM Corporation 2000. <http://www.ibm.com/> All Rights Reserved.
-+
-+This documentation is covered by the IBM Public License Version 1.0.  It was
-+converted from HTML to POD by software written by Chas Williams and Russ
-+Allbery, based on work by Alf Wachsmann and Elizabeth Cassell.
-diff --git a/doc/man-pages/pod1/vos_shadow.pod b/doc/man-pages/pod1/vos_shadow.pod
-deleted file mode 100644
-index 4987ba2..0000000
---- a/doc/man-pages/pod1/vos_shadow.pod
-+++ /dev/null
-@@ -1,195 +0,0 @@
--=head1 NAME
--
--vos_shadow - Creates a shadow copy of a volume on a different server/partition
--
--=head1 SYNOPSIS
--
--=for html
--<div class="synopsis">
--
--B<vos shadow> S<<< [B<-id>] <I<volume name or ID on source>> >>>
--    S<<< [B<-fromserver>] <I<machine name on source>> >>>
--    S<<< [B<-frompartition>] <I<partition name on source>> >>>
--    S<<< [B<-toserver>] <I<machine name on destination>> >>>
--    S<<< [B<-topartition>] <I<partition name on destination>> >>>
--    S<<< [B<-toname> <I<volume name on destination>>] >>>
--    S<<< [B<-toid> <I<volume ID on destination>>] >>>
--    [B<-offline>] [B<-readonly>] [B<-live>] [B<-incremental>]
--    S<<< [B<-cell> <I<cell name>>] >>>
--    [B<-noauth>] [B<-localauth>]
--    [B<-verbose>] [B<-encrypt>] [B<-noresolve>] [B<-help>]
--
--B<vos sh> S<<< [B<-id>] <I<volume name or ID on source>> >>>
--    S<<< [B<-froms>] <I<machine name on source>> >>>
--    S<<< [B<-fromp>] <I<partition name on source>> >>>
--    S<<< [B<-tos>] <I<machine name on destination>> >>>
--    S<<< [B<-top>] <I<partition name on destination>> >>>
--    S<<< [B<-ton> <I<volume name on destination>>] >>>
--    S<<< [B<-toi> <I<volume ID on destination>>] >>>
--    [B<-o>] [B<-r>] [B<-l>] [B<-in>]
--    S<<< [B<-c> <I<cell name>>] >>>
--    [B<-noa>] [B<-lo>] [B<-v>] [B<-e>] [B<-nor>] [B<-h>]
--
--=for html
--</div>
--
--=head1 DESCRIPTION
--
--The B<vos shadow> command creates a shadow copy of a volume on a
--different partition or server.
--
--A shadow volume is a copy of a volume that does not normally appear in
--the volume location database (VLDB). It is a primitive operation that
--is meant to be used in backup or disaster recovery situations.
--
--=head1 CAUTIONS
--
--This command is not used during normal OpenAFS administration and may
--have adverse effects on the VLDB if not used properly! This command
--should only be used by an expert.
--
--Using this command on a volume when the source volume is not the same
--as parent volume used to create the shadow will leave the destination
--volume in a unknown state.
--
--Do NOT run the B<vos syncserv> or B<vos syncvldb> on any fileserver
--containing shadow volumes. This would update the VLDB to show all
--shadowed Read/Write volumes instead of the source volumes from which
--they were copied.
--
--Currently, the maximum size of a volume is 2 terabytes (2^31 bytes).
--
--=head1 OPTIONS
--
--=over 4
--
--=item [B<-id>] <I<volume name or ID>>
--
--Specifies either the complete name or volume ID number of a read/write
--volume.
--
--=item [B<-fromserver>] <I<machine name for source>>
--
--Identifies the file server machine where the source volume resides. Provide
--the machine's IP address or its host name (either fully qualified or using
--an unambiguous abbreviation). For details, see L<vos(1)>.
--
--=item [B<-frompartition>] <I<partition name for source>>
--
--Names the partition where the source volume resides. Provide the full
--partition name (for, example, B</vicepa>) or one of the abbreviated forms
--described in L<vos(1)>.
--
--=item [B<-toserver>] <I<machine name for destination>>
--
--Identifies the file server machine to which to copy the volume.  Provide
--the machine's IP address or its host name (either fully qualified or using
--an unambiguous abbreviation). For details, see L<vos(1)>.
--
--=item [B<-topartition>] <I<partition name for destination>>
--
--Names the partition to which to copy the volume. Provide the full partition
--name (for, example, B</vicepa>) or one of the abbreviated forms described in
--L<vos(1)>.
--
--=item B<-toname> <I<volume name for new copy>>
--
--The complete name of the new volume to create.
--
--=item B<-offline>
--
--Leaves the new volume flagged as off-line in the volume database.
--
--=item B<-readonly>
--
--Flags the new volume as read-only in the volume database.
--
--=item B<-live>
--
--Copies the live volume without cloning.  This is normally not necessary and
--causes the volume to be kept locked for longer than the normal copy
--mechanism.
--
--=item B<-incremental>
--
--Copy the changes from the source volume to a previously created shadow
--volume.
--
--=item B<-cell> <I<cell name>>
--
--Names the cell in which to run the command. Do not combine this argument
--with the B<-localauth> flag. For more details, see L<vos(1)>.
--
--=item B<-noauth>
--
--Assigns the unprivileged identity C<anonymous> to the issuer. Do not
--combine this flag with the B<-localauth> flag. For more details, see
--L<vos(1)>.
--
--=item B<-localauth>
--
--Constructs a server ticket using a key from the local
--F</usr/afs/etc/KeyFile> file. The B<vos> command interpreter presents
--it to the Volume Server and Volume Location Server during mutual
--authentication. Do not combine this flag with the B<-cell> argument or
--B<-noauth> flag. For more details, see L<vos(1)>.
--
--=item B<-verbose>
--
--Produces on the standard output stream a detailed trace of the command's
--execution. If this argument is omitted, only warnings and error messages
--appear.
--
--=item B<-encrypt>
--
--Encrypts the command so that the operation's results are not transmitted
--across the network in clear text. This option is available in OpenAFS
--versions 1.4.11 or later and 1.5.60 or later.
--
--=item B<-noresolve>
--
--Shows all servers as IP addresses instead of the DNS name. This is very
--useful when the server address is registered as 127.0.0.1 or when dealing
--with multi-homed servers. This option is available in OpenAFS
--versions 1.4.8 or later and 1.5.35 or later.
--
--=item B<-help>
--
--Prints the online help for this command. All other valid options are
--ignored.
--
--=back
--
--=head1 OUTPUT
--
--This command has no output unless C<-verbose> is specified or there is
--an error.
--
--=head1 PRIVILEGE REQUIRED
--
--The issuer must be listed in the F</usr/afs/etc/UserList> file on the
--machines specified with the B<-toserver> and B<-fromserver> arguments and
--on each database server machine.  If the B<-localauth> flag is included,
--the issuer must instead be logged on to a server machine as the local
--superuser C<root>.
--
--=head1 SEE ALSO
--
--L<vos(1)>,
--L<vos_backup(1)>,
--L<vos_copy(1)>,
--L<vos_move(1)>
--
--L<http://www.openafs.org/pipermail/openafs-info/2005-July/018469.html>
--discusses motivation for the creation of this command.
--
--L<http://workshop.openafs.org/afsbpw06/talks/drh.scs.html> discusses
--one possible use for it.
--
--=head1 COPYRIGHT
--
--Copyright 2008 Jason Edgecombe <jason@rampaginggeek.com>
--
--This documentation is covered by the BSD License as written in the
--doc/LICENSE file. This man page was written by Jason Edgecombe for
--OpenAFS.
-diff --git a/doc/man-pages/pod1/vos_shadow.pod.in b/doc/man-pages/pod1/vos_shadow.pod.in
-new file mode 100644
-index 0000000..3852151
---- /dev/null
-+++ b/doc/man-pages/pod1/vos_shadow.pod.in
-@@ -0,0 +1,195 @@
-+=head1 NAME
-+
-+vos_shadow - Creates a shadow copy of a volume on a different server/partition
-+
-+=head1 SYNOPSIS
-+
-+=for html
-+<div class="synopsis">
-+
-+B<vos shadow> S<<< [B<-id>] <I<volume name or ID on source>> >>>
-+    S<<< [B<-fromserver>] <I<machine name on source>> >>>
-+    S<<< [B<-frompartition>] <I<partition name on source>> >>>
-+    S<<< [B<-toserver>] <I<machine name on destination>> >>>
-+    S<<< [B<-topartition>] <I<partition name on destination>> >>>
-+    S<<< [B<-toname> <I<volume name on destination>>] >>>
-+    S<<< [B<-toid> <I<volume ID on destination>>] >>>
-+    [B<-offline>] [B<-readonly>] [B<-live>] [B<-incremental>]
-+    S<<< [B<-cell> <I<cell name>>] >>>
-+    [B<-noauth>] [B<-localauth>]
-+    [B<-verbose>] [B<-encrypt>] [B<-noresolve>] [B<-help>]
-+
-+B<vos sh> S<<< [B<-id>] <I<volume name or ID on source>> >>>
-+    S<<< [B<-froms>] <I<machine name on source>> >>>
-+    S<<< [B<-fromp>] <I<partition name on source>> >>>
-+    S<<< [B<-tos>] <I<machine name on destination>> >>>
-+    S<<< [B<-top>] <I<partition name on destination>> >>>
-+    S<<< [B<-ton> <I<volume name on destination>>] >>>
-+    S<<< [B<-toi> <I<volume ID on destination>>] >>>
-+    [B<-o>] [B<-r>] [B<-l>] [B<-in>]
-+    S<<< [B<-c> <I<cell name>>] >>>
-+    [B<-noa>] [B<-lo>] [B<-v>] [B<-e>] [B<-nor>] [B<-h>]
-+
-+=for html
-+</div>
-+
-+=head1 DESCRIPTION
-+
-+The B<vos shadow> command creates a shadow copy of a volume on a
-+different partition or server.
-+
-+A shadow volume is a copy of a volume that does not normally appear in
-+the volume location database (VLDB). It is a primitive operation that
-+is meant to be used in backup or disaster recovery situations.
-+
-+=head1 CAUTIONS
-+
-+This command is not used during normal OpenAFS administration and may
-+have adverse effects on the VLDB if not used properly! This command
-+should only be used by an expert.
-+
-+Using this command on a volume when the source volume is not the same
-+as parent volume used to create the shadow will leave the destination
-+volume in a unknown state.
-+
-+Do NOT run the B<vos syncserv> or B<vos syncvldb> on any fileserver
-+containing shadow volumes. This would update the VLDB to show all
-+shadowed Read/Write volumes instead of the source volumes from which
-+they were copied.
-+
-+=include fragments/volsize-caution.pod
-+
-+=head1 OPTIONS
-+
-+=over 4
-+
-+=item [B<-id>] <I<volume name or ID>>
-+
-+Specifies either the complete name or volume ID number of a read/write
-+volume.
-+
-+=item [B<-fromserver>] <I<machine name for source>>
-+
-+Identifies the file server machine where the source volume resides. Provide
-+the machine's IP address or its host name (either fully qualified or using
-+an unambiguous abbreviation). For details, see L<vos(1)>.
-+
-+=item [B<-frompartition>] <I<partition name for source>>
-+
-+Names the partition where the source volume resides. Provide the full
-+partition name (for, example, B</vicepa>) or one of the abbreviated forms
-+described in L<vos(1)>.
-+
-+=item [B<-toserver>] <I<machine name for destination>>
-+
-+Identifies the file server machine to which to copy the volume.  Provide
-+the machine's IP address or its host name (either fully qualified or using
-+an unambiguous abbreviation). For details, see L<vos(1)>.
-+
-+=item [B<-topartition>] <I<partition name for destination>>
-+
-+Names the partition to which to copy the volume. Provide the full partition
-+name (for, example, B</vicepa>) or one of the abbreviated forms described in
-+L<vos(1)>.
-+
-+=item B<-toname> <I<volume name for new copy>>
-+
-+The complete name of the new volume to create.
-+
-+=item B<-offline>
-+
-+Leaves the new volume flagged as off-line in the volume database.
-+
-+=item B<-readonly>
-+
-+Flags the new volume as read-only in the volume database.
-+
-+=item B<-live>
-+
-+Copies the live volume without cloning.  This is normally not necessary and
-+causes the volume to be kept locked for longer than the normal copy
-+mechanism.
-+
-+=item B<-incremental>
-+
-+Copy the changes from the source volume to a previously created shadow
-+volume.
-+
-+=item B<-cell> <I<cell name>>
-+
-+Names the cell in which to run the command. Do not combine this argument
-+with the B<-localauth> flag. For more details, see L<vos(1)>.
-+
-+=item B<-noauth>
-+
-+Assigns the unprivileged identity C<anonymous> to the issuer. Do not
-+combine this flag with the B<-localauth> flag. For more details, see
-+L<vos(1)>.
-+
-+=item B<-localauth>
-+
-+Constructs a server ticket using a key from the local
-+F</usr/afs/etc/KeyFile> file. The B<vos> command interpreter presents
-+it to the Volume Server and Volume Location Server during mutual
-+authentication. Do not combine this flag with the B<-cell> argument or
-+B<-noauth> flag. For more details, see L<vos(1)>.
-+
-+=item B<-verbose>
-+
-+Produces on the standard output stream a detailed trace of the command's
-+execution. If this argument is omitted, only warnings and error messages
-+appear.
-+
-+=item B<-encrypt>
-+
-+Encrypts the command so that the operation's results are not transmitted
-+across the network in clear text. This option is available in OpenAFS
-+versions 1.4.11 or later and 1.5.60 or later.
-+
-+=item B<-noresolve>
-+
-+Shows all servers as IP addresses instead of the DNS name. This is very
-+useful when the server address is registered as 127.0.0.1 or when dealing
-+with multi-homed servers. This option is available in OpenAFS
-+versions 1.4.8 or later and 1.5.35 or later.
-+
-+=item B<-help>
-+
-+Prints the online help for this command. All other valid options are
-+ignored.
-+
-+=back
-+
-+=head1 OUTPUT
-+
-+This command has no output unless C<-verbose> is specified or there is
-+an error.
-+
-+=head1 PRIVILEGE REQUIRED
-+
-+The issuer must be listed in the F</usr/afs/etc/UserList> file on the
-+machines specified with the B<-toserver> and B<-fromserver> arguments and
-+on each database server machine.  If the B<-localauth> flag is included,
-+the issuer must instead be logged on to a server machine as the local
-+superuser C<root>.
-+
-+=head1 SEE ALSO
-+
-+L<vos(1)>,
-+L<vos_backup(1)>,
-+L<vos_copy(1)>,
-+L<vos_move(1)>
-+
-+L<http://www.openafs.org/pipermail/openafs-info/2005-July/018469.html>
-+discusses motivation for the creation of this command.
-+
-+L<http://workshop.openafs.org/afsbpw06/talks/drh.scs.html> discusses
-+one possible use for it.
-+
-+=head1 COPYRIGHT
-+
-+Copyright 2008 Jason Edgecombe <jason@rampaginggeek.com>
-+
-+This documentation is covered by the BSD License as written in the
-+doc/LICENSE file. This man page was written by Jason Edgecombe for
-+OpenAFS.
-diff --git a/doc/man-pages/pod5/NetRestrict.pod b/doc/man-pages/pod5/NetRestrict.pod
-index e69b579..be527fc 100644
---- a/doc/man-pages/pod5/NetRestrict.pod
-+++ b/doc/man-pages/pod5/NetRestrict.pod
-@@ -11,6 +11,13 @@ File Servers it connects to.  The server F<NetRestrict> file specifies
- what interfaces should not be registered with AFS Database Servers or used
- to talk to other database servers.
- 
-+=head2 FORMAT
-+
-+The F<NetRestrict> file is in ASCII format. One IP address appears on each
-+line, in dotted decimal format. The order of the addresses is not
-+significant. There is currently no mechanism to specify a range of
-+addresses or a wildcard; each IP address must be listed individually.
-+
- =head2 Client NetRestrict
- 
- The F<NetRestrict> file, if present in a client machine's F</usr/vice/etc>
-@@ -28,10 +35,7 @@ list in kernel memory.
- 
- The F<NetRestrict> file is in ASCII format. One IP address appears on each
- line, in dotted decimal format. The order of the addresses is not
--significant. The value C<255> is a wildcard that represents all possible
--addresses in that field. For example, the value C<192.12.105.255>
--indicates that the Cache Manager does not register any of the addresses in
--the C<192.12.105> subnet.
-+significant.
- 
- To display the addresses the Cache Manager is currently registering with
- File Servers, use the B<fs getclientaddrs> command.
-@@ -67,10 +71,6 @@ the VLDB. The database server processes use a similar procedure when
- initializing, to determine which interfaces to use for communication with
- the peer processes on other database machines in the cell.
- 
--The F<NetRestrict> file is in ASCII format. One IP address appears on each
--line, in dotted decimal format. The order of the addresses is not
--significant. 
--
- To display the File Server interface addresses registered in the VLDB, use
- the B<vos listaddrs> command.
- 
-diff --git a/doc/man-pages/pod8/fragments/fileserver-cautions.pod b/doc/man-pages/pod8/fragments/fileserver-cautions.pod
-index 01c7db5..5d9230a 100644
---- a/doc/man-pages/pod8/fragments/fileserver-cautions.pod
-+++ b/doc/man-pages/pod8/fragments/fileserver-cautions.pod
-@@ -28,7 +28,7 @@ Options that are available only on some system types, such as the B<-m>
- and B<-lock> options, appear in the output generated by the B<-help>
- option only on the relevant system type.
- 
--Currently, the maximum size of a volume is 2 terabytes (2^31 bytes)
-+Currently, the maximum size of a volume quota is 2 terabytes (2^41 bytes)
- and the maximum size of a /vicepX partition on a fileserver is 2^64
- kilobytes. The maximum partition size in releases 1.4.7 and earlier is
- 2 terabytes (2^31 bytes). The maximum partition size for 1.5.x
-diff --git a/doc/txt/winnotes/afs-changes-since-1.2.txt b/doc/txt/winnotes/afs-changes-since-1.2.txt
-index 9e53feb..1190360 100644
---- a/doc/txt/winnotes/afs-changes-since-1.2.txt
-+++ b/doc/txt/winnotes/afs-changes-since-1.2.txt
-@@ -1,3 +1,15 @@
-+Since 1.6.0103 (1.6.1pre4)
-+
-+ * Revert Win7 SMB Reconnect Bug Workaround
-+
-+  The workaround breaks systems where "afs.<fqdn>" is a valid
-+  DNS name or systems joined to an AD domain but unable to
-+  connect to the AD servers.
-+
-+ * VNOSERVICE errors should not result in the file server
-+   or the volume being marked offline.  Instead the RPC should
-+   be retried.
-+
- Since 1.6.0102 (1.6.1pre3)
- 
-  * Workaround Win7 SMB Reconnect Bug
-diff --git a/src/WINNT/afsd/cm_conn.c b/src/WINNT/afsd/cm_conn.c
-index f6a644e..00edbba 100644
---- a/src/WINNT/afsd/cm_conn.c
-+++ b/src/WINNT/afsd/cm_conn.c
-@@ -838,7 +838,8 @@ cm_Analyze(cm_conn_t *connp,
-                         ((serverp->addr.sin_addr.s_addr & 0xff0000)>> 16),
-                         ((serverp->addr.sin_addr.s_addr & 0xff000000)>> 24));
- 
--            LogEvent(EVENTLOG_WARNING_TYPE, MSG_SERVER_REPORTS_VNOSERVICE, addr);
-+            LogEvent(EVENTLOG_WARNING_TYPE, MSG_SERVER_REPORTS_VNOSERVICE,
-+                     addr, fidp->volume, cellp->name);
-             osi_Log1(afsd_logp, "Server %s reported volume %d in cell %s as not in service.",
-                      osi_LogSaveString(afsd_logp,addr), fidp->volume, cellp->name);
-         }
-diff --git a/src/WINNT/bosctlsvc/bosctlsvc.c b/src/WINNT/bosctlsvc/bosctlsvc.c
-index 475d7ac..0a93e6b 100644
---- a/src/WINNT/bosctlsvc/bosctlsvc.c
-+++ b/src/WINNT/bosctlsvc/bosctlsvc.c
-@@ -35,7 +35,6 @@
- 
- #define BOSSERVER_STARTMSG_EXE  "afslegal.exe"
- 
--#define BOSSERVER_RESTART_ARG_MAX  3  /* "-noauth", "-log", "-rxbind" */
- #define BOSSERVER_WAIT_TIME_HINT  60  /* seconds */
- #define BOSSERVER_STOP_TIME_MAX  (FSSDTIME + 60)  /* seconds */
- 
-@@ -76,7 +75,6 @@ static void BosserverDoStopEvent(pid_t cpid,
- static void BosserverDoExitEvent(pid_t cpid,
- 				 BOOL *doWait,
- 				 BOOL *doRestart,
--				 char **restartArgv,
- 				 DWORD *stopStatus,
- 				 BOOL *isWin32Code);
- 
-@@ -382,7 +380,6 @@ static void
- BosserverDoExitEvent(pid_t cpid,
- 		     BOOL *doWait,
- 		     BOOL *doRestart,
--		     char **restartArgv,
- 		     DWORD *stopStatus,
- 		     BOOL *isWin32Code)
- {
-@@ -402,27 +399,6 @@ BosserverDoExitEvent(pid_t cpid,
- 		/* bosserver requests restart */
- 		int i;
- 		*doRestart = TRUE;
--
--		/* set up bosserver argument list */
--		restartArgv[0] = (char *)AFSDIR_SERVER_BOSVR_FILEPATH;
--		i = 1;
--
--		if (exitCode & BOSEXIT_NOAUTH_FLAG) {
--		    /* pass "-noauth" to new bosserver */
--		    restartArgv[i] = "-noauth";
--		    i++;
--		}
--		if (exitCode & BOSEXIT_LOGGING_FLAG) {
--		    /* pass "-log" to new bosserver */
--		    restartArgv[i] = "-log";
--		    i++;
--		}
--		if (exitCode & BOSEXIT_RXBIND_FLAG) {
--		    /* pass "-rxbind" to new bosserver */
--		    restartArgv[i] = "-rxbind";
--		    i++;
--		}
--		restartArgv[i] = NULL;
- 	    }
- 	}
- 
-@@ -464,9 +440,8 @@ BosserverRun(DWORD argc,
-     /* Set env variable forcing process mgmt lib to spawn processes detached */
-     (void)putenv(PMGT_SPAWN_DETACHED_ENV_NAME "=1");
- 
--    /* Alloc block with room for at least BOSSERVER_RESTART_ARG_MAX args */
--    i = max((argc + 1), (BOSSERVER_RESTART_ARG_MAX + 2));
--    spawn_argv = (char **)malloc(i * sizeof(char *));
-+    /* Alloc block with room for arguments plus a terminator */
-+    spawn_argv = (char **)malloc((argc + 1) * sizeof(char *));
- 
-     if (spawn_argv == NULL) {
- 	/* failed to malloc required space; can not continue */
-@@ -536,7 +511,7 @@ BosserverRun(DWORD argc,
- 		/* exit event signaled; see function comment for outcomes */
- 		BosserverDoExitEvent(cpid,
- 				     &doWait,
--				     &doRestart, spawn_argv,
-+				     &doRestart,
- 				     stopStatus, isWin32Code);
- 
- 	    } else {
-diff --git a/src/afs/AIX/osi_file.c b/src/afs/AIX/osi_file.c
-index 37df330..7ecaaf2 100644
---- a/src/afs/AIX/osi_file.c
-+++ b/src/afs/AIX/osi_file.c
-@@ -164,7 +164,7 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr,
- 	if (!afs_shuttingdown)
- 	    osi_Panic("osi_Read called with null param");
- 	else
--	    return EIO;
-+	    return -EIO;
-     }
- 
-     if (offset != -1)
-@@ -198,7 +198,9 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr,
- 	    goto retry_IO;
- 	}
- 	setuerror(code);
--	code = -1;
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-     }
-     return code;
- }
-@@ -241,7 +243,9 @@ afs_osi_Write(struct osi_file *afile, afs_int32 offset, void *aptr,
- 	    afs_warnuser
- 		("\n\n\n*** Cache partition is FULL - Decrease cachesize!!! ***\n\n");
- 	setuerror(code);
--	code = -1;
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-     }
-     if (afile->proc) {
- 	(*afile->proc) (afile, code);
-diff --git a/src/afs/AIX/osi_vcache.c b/src/afs/AIX/osi_vcache.c
-index debb1c8..b61d466 100644
---- a/src/afs/AIX/osi_vcache.c
-+++ b/src/afs/AIX/osi_vcache.c
-@@ -31,7 +31,8 @@ struct vcache *
- osi_NewVnode(void) {
-     struct vcache *tvc;
- 
--    tvc = (struct vcache *)afs_osi_Alloc(sizeof(struct vcache));
-+    tvc = afs_osi_Alloc(sizeof(struct vcache));
-+    osi_Assert(tvc != NULL);
- 
- #ifdef	KERNEL_HAVE_PIN
-     pin((char *)tvc, sizeof(struct vcache));	/* XXX */
-diff --git a/src/afs/DARWIN/osi_file.c b/src/afs/DARWIN/osi_file.c
-index 4012ff7..bc271f0 100644
---- a/src/afs/DARWIN/osi_file.c
-+++ b/src/afs/DARWIN/osi_file.c
-@@ -321,7 +321,7 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr,
- 	if (!afs_shuttingdown)
- 	    osi_Panic("osi_Read called with null param");
- 	else
--	    return EIO;
-+	    return -EIO;
-     }
- 
-     if (offset != -1)
-@@ -346,7 +346,9 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr,
-     } else {
- 	afs_Trace2(afs_iclSetp, CM_TRACE_READFAILED, ICL_TYPE_INT32, resid,
- 		   ICL_TYPE_INT32, code);
--	code = -1;
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-     }
-     return code;
- }
-@@ -387,7 +389,9 @@ afs_osi_Write(struct osi_file *afile, afs_int32 offset, void *aptr,
- 	code = asize - resid;
- 	afile->offset += code;
-     } else {
--	code = -1;
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-     }
-     if (afile->proc) {
- 	(*afile->proc) (afile, code);
-diff --git a/src/afs/DARWIN/osi_module.c b/src/afs/DARWIN/osi_module.c
-index 020518b..f254ccf 100644
---- a/src/afs/DARWIN/osi_module.c
-+++ b/src/afs/DARWIN/osi_module.c
-@@ -115,6 +115,8 @@ afs_modunload(struct kmod_info * kmod_info, void *data)
- {
-     if (afs_globalVFS)
- 	return KERN_FAILURE;
-+    if ((afs_initState != 0) || (afs_shuttingdown))
-+	return KERN_FAILURE;
- #ifdef AFS_DARWIN80_ENV
-     if (vfs_fsremove(afs_vfstable))
- 	return KERN_FAILURE;
-diff --git a/src/afs/DARWIN/osi_vcache.c b/src/afs/DARWIN/osi_vcache.c
-index ee4b28e..18d8d9a 100644
---- a/src/afs/DARWIN/osi_vcache.c
-+++ b/src/afs/DARWIN/osi_vcache.c
-@@ -17,7 +17,8 @@ struct vcache *
- osi_NewVnode(void) {
-     struct vcache *tvc;
- 
--    tvc = (struct vcache *)afs_osi_Alloc(sizeof(struct vcache));
-+    tvc = afs_osi_Alloc(sizeof(struct vcache));
-+    osi_Assert(tvc != NULL);
-     tvc->v = NULL; /* important to clean this, or use memset 0 */
- 
-     return tvc;
-diff --git a/src/afs/FBSD/osi_file.c b/src/afs/FBSD/osi_file.c
-index 02fe253..7c695d6 100644
---- a/src/afs/FBSD/osi_file.c
-+++ b/src/afs/FBSD/osi_file.c
-@@ -170,7 +170,7 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr,
- 	if (!afs_shuttingdown)
- 	    osi_Panic("osi_Read called with null param");
- 	else
--	    return EIO;
-+	    return -EIO;
-     }
- 
-     if (offset != -1)
-@@ -187,7 +187,9 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr,
-     } else {
- 	afs_Trace2(afs_iclSetp, CM_TRACE_READFAILED, ICL_TYPE_INT32, resid,
- 		   ICL_TYPE_INT32, code);
--	code = -1;
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-     }
-     return code;
- }
-@@ -216,7 +218,9 @@ afs_osi_Write(struct osi_file *afile, afs_int32 offset, void *aptr,
- 	code = asize - resid;
- 	afile->offset += code;
-     } else {
--	code = -1;
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-     }
-     if (afile->proc) {
- 	(*afile->proc) (afile, code);
-diff --git a/src/afs/FBSD/osi_misc.c b/src/afs/FBSD/osi_misc.c
-index 2ece43d..5fdd461 100644
---- a/src/afs/FBSD/osi_misc.c
-+++ b/src/afs/FBSD/osi_misc.c
-@@ -31,13 +31,15 @@ osi_lookupname(char *aname, enum uio_seg seg, int followlink,
-     if (glocked)
- 	AFS_GUNLOCK();
- 
--    flags = 0;
-+#if __FreeBSD_version >= 1000021 /* MPSAFE is gone for good! */
-     flags = LOCKLEAF;
-+#else
-+    flags = LOCKLEAF | MPSAFE; /* namei must take Giant if needed */
-+#endif
-     if (followlink)
- 	flags |= FOLLOW;
-     else
- 	flags |= NOFOLLOW;
--    flags |= MPSAFE; /* namei must take Giant if needed */
-     NDINIT(&n, LOOKUP, flags, seg, aname, curthread);
-     if ((error = namei(&n)) != 0) {
- 	if (glocked)
-diff --git a/src/afs/FBSD/osi_vfsops.c b/src/afs/FBSD/osi_vfsops.c
-index b300ff4..3311e94 100644
---- a/src/afs/FBSD/osi_vfsops.c
-+++ b/src/afs/FBSD/osi_vfsops.c
-@@ -135,7 +135,9 @@ afs_omount(struct mount *mp, char *path, caddr_t data, struct nameidata *ndp,
- #if defined(AFS_FBSD61_ENV) && !defined(AFS_FBSD62_ENV)
-     MNT_ILOCK(mp);
- #endif
-+#if __FreeBSD_version < 1000021
-     mp->mnt_kern_flag |= MNTK_MPSAFE; /* solid steel */
-+#endif
- #ifndef AFS_FBSD61_ENV
-     MNT_ILOCK(mp);
- #endif
-diff --git a/src/afs/FBSD/osi_vnodeops.c b/src/afs/FBSD/osi_vnodeops.c
-index 11d8cfe..01498fa 100644
---- a/src/afs/FBSD/osi_vnodeops.c
-+++ b/src/afs/FBSD/osi_vnodeops.c
-@@ -501,7 +501,9 @@ afs_vop_lookup(ap)
-     lockparent = flags & LOCKPARENT;
-     wantparent = flags & (LOCKPARENT | WANTPARENT);
- 
-+#if __FreeBSD_version < 1000021
-     cnp->cn_flags |= MPSAFE; /* steel */
-+#endif
- 
-     if (flags & ISDOTDOT)
- 	MA_VOP_UNLOCK(dvp, 0, p);
-diff --git a/src/afs/HPUX/osi_file.c b/src/afs/HPUX/osi_file.c
-index 1bba21f..59c2594 100644
---- a/src/afs/HPUX/osi_file.c
-+++ b/src/afs/HPUX/osi_file.c
-@@ -150,7 +150,7 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr,
- 	if (!afs_shuttingdown)
- 	    osi_Panic("osi_Read called with null param");
- 	else
--	    return EIO;
-+	    return -EIO;
-     }
- 
-     if (offset != -1)
-@@ -177,7 +177,9 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr,
- 	    goto retry_IO;
- 	}
- 	setuerror(code);
--	code = -1;
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-     }
-     return code;
- }
-@@ -208,7 +210,9 @@ afs_osi_Write(struct osi_file *afile, afs_int32 offset, void *aptr,
- 	    afs_warnuser
- 		("\n\n\n*** Cache partition is FULL - Decrease cachesize!!! ***\n\n");
- 	setuerror(code);
--	code = -1;
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-     }
-     if (afile->proc) {
- 	(*afile->proc) (afile, code);
-diff --git a/src/afs/IRIX/osi_file.c b/src/afs/IRIX/osi_file.c
-index 1800d75..8698493 100644
---- a/src/afs/IRIX/osi_file.c
-+++ b/src/afs/IRIX/osi_file.c
-@@ -144,7 +144,7 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr,
- 	if (!afs_shuttingdown)
- 	    osi_Panic("osi_Read called with null param");
- 	else
--	    return EIO;
-+	    return -EIO;
-     }
- 
-     if (offset != -1)
-@@ -160,7 +160,9 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr,
-     } else {
- 	afs_Trace2(afs_iclSetp, CM_TRACE_READFAILED, ICL_TYPE_INT32, resid,
- 		   ICL_TYPE_INT32, code);
--	code = -1;
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-     }
-     return code;
- }
-@@ -191,7 +193,9 @@ afs_osi_Write(struct osi_file *afile, afs_int32 offset, void *aptr,
- 	if (code == ENOSPC)
- 	    afs_warnuser
- 		("\n\n\n*** Cache partition is FULL - Decrease cachesize!!! ***\n\n");
--	code = -1;
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-     }
-     if (afile->proc) {
- 	(*afile->proc) (afile, code);
-diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h
-index b94295c..c6d9002 100644
---- a/src/afs/LINUX/osi_compat.h
-+++ b/src/afs/LINUX/osi_compat.h
-@@ -333,7 +333,11 @@ afs_get_dentry_from_fh(struct super_block *afs_cacheSBp, afs_dcache_id_t *ainode
- static inline int
- afs_get_fh_from_dentry(struct dentry *dp, afs_ufs_dcache_id_t *ainode, int *max_lenp) {
-     if (dp->d_sb->s_export_op->encode_fh)
-+#if defined(EXPORT_OP_ENCODE_FH_TAKES_INODES)
-+        return dp->d_sb->s_export_op->encode_fh(dp->d_inode, &ainode->raw[0], max_lenp, NULL);
-+#else
-         return dp->d_sb->s_export_op->encode_fh(dp, &ainode->raw[0], max_lenp, 0);
-+#endif
- #if defined(NEW_EXPORT_OPS)
-     /* If fs doesn't provide an encode_fh method, assume the default INO32 type */
-     *max_lenp = sizeof(struct fid)/4;
-@@ -441,4 +445,56 @@ afs_get_dentry_ref(struct path *path, struct vfsmount **mnt, struct dentry **dpp
- #endif
- }
- 
-+#if defined(STRUCT_TASK_STRUCT_HAS_CRED)
-+static inline struct file *
-+afs_dentry_open(struct dentry *dp, struct vfsmount *mnt, int flags, const struct cred *creds) {
-+#if defined(DENTRY_OPEN_TAKES_PATH)
-+    struct path path;
-+    struct file *filp;
-+    path.mnt = mnt;
-+    path.dentry = dp;
-+    filp = dentry_open(&path, flags, creds);
-+    return filp;
-+#else
-+    return dentry_open(dp, mntget(mnt), flags, creds);
-+#endif
-+}
-+#endif
-+
-+#if defined(HAVE_LINUX_PUTNAME)
-+typedef char *afs_name_t;
-+
-+static inline char *
-+afs_name_to_string(afs_name_t s) {
-+    return (char *)s;
-+}
-+
-+static inline void
-+afs_putname(afs_name_t name) {
-+    putname((char *)name);
-+}
-+
-+static inline void
-+afs_set_name(afs_name_t name, char *string) {
-+    name = string;
-+}
-+#else
-+typedef struct filename *afs_name_t;
-+
-+static inline char *
-+afs_name_to_string(afs_name_t s) {
-+    return (char *)s->name;
-+}
-+
-+static inline void
-+afs_putname(afs_name_t name) {
-+    kmem_cache_free(names_cachep, (void *)name);
-+}
-+
-+static inline void
-+afs_set_name(afs_name_t aname, char *string) {
-+    aname->name = string;
-+}
-+#endif
-+
- #endif /* AFS_LINUX_OSI_COMPAT_H */
-diff --git a/src/afs/LINUX/osi_file.c b/src/afs/LINUX/osi_file.c
-index 3c20fd9..01cc42f 100644
---- a/src/afs/LINUX/osi_file.c
-+++ b/src/afs/LINUX/osi_file.c
-@@ -56,9 +56,9 @@ afs_linux_raw_open(afs_dcache_id_t *ainode)
- 
- #if defined(STRUCT_TASK_STRUCT_HAS_CRED)
-     /* Use stashed credentials - prevent selinux/apparmor problems  */
--    filp = dentry_open(dp, mntget(afs_cacheMnt), O_RDWR, cache_creds);
-+    filp = afs_dentry_open(dp, mntget(afs_cacheMnt), O_RDWR, cache_creds);
-     if (IS_ERR(filp))
--	filp = dentry_open(dp, mntget(afs_cacheMnt), O_RDWR, current_cred());
-+	filp = afs_dentry_open(dp, mntget(afs_cacheMnt), O_RDWR, current_cred());
- #else
-     filp = dentry_open(dp, mntget(afs_cacheMnt), O_RDWR);
- #endif
-@@ -216,7 +216,7 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr,
- 	if (!afs_shuttingdown)
- 	    osi_Panic("osi_Read called with null param");
- 	else
--	    return EIO;
-+	    return -EIO;
-     }
- 
-     if (offset != -1)
-@@ -231,7 +231,9 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr,
-     } else {
- 	afs_Trace2(afs_iclSetp, CM_TRACE_READFAILED, ICL_TYPE_INT32, auio.uio_resid,
- 		   ICL_TYPE_INT32, code);
--	code = -1;
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-     }
-     return code;
- }
-@@ -251,7 +253,7 @@ afs_osi_Write(struct osi_file *afile, afs_int32 offset, void *aptr,
- 	if (!afs_shuttingdown)
- 	    osi_Panic("afs_osi_Write called with null param");
- 	else
--	    return EIO;
-+	    return -EIO;
-     }
- 
-     if (offset != -1)
-@@ -267,7 +269,9 @@ afs_osi_Write(struct osi_file *afile, afs_int32 offset, void *aptr,
- 	if (code == ENOSPC)
- 	    afs_warnuser
- 		("\n\n\n*** Cache partition is FULL - Decrease cachesize!!! ***\n\n");
--	code = -1;
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-     }
- 
-     if (afile->proc)
-diff --git a/src/afs/LINUX/osi_misc.c b/src/afs/LINUX/osi_misc.c
-index fb740db..6ae6c1b 100644
---- a/src/afs/LINUX/osi_misc.c
-+++ b/src/afs/LINUX/osi_misc.c
-@@ -78,22 +78,25 @@ osi_lookupname_internal(char *aname, int followlink, struct vfsmount **mnt,
- }
- 
- int
--osi_lookupname(char *aname, uio_seg_t seg, int followlink, 
-+osi_lookupname(char *aname, uio_seg_t seg, int followlink,
- 	       struct dentry **dpp)
- {
-     int code;
--    char *tname;
-+    afs_name_t tname = NULL;
-+    char *name;
-+
-     code = ENOENT;
-     if (seg == AFS_UIOUSER) {
--        tname = getname(aname);
--        if (IS_ERR(tname)) 
--            return PTR_ERR(tname);
-+	tname = getname(aname);
-+	if (IS_ERR(tname))
-+	    return PTR_ERR(tname);
-+	name = afs_name_to_string(tname);
-     } else {
--        tname = aname;
-+	name = aname;
-     }
--    code = osi_lookupname_internal(tname, followlink, NULL, dpp);   
-+    code = osi_lookupname_internal(name, followlink, NULL, dpp);
-     if (seg == AFS_UIOUSER) {
--        putname(tname);
-+	afs_putname(tname);
-     }
-     return code;
- }
-@@ -103,14 +106,15 @@ int osi_abspath(char *aname, char *buf, int buflen,
- {
-     struct dentry *dp = NULL;
-     struct vfsmount *mnt = NULL;
--    char *tname, *path;
-+    afs_name_t tname;
-+    char *path;
-     int code;
- 
-     code = ENOENT;
-     tname = getname(aname);
--    if (IS_ERR(tname)) 
-+    if (IS_ERR(tname))
- 	return -PTR_ERR(tname);
--    code = osi_lookupname_internal(tname, followlink, &mnt, &dp);   
-+    code = osi_lookupname_internal(afs_name_to_string(tname), followlink, &mnt, &dp);
-     if (!code) {
- #if defined(D_PATH_TAKES_STRUCT_PATH)
- 	struct path p = { mnt, dp };
-@@ -129,7 +133,7 @@ int osi_abspath(char *aname, char *buf, int buflen,
- 	mntput(mnt);
-     }
- 
--    putname(tname);
-+    afs_putname(tname);
-     return code;
- }
- 
-diff --git a/src/afs/LINUX/osi_nfssrv.c b/src/afs/LINUX/osi_nfssrv.c
-index cde4b9b..425ecd3 100644
---- a/src/afs/LINUX/osi_nfssrv.c
-+++ b/src/afs/LINUX/osi_nfssrv.c
-@@ -223,6 +223,7 @@ void osi_linux_nfssrv_init(void)
- 	}
- 
- 	afs_new_authtab[i] = afs_osi_Alloc(sizeof(struct auth_ops));
-+	osi_Assert(afs_new_authtab[i] != NULL);
- 	*(afs_new_authtab[i]) = *(afs_orig_authtab[i]);
- 	afs_new_authtab[i]->owner = THIS_MODULE;
- 	afs_new_authtab[i]->accept = svcauth_afs_accept;
-diff --git a/src/afs/LINUX/osi_proc.c b/src/afs/LINUX/osi_proc.c
-index b4b5c9e..3f687f3 100644
---- a/src/afs/LINUX/osi_proc.c
-+++ b/src/afs/LINUX/osi_proc.c
-@@ -17,7 +17,7 @@
- 
- #include <linux/module.h> /* early to avoid printf->printk mapping */
- #ifdef HAVE_LINUX_SEQ_FILE_H
--#include <linux/seq_file.h>
-+# include <linux/seq_file.h>
- #endif
- #include "afs/sysincludes.h"
- #include "afsincludes.h"
-@@ -26,7 +26,7 @@
- #include <linux/mm.h>
- 
- #ifdef AFS_AMD64_LINUX20_ENV
--#include <asm/ia32_unistd.h>
-+# include <asm/ia32_unistd.h>
- #endif
- 
- #include <linux/proc_fs.h>
-@@ -38,115 +38,129 @@
- struct proc_dir_entry *openafs_procfs;
- 
- #ifdef HAVE_LINUX_SEQ_FILE_H
--static void *c_start(struct seq_file *m, loff_t *pos)
-+static void *
-+c_start(struct seq_file *m, loff_t *pos)
- {
--	struct afs_q *cq, *tq;
--	loff_t n = 0;
-+    struct afs_q *cq, *tq;
-+    loff_t n = 0;
- 
--	AFS_GLOCK();
--	ObtainReadLock(&afs_xcell);
--	for (cq = CellLRU.next; cq != &CellLRU; cq = tq) {
--		tq = QNext(cq);
-+    AFS_GLOCK();
-+    ObtainReadLock(&afs_xcell);
-+    for (cq = CellLRU.next; cq != &CellLRU; cq = tq) {
-+	tq = QNext(cq);
- 
--		if (n++ == *pos)
--			break;
--	}
--	if (cq == &CellLRU)
--		cq = NULL;
-+	if (n++ == *pos)
-+	    break;
-+    }
-+    if (cq == &CellLRU)
-+	cq = NULL;
- 
--	AFS_GUNLOCK();
--	return cq;
-+    AFS_GUNLOCK();
-+    return cq;
- }
- 
--static void *c_next(struct seq_file *m, void *p, loff_t *pos)
-+static void *
-+c_next(struct seq_file *m, void *p, loff_t *pos)
- {
--	struct afs_q *cq = p, *tq;
-+    struct afs_q *cq = p, *tq;
- 
--	AFS_GLOCK();
--	(*pos)++;
--	tq = QNext(cq);
-+    AFS_GLOCK();
-+    (*pos)++;
-+    tq = QNext(cq);
- 
--	if (tq == &CellLRU)
--		tq = NULL;
-+    if (tq == &CellLRU)
-+	tq = NULL;
- 
--	AFS_GUNLOCK();
--	return tq;
-+    AFS_GUNLOCK();
-+    return tq;
- }
- 
--static void c_stop(struct seq_file *m, void *p)
-+static void
-+c_stop(struct seq_file *m, void *p)
- {
--        AFS_GLOCK();
--	ReleaseReadLock(&afs_xcell);
--	AFS_GUNLOCK();
-+    AFS_GLOCK();
-+    ReleaseReadLock(&afs_xcell);
-+    AFS_GUNLOCK();
- }
- 
--static int c_show(struct seq_file *m, void *p)
-+static int
-+c_show(struct seq_file *m, void *p)
- {
--	struct afs_q *cq = p;
--	struct cell *tc = QTOC(cq);
--	int j;
-+    struct afs_q *cq = p;
-+    struct cell *tc = QTOC(cq);
-+    int j;
- 
--	seq_printf(m, ">%s #(%d/%d)\n", tc->cellName,
--		   tc->cellNum, tc->cellIndex);
-+    seq_printf(m, ">%s #(%d/%d)\n", tc->cellName,
-+               tc->cellNum, tc->cellIndex);
- 
--	for (j = 0; j < AFS_MAXCELLHOSTS; j++) {
--		afs_uint32 addr;
-+    for (j = 0; j < AFS_MAXCELLHOSTS; j++) {
-+	afs_uint32 addr;
- 
--		if (!tc->cellHosts[j]) break;
-+	if (!tc->cellHosts[j]) break;
- 
--		addr = tc->cellHosts[j]->addr->sa_ip;
-+	addr = tc->cellHosts[j]->addr->sa_ip;
- #if defined(NIPQUAD)
--		seq_printf(m, "%u.%u.%u.%u #%u.%u.%u.%u\n",
--			   NIPQUAD(addr), NIPQUAD(addr));
-+	seq_printf(m, "%u.%u.%u.%u #%u.%u.%u.%u\n",
-+	           NIPQUAD(addr), NIPQUAD(addr));
- #else
--		seq_printf(m, "%pI4 #%pI4\n", &addr, &addr);
-+	seq_printf(m, "%pI4 #%pI4\n", &addr, &addr);
- #endif
--	}
-+    }
- 
- 	return 0;
- }
- 
- static struct seq_operations afs_csdb_op = {
--	.start		= c_start,
--	.next		= c_next,
--	.stop		= c_stop,
--	.show		= c_show,
-+    .start = c_start,
-+    .next  = c_next,
-+    .stop  = c_stop,
-+    .show  = c_show,
- };
- 
--static int afs_csdb_open(struct inode *inode, struct file *file)
-+static int
-+afs_csdb_open(struct inode *inode, struct file *file)
- {
--	return seq_open(file, &afs_csdb_op);
-+    return seq_open(file, &afs_csdb_op);
- }
- 
- static struct file_operations afs_csdb_operations = {
--	.open		= afs_csdb_open,
--	.read		= seq_read,
--	.llseek		= seq_lseek,
--	.release	= seq_release,
-+    .open    = afs_csdb_open,
-+    .read    = seq_read,
-+    .llseek  = seq_lseek,
-+    .release = seq_release,
- };
- 
--
--static void *uu_start(struct seq_file *m, loff_t *pos)
-+static void *
-+uu_start(struct seq_file *m, loff_t *pos)
- {
-     struct unixuser *tu;
-+    void *ret;
-     loff_t n = 0;
-     afs_int32 i;
- 
--    ObtainReadLock(&afs_xuser);
-     if (!*pos)
- 	return (void *)(1);
- 
-+    AFS_GLOCK();
-+    ObtainReadLock(&afs_xuser);
-+
-+    ret = NULL;
-+
-     for (i = 0; i < NUSERS; i++) {
- 	for (tu = afs_users[i]; tu; tu = tu->next) {
- 	    if (++n == *pos)
--		return tu;
-+		ret = tu;
-+		goto done;
- 	}
-     }
- 
--    return NULL;
-+ done:
-+    AFS_GUNLOCK();
-+    return ret;
- }
- 
--static void *uu_next(struct seq_file *m, void *p, loff_t *pos)
-+static void *
-+uu_next(struct seq_file *m, void *p, loff_t *pos)
- {
-     struct unixuser *tu = p;
-     afs_int32 i = 0;
-@@ -164,12 +178,16 @@ static void *uu_next(struct seq_file *m, void *p, loff_t *pos)
-     return NULL;
- }
- 
--static void uu_stop(struct seq_file *m, void *p)
-+static void
-+uu_stop(struct seq_file *m, void *p)
- {
-+    AFS_GLOCK();
-     ReleaseReadLock(&afs_xuser);
-+    AFS_GUNLOCK();
- }
- 
--static int uu_show(struct seq_file *m, void *p)
-+static int
-+uu_show(struct seq_file *m, void *p)
- {
-     struct cell *tc = 0;
-     struct unixuser *tu = p;
-@@ -186,6 +204,8 @@ static int uu_show(struct seq_file *m, void *p)
- 	return 0;
-     }
- 
-+    AFS_GLOCK();
-+
-     if (tu->cell == -1) {
- 	cellname = "<default>";
-     } else {
-@@ -230,34 +250,36 @@ static int uu_show(struct seq_file *m, void *p)
-     }
-     seq_printf(m, "\n");
- 
-+    AFS_GUNLOCK();
-+
-     return 0;
- }
- 
- static struct seq_operations afs_unixuser_seqop = {
--    .start		= uu_start,
--    .next		= uu_next,
--    .stop		= uu_stop,
--    .show		= uu_show,
-+    .start = uu_start,
-+    .next  = uu_next,
-+    .stop  = uu_stop,
-+    .show  = uu_show,
- };
- 
--static int afs_unixuser_open(struct inode *inode, struct file *file)
-+static int
-+afs_unixuser_open(struct inode *inode, struct file *file)
- {
-     return seq_open(file, &afs_unixuser_seqop);
- }
- 
- static struct file_operations afs_unixuser_fops = {
--    .open		= afs_unixuser_open,
--    .read		= seq_read,
--    .llseek		= seq_lseek,
--    .release	= seq_release,
-+    .open    = afs_unixuser_open,
-+    .read    = seq_read,
-+    .llseek  = seq_lseek,
-+    .release = seq_release,
- };
- 
- 
- #else /* HAVE_LINUX_SEQ_FILE_H */
- 
- static int
--csdbproc_info(char *buffer, char **start, off_t offset, int
--length)
-+csdbproc_info(char *buffer, char **start, off_t offset, int length)
- {
-     int len = 0;
-     off_t pos = 0;
-@@ -269,6 +291,8 @@ length)
-        decor */
-     char temp[91];
-     afs_uint32 addr;
-+
-+    AFS_GLOCK();
-     
-     ObtainReadLock(&afs_xcell);
- 
-@@ -315,6 +339,8 @@ length)
-     ReleaseReadLock(&afs_xcell);
-     
- done:
-+    AFS_GUNLOCK();
-+
-     *start = buffer + len - (pos - offset);
-     len = pos - offset;
-     if (len > length)
-@@ -342,9 +368,9 @@ osi_proc_init(void)
-     entry = create_proc_entry("unixusers", 0, openafs_procfs);
-     if (entry) {
- 	entry->proc_fops = &afs_unixuser_fops;
--#if defined(STRUCT_PROC_DIR_ENTRY_HAS_OWNER)
-+# if defined(STRUCT_PROC_DIR_ENTRY_HAS_OWNER)
- 	entry->owner = THIS_MODULE;
--#endif
-+# endif
-     }
-     entry = create_proc_entry(PROC_CELLSERVDB_NAME, 0, openafs_procfs);
-     if (entry)
-diff --git a/src/afs/LINUX/osi_vcache.c b/src/afs/LINUX/osi_vcache.c
-index e82d78e..dc3685b 100644
---- a/src/afs/LINUX/osi_vcache.c
-+++ b/src/afs/LINUX/osi_vcache.c
-@@ -19,7 +19,11 @@ osi_TryEvictVCache(struct vcache *avc, int *slept, int defersleep) {
- 
-     struct dentry *dentry;
-     struct inode *inode = AFSTOV(avc);
--    struct list_head *cur, *head;
-+#if defined(D_ALIAS_IS_HLIST)
-+    struct hlist_node *cur, *head, *list_end;
-+#else
-+    struct list_head *cur, *head, *list_end;
-+#endif
- 
-     /* First, see if we can evict the inode from the dcache */
-     if (defersleep && avc != afs_globalVp && VREFCOUNT(avc) > 1 && avc->opens == 0) {
-@@ -53,12 +57,22 @@ restart:
- 	spin_unlock(&dcache_lock);
- #else /* HAVE_DCACHE_LOCK */
- 	spin_lock(&inode->i_lock);
-+#if defined(D_ALIAS_IS_HLIST)
-+	head = inode->i_dentry.first;
-+	list_end = NULL;
-+#else
- 	head = &inode->i_dentry;
-+	list_end = head;
-+#endif
- 
- restart:
- 	cur = head;
--	while ((cur = cur->next) != head) {
-+	while ((cur = cur->next) != list_end) {
-+#if defined(D_ALIAS_IS_HLIST)
-+	    dentry = hlist_entry(cur, struct dentry, d_alias);
-+#else
- 	    dentry = list_entry(cur, struct dentry, d_alias);
-+#endif
- 
- 	    spin_lock(&dentry->d_lock);
- 	    if (d_unhashed(dentry)) {
-diff --git a/src/afs/LINUX/osi_vfsops.c b/src/afs/LINUX/osi_vfsops.c
-index a6be1b3..bc951a2 100644
---- a/src/afs/LINUX/osi_vfsops.c
-+++ b/src/afs/LINUX/osi_vfsops.c
-@@ -284,7 +284,11 @@ afs_evict_inode(struct inode *ip)
- 	osi_Panic("inode freed while still hashed");
- 
-     truncate_inode_pages(&ip->i_data, 0);
-+#if defined(HAVE_LINUX_CLEAR_INODE)
-+    clear_inode(ip);
-+#else
-     end_writeback(ip);
-+#endif
- 
- #if !defined(STRUCT_SUPER_OPERATIONS_HAS_ALLOC_INODE)
-     afs_osi_Free(ip->u.generic_ip, sizeof(struct vcache));
-diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c
-index 4cda547..1028908 100644
---- a/src/afs/LINUX/osi_vnodeops.c
-+++ b/src/afs/LINUX/osi_vnodeops.c
-@@ -272,7 +272,8 @@ afs_linux_readdir(struct file *fp, void *dirbuf, filldir_t filldir)
- 	    goto out;
-         }
- 
--	ino = afs_calc_inum (avc->f.fid.Fid.Volume, ntohl(de->fid.vnode));
-+	ino = afs_calc_inum(avc->f.fid.Cell, avc->f.fid.Fid.Volume,
-+	                    ntohl(de->fid.vnode));
- 	len = strlen(de->name);
- 
- 	/* filldir returns -EINVAL when the buffer is full. */
-@@ -695,6 +696,68 @@ struct file_operations afs_file_fops = {
-   .llseek = 	default_llseek,
- };
- 
-+static struct dentry *
-+canonical_dentry(struct inode *ip)
-+{
-+    struct vcache *vcp = VTOAFS(ip);
-+    struct dentry *first = NULL, *ret = NULL, *cur;
-+#if defined(D_ALIAS_IS_HLIST)
-+    struct hlist_node *p;
-+#endif
-+
-+    /* general strategy:
-+     * if vcp->target_link is set, and can be found in ip->i_dentry, use that.
-+     * otherwise, use the first dentry in ip->i_dentry.
-+     * if ip->i_dentry is empty, use the 'dentry' argument we were given.
-+     */
-+    /* note that vcp->target_link specifies which dentry to use, but we have
-+     * no reference held on that dentry. so, we cannot use or dereference
-+     * vcp->target_link itself, since it may have been freed. instead, we only
-+     * use it to compare to pointers in the ip->i_dentry list. */
-+
-+    d_prune_aliases(ip);
-+
-+# ifdef HAVE_DCACHE_LOCK
-+    spin_lock(&dcache_lock);
-+# else
-+    spin_lock(&ip->i_lock);
-+# endif
-+
-+#if defined(D_ALIAS_IS_HLIST)
-+    hlist_for_each_entry(cur, p, &ip->i_dentry, d_alias) {
-+#else
-+    list_for_each_entry_reverse(cur, &ip->i_dentry, d_alias) {
-+#endif
-+
-+	if (!vcp->target_link || cur == vcp->target_link) {
-+	    ret = cur;
-+	    break;
-+	}
-+
-+	if (!first) {
-+	    first = cur;
-+	}
-+    }
-+    if (!ret && first) {
-+	ret = first;
-+    }
-+
-+    vcp->target_link = ret;
-+
-+# ifdef HAVE_DCACHE_LOCK
-+    if (ret) {
-+	dget_locked(ret);
-+    }
-+    spin_unlock(&dcache_lock);
-+# else
-+    if (ret) {
-+	dget(ret);
-+    }
-+    spin_unlock(&ip->i_lock);
-+# endif
-+
-+    return ret;
-+}
- 
- /**********************************************************************
-  * AFS Linux dentry operations
-@@ -906,7 +969,9 @@ afs_linux_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *sta
-  * later on, we shouldn't have to do it until later. Perhaps in the future..
-  */
- static int
--#ifdef DOP_REVALIDATE_TAKES_NAMEIDATA
-+#if defined(DOP_REVALIDATE_TAKES_UNSIGNED)
-+afs_linux_dentry_revalidate(struct dentry *dp, unsigned int flags)
-+#elif defined(DOP_REVALIDATE_TAKES_NAMEIDATA)
- afs_linux_dentry_revalidate(struct dentry *dp, struct nameidata *nd)
- #else
- afs_linux_dentry_revalidate(struct dentry *dp, int flags)
-@@ -921,7 +986,11 @@ afs_linux_dentry_revalidate(struct dentry *dp, int flags)
- 
- #ifdef LOOKUP_RCU
-     /* We don't support RCU path walking */
-+# if defined(DOP_REVALIDATE_TAKES_UNSIGNED)
-+    if (flags & LOOKUP_RCU)
-+# else
-     if (nd->flags & LOOKUP_RCU)
-+# endif
-        return -ECHILD;
- #endif
-     AFS_GLOCK();
-@@ -1075,10 +1144,44 @@ afs_dentry_delete(struct dentry *dp)
-     return 0;
- }
- 
-+#ifdef STRUCT_DENTRY_OPERATIONS_HAS_D_AUTOMOUNT
-+static struct vfsmount *
-+afs_dentry_automount(struct path *path)
-+{
-+    struct dentry *target;
-+
-+    /* avoid symlink resolution limits when resolving; we cannot contribute to
-+     * an infinite symlink loop */
-+    current->total_link_count--;
-+
-+    target = canonical_dentry(path->dentry->d_inode);
-+
-+    if (target == path->dentry) {
-+	dput(target);
-+	target = NULL;
-+    }
-+
-+    if (target) {
-+	dput(path->dentry);
-+	path->dentry = target;
-+
-+    } else {
-+	spin_lock(&path->dentry->d_lock);
-+	path->dentry->d_flags &= ~DCACHE_NEED_AUTOMOUNT;
-+	spin_unlock(&path->dentry->d_lock);
-+    }
-+
-+    return NULL;
-+}
-+#endif /* STRUCT_DENTRY_OPERATIONS_HAS_D_AUTOMOUNT */
-+
- struct dentry_operations afs_dentry_operations = {
-   .d_revalidate =	afs_linux_dentry_revalidate,
-   .d_delete =		afs_dentry_delete,
-   .d_iput =		afs_dentry_iput,
-+#ifdef STRUCT_DENTRY_OPERATIONS_HAS_D_AUTOMOUNT
-+  .d_automount =        afs_dentry_automount,
-+#endif /* STRUCT_DENTRY_OPERATIONS_HAS_D_AUTOMOUNT */
- };
- 
- /**********************************************************************
-@@ -1094,17 +1197,18 @@ struct dentry_operations afs_dentry_operations = {
-  * name is in kernel space at this point.
-  */
- static int
--#if defined(IOP_MKDIR_TAKES_UMODE_T)
-+#if defined(IOP_CREATE_TAKES_BOOL)
-+afs_linux_create(struct inode *dip, struct dentry *dp, umode_t mode,
-+		 bool excl)
-+#elif defined(IOP_CREATE_TAKES_UMODE_T)
- afs_linux_create(struct inode *dip, struct dentry *dp, umode_t mode,
- 		 struct nameidata *nd)
--#else
--#ifdef IOP_CREATE_TAKES_NAMEIDATA
-+#elif defined(IOP_CREATE_TAKES_NAMEIDATA)
- afs_linux_create(struct inode *dip, struct dentry *dp, int mode,
- 		 struct nameidata *nd)
- #else
- afs_linux_create(struct inode *dip, struct dentry *dp, int mode)
- #endif
--#endif
- {
-     struct vattr vattr;
-     cred_t *credp = crref();
-@@ -1140,7 +1244,10 @@ afs_linux_create(struct inode *dip, struct dentry *dp, int mode)
- 
- /* afs_linux_lookup */
- static struct dentry *
--#ifdef IOP_LOOKUP_TAKES_NAMEIDATA
-+#if defined(IOP_LOOKUP_TAKES_UNSIGNED)
-+afs_linux_lookup(struct inode *dip, struct dentry *dp,
-+		 unsigned flags)
-+#elif defined(IOP_LOOKUP_TAKES_NAMEIDATA)
- afs_linux_lookup(struct inode *dip, struct dentry *dp,
- 		 struct nameidata *nd)
- #else
-@@ -1159,6 +1266,18 @@ afs_linux_lookup(struct inode *dip, struct dentry *dp)
-     
-     if (vcp) {
- 	struct vattr vattr;
-+	struct vcache *parent_vc = VTOAFS(dip);
-+
-+	if (parent_vc == vcp) {
-+	    /* This is possible if the parent dir is a mountpoint to a volume,
-+	     * and the dir entry we looked up is a mountpoint to the same
-+	     * volume. Linux cannot cope with this, so return an error instead
-+	     * of risking a deadlock or panic. */
-+	    afs_PutVCache(vcp);
-+	    code = EDEADLK;
-+	    AFS_GUNLOCK();
-+	    goto done;
-+	}
- 
- 	ip = AFSTOV(vcp);
- 	afs_getattr(vcp, &vattr, credp);
-@@ -1173,23 +1292,32 @@ afs_linux_lookup(struct inode *dip, struct dentry *dp)
-     AFS_GUNLOCK();
- 
-     if (ip && S_ISDIR(ip->i_mode)) {
-+	int retry = 1;
- 	struct dentry *alias;
- 
--        /* Try to invalidate an existing alias in favor of our new one */
--	alias = d_find_alias(ip);
--        /* But not if it's disconnected; then we want d_splice_alias below */
--	if (alias && !(alias->d_flags & DCACHE_DISCONNECTED)) {
--	    if (d_invalidate(alias) == 0) {
--		dput(alias);
--	    } else {
--		iput(ip);
--		crfree(credp);
--		return alias;
-+	while (retry) {
-+	    retry = 0;
-+
-+	    /* Try to invalidate an existing alias in favor of our new one */
-+	    alias = d_find_alias(ip);
-+	    /* But not if it's disconnected; then we want d_splice_alias below */
-+	    if (alias && !(alias->d_flags & DCACHE_DISCONNECTED)) {
-+		if (d_invalidate(alias) == 0) {
-+		    /* there may be more aliases; try again until we run out */
-+		    retry = 1;
-+		}
- 	    }
-+
-+	    dput(alias);
- 	}
-+
-+#ifdef STRUCT_DENTRY_OPERATIONS_HAS_D_AUTOMOUNT
-+	ip->i_flags |= S_AUTOMOUNT;
-+#endif
-     }
-     newdp = d_splice_alias(ip, dp);
- 
-+ done:
-     crfree(credp);
- 
-     /* It's ok for the file to not be found. That's noted by the caller by
-@@ -1533,7 +1661,7 @@ afs_linux_read_cache(struct file *cachefp, struct page *page,
-     struct inode *cacheinode = cachefp->f_dentry->d_inode;
-     struct page *newpage, *cachepage;
-     struct address_space *cachemapping;
--    int pageindex, endindex;
-+    int pageindex;
-     int code = 0;
- 
-     cachemapping = cacheinode->i_mapping;
-@@ -2483,6 +2611,44 @@ afs_linux_write_begin(struct file *file, struct address_space *mapping,
- }
- #endif
- 
-+#ifndef STRUCT_DENTRY_OPERATIONS_HAS_D_AUTOMOUNT
-+static void *
-+afs_linux_dir_follow_link(struct dentry *dentry, struct nameidata *nd)
-+{
-+    struct dentry **dpp;
-+    struct dentry *target;
-+
-+    if (current->total_link_count > 0) {
-+	/* avoid symlink resolution limits when resolving; we cannot contribute to
-+	 * an infinite symlink loop */
-+	/* only do this for follow_link when total_link_count is positive to be
-+	 * on the safe side; there is at least one code path in the Linux
-+	 * kernel where it seems like it may be possible to get here without
-+	 * total_link_count getting incremented. it is not clear on how that
-+	 * path is actually reached, but guard against it just to be safe */
-+	current->total_link_count--;
-+    }
-+
-+    target = canonical_dentry(dentry->d_inode);
-+
-+# ifdef STRUCT_NAMEIDATA_HAS_PATH
-+    dpp = &nd->path.dentry;
-+# else
-+    dpp = &nd->dentry;
-+# endif
-+
-+    dput(*dpp);
-+
-+    if (target) {
-+	*dpp = target;
-+    } else {
-+	*dpp = dget(dentry);
-+    }
-+
-+    return NULL;
-+}
-+#endif /* !STRUCT_DENTRY_OPERATIONS_HAS_D_AUTOMOUNT */
-+
- 
- static struct inode_operations afs_file_iops = {
-   .permission =		afs_linux_permission,
-@@ -2520,6 +2686,9 @@ static struct inode_operations afs_dir_iops = {
-   .rename =		afs_linux_rename,
-   .getattr =		afs_linux_getattr,
-   .permission =		afs_linux_permission,
-+#ifndef STRUCT_DENTRY_OPERATIONS_HAS_D_AUTOMOUNT
-+  .follow_link =        afs_linux_dir_follow_link,
-+#endif
- };
- 
- /* We really need a separate symlink set of ops, since do_follow_link()
-diff --git a/src/afs/LINUX24/osi_file.c b/src/afs/LINUX24/osi_file.c
-index 8751388..35bd031 100644
---- a/src/afs/LINUX24/osi_file.c
-+++ b/src/afs/LINUX24/osi_file.c
-@@ -200,7 +200,7 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr,
- 	if (!afs_shuttingdown)
- 	    osi_Panic("osi_Read called with null param");
- 	else
--	    return EIO;
-+	    return -EIO;
-     }
- 
-     if (offset != -1)
-@@ -215,7 +215,9 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr,
-     } else {
- 	afs_Trace2(afs_iclSetp, CM_TRACE_READFAILED, ICL_TYPE_INT32, auio.uio_resid,
- 		   ICL_TYPE_INT32, code);
--	code = -1;
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-     }
-     return code;
- }
-@@ -235,7 +237,7 @@ afs_osi_Write(struct osi_file *afile, afs_int32 offset, void *aptr,
- 	if (!afs_shuttingdown)
- 	    osi_Panic("afs_osi_Write called with null param");
- 	else
--	    return EIO;
-+	    return -EIO;
-     }
- 
-     if (offset != -1)
-@@ -251,7 +253,9 @@ afs_osi_Write(struct osi_file *afile, afs_int32 offset, void *aptr,
- 	if (code == ENOSPC)
- 	    afs_warnuser
- 		("\n\n\n*** Cache partition is FULL - Decrease cachesize!!! ***\n\n");
--	code = -1;
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-     }
- 
-     if (afile->proc)
-diff --git a/src/afs/LINUX24/osi_vcache.c b/src/afs/LINUX24/osi_vcache.c
-index c1d2340..bbaf5ce 100644
---- a/src/afs/LINUX24/osi_vcache.c
-+++ b/src/afs/LINUX24/osi_vcache.c
-@@ -94,6 +94,7 @@ osi_NewVnode(void)
-     tvc = VTOAFS(ip);
- #else
-     tvc = afs_osi_Alloc(sizeof(struct vcache));
-+    osi_Assert(tvc != NULL);
-     ip->u.generic_ip = tvc;
-     tvc->v = ip;
- #endif
-diff --git a/src/afs/LINUX24/osi_vnodeops.c b/src/afs/LINUX24/osi_vnodeops.c
-index 841f453..2fd1a22 100644
---- a/src/afs/LINUX24/osi_vnodeops.c
-+++ b/src/afs/LINUX24/osi_vnodeops.c
-@@ -303,7 +303,8 @@ afs_linux_readdir(struct file *fp, void *dirbuf, filldir_t filldir)
- 	if (!de)
- 	    break;
- 
--	ino = afs_calc_inum (avc->f.fid.Fid.Volume, ntohl(de->fid.vnode));
-+	ino = afs_calc_inum(avc->f.fid.Cell, avc->f.fid.Fid.Volume,
-+	                    ntohl(de->fid.vnode));
- 
- 	if (de->name)
- 	    len = strlen(de->name);
-@@ -780,6 +781,57 @@ struct file_operations afs_file_fops = {
- #endif
- };
- 
-+static struct dentry *
-+canonical_dentry(struct inode *ip)
-+{
-+    struct vcache *vcp = VTOAFS(ip);
-+    struct dentry *first = NULL, *ret = NULL, *cur;
-+    struct list_head *head, *prev, *tmp;
-+
-+    /* general strategy:
-+     * if vcp->target_link is set, and can be found in ip->i_dentry, use that.
-+     * otherwise, use the first dentry in ip->i_dentry.
-+     * if ip->i_dentry is empty, use the 'dentry' argument we were given.
-+     */
-+    /* note that vcp->target_link specifies which dentry to use, but we have
-+     * no reference held on that dentry. so, we cannot use or dereference
-+     * vcp->target_link itself, since it may have been freed. instead, we only
-+     * use it to compare to pointers in the ip->i_dentry list. */
-+
-+    d_prune_aliases(ip);
-+
-+    spin_lock(&dcache_lock);
-+
-+    head = &ip->i_dentry;
-+    prev = ip->i_dentry.prev;
-+
-+    while (prev != head) {
-+	tmp = prev;
-+	prev = tmp->prev;
-+	cur = list_entry(tmp, struct dentry, d_alias);
-+
-+	if (!vcp->target_link || cur == vcp->target_link) {
-+	    ret = cur;
-+	    break;
-+	}
-+
-+	if (!first) {
-+	    first = cur;
-+	}
-+    }
-+    if (!ret && first) {
-+	ret = first;
-+    }
-+
-+    vcp->target_link = ret;
-+
-+    if (ret) {
-+	dget_locked(ret);
-+    }
-+    spin_unlock(&dcache_lock);
-+
-+    return ret;
-+}
- 
- /**********************************************************************
-  * AFS Linux dentry operations
-@@ -1219,6 +1271,18 @@ afs_linux_lookup(struct inode *dip, struct dentry *dp)
-     
-     if (vcp) {
- 	struct vattr vattr;
-+	struct vcache *parent_vc = VTOAFS(dip);
-+
-+	if (parent_vc == vcp) {
-+	    /* This is possible if the parent dir is a mountpoint to a volume,
-+	     * and the dir entry we looked up is a mountpoint to the same
-+	     * volume. Linux cannot cope with this, so return an error instead
-+	     * of risking a deadlock or panic. */
-+	    afs_PutVCache(vcp);
-+	    code = EDEADLK;
-+	    AFS_GUNLOCK();
-+	    goto done;
-+	}
- 
- 	ip = AFSTOV(vcp);
- 	afs_getattr(vcp, &vattr, credp);
-@@ -1238,23 +1302,29 @@ afs_linux_lookup(struct inode *dip, struct dentry *dp)
- 
- #if defined(AFS_LINUX24_ENV)
-     if (ip && S_ISDIR(ip->i_mode)) {
-+	int retry = 1;
- 	struct dentry *alias;
- 
--        /* Try to invalidate an existing alias in favor of our new one */
--	alias = d_find_alias(ip);
--	if (alias) {
--	    if (d_invalidate(alias) == 0) {
--		dput(alias);
--	    } else {
--		iput(ip);
--		crfree(credp);
--		return alias;
-+	while (retry) {
-+	    retry = 0;
-+
-+	    /* Try to invalidate an existing alias in favor of our new one */
-+	    alias = d_find_alias(ip);
-+	    /* But not if it's disconnected; then we want d_splice_alias below */
-+	    if (alias) {
-+		if (d_invalidate(alias) == 0) {
-+		    /* there may be more aliases; try again until we run out */
-+		    retry = 1;
-+		}
- 	    }
-+
-+	    dput(alias);
- 	}
-     }
- #endif
-     d_add(dp, ip);
- 
-+ done:
-     crfree(credp);
- 
-     /* It's ok for the file to not be found. That's noted by the caller by
-@@ -1995,6 +2065,26 @@ afs_linux_write_begin(struct file *file, struct address_space *mapping,
- }
- #endif
- 
-+static int
-+afs_linux_dir_follow_link(struct dentry *dentry, struct nameidata *nd)
-+{
-+    struct dentry **dpp;
-+    struct dentry *target;
-+
-+    target = canonical_dentry(dentry->d_inode);
-+
-+    dpp = &nd->dentry;
-+
-+    dput(*dpp);
-+
-+    if (target) {
-+	*dpp = target;
-+    } else {
-+	*dpp = dget(dentry);
-+    }
-+
-+    return 0;
-+}
- 
- static struct inode_operations afs_file_iops = {
- #if defined(AFS_LINUX24_ENV)
-@@ -2044,6 +2134,7 @@ static struct inode_operations afs_dir_iops = {
-   .rename =		afs_linux_rename,
-   .revalidate =		afs_linux_revalidate,
-   .permission =		afs_linux_permission,
-+  .follow_link =	afs_linux_dir_follow_link,
- };
- 
- /* We really need a separate symlink set of ops, since do_follow_link()
-diff --git a/src/afs/NBSD/osi_file.c b/src/afs/NBSD/osi_file.c
-index 8c93145..6d8746a 100644
---- a/src/afs/NBSD/osi_file.c
-+++ b/src/afs/NBSD/osi_file.c
-@@ -142,7 +142,7 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr, afs_int32 asize)
- 	if (!afs_shuttingdown)
- 	    osi_Panic("osi_Read called with null param");
- 	else
--	    return EIO;
-+	    return -EIO;
-     }
- 
-     if (offset != -1)
-@@ -160,7 +160,9 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr, afs_int32 asize)
-     } else {
- 	afs_Trace2(afs_iclSetp, CM_TRACE_READFAILED, ICL_TYPE_INT32, resid,
- 		   ICL_TYPE_INT32, code);
--	code = -1;
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-     }
-     return code;
- }
-@@ -192,8 +194,11 @@ afs_osi_Write(struct osi_file *afile, afs_int32 offset, void *aptr,
- 	afile->offset += code;
- 	if (afile->offset > afile->size)
- 	    afile->size = afile->offset;
--    } else
--	code = -1;
-+    } else {
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-+    }
- 
-     if (afile->proc)
- 	(*afile->proc) (afile, code);
-diff --git a/src/afs/OBSD/osi_file.c b/src/afs/OBSD/osi_file.c
-index a82cd02..72a43ef 100644
---- a/src/afs/OBSD/osi_file.c
-+++ b/src/afs/OBSD/osi_file.c
-@@ -146,7 +146,7 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr, afs_int32 asize)
- 	if (!afs_shuttingdown)
- 	    osi_Panic("osi_Read called with null param");
- 	else
--	    return EIO;
-+	    return -EIO;
-     }
- 
-     if (offset != -1)
-@@ -163,7 +163,9 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr, afs_int32 asize)
-     } else {
- 	afs_Trace2(afs_iclSetp, CM_TRACE_READFAILED, ICL_TYPE_INT32,
- 		   (unsigned int) resid, ICL_TYPE_INT32, code);
--	code = -1;
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-     }
-     return code;
- }
-@@ -195,8 +197,11 @@ afs_osi_Write(struct osi_file *afile, afs_int32 offset, void *aptr,
- 	afile->offset += code;
- 	if (afile->offset > afile->size)
- 	    afile->size = afile->offset;
--    } else
--	code = -1;
-+    } else {
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-+    }
- 
-     if (afile->proc)
- 	(*afile->proc) (afile, code);
-diff --git a/src/afs/SOLARIS/osi_file.c b/src/afs/SOLARIS/osi_file.c
-index a9e97ed..e0c0057 100644
---- a/src/afs/SOLARIS/osi_file.c
-+++ b/src/afs/SOLARIS/osi_file.c
-@@ -379,7 +379,7 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr,
- 	if (!afs_shuttingdown)
- 	    osi_Panic("osi_Read called with null param");
- 	else
--	    return EIO;
-+	    return -EIO;
-     }
- 
-     if (offset != -1)
-@@ -396,7 +396,9 @@ afs_osi_Read(struct osi_file *afile, int offset, void *aptr,
-     } else {
- 	afs_Trace2(afs_iclSetp, CM_TRACE_READFAILED, ICL_TYPE_INT32, resid,
- 		   ICL_TYPE_INT32, code);
--	code = -1;
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-     }
-     return code;
- }
-@@ -428,7 +430,9 @@ afs_osi_Write(struct osi_file *afile, afs_int32 offset, void *aptr,
- 	code = asize - resid;
- 	afile->offset += code;
-     } else {
--	code = -1;
-+	if (code > 0) {
-+	    code *= -1;
-+	}
-     }
-     if (afile->proc) {
- 	(*afile->proc) (afile, code);
-diff --git a/src/afs/SOLARIS/osi_machdep.h b/src/afs/SOLARIS/osi_machdep.h
-index 3e8c886..964ac8b 100644
---- a/src/afs/SOLARIS/osi_machdep.h
-+++ b/src/afs/SOLARIS/osi_machdep.h
-@@ -99,7 +99,6 @@ extern kmutex_t afs_global_lock;
- #define ISAFS_GLOCK()	mutex_owned(&afs_global_lock)
- #define osi_InitGlock() \
- 	mutex_init(&afs_global_lock, "afs_global_lock", MUTEX_DEFAULT, NULL);
--#endif
- 
- 
- /* Associate the Berkley signal equivalent lock types to System V's */
-@@ -144,6 +143,7 @@ struct afs_ifinfo {
-   int         metric;
-   ipaddr_t    dstaddr;
- };
-+#endif /* AFS_SUN510_ENV */
- 
- #define osi_procname(procname, size) strncpy(procname, PTOU(ttoproc(curthread))->u_comm, size)
- 
-diff --git a/src/afs/SOLARIS/osi_vcache.c b/src/afs/SOLARIS/osi_vcache.c
-index 8c2ce11..19fba7b 100644
---- a/src/afs/SOLARIS/osi_vcache.c
-+++ b/src/afs/SOLARIS/osi_vcache.c
-@@ -28,7 +28,11 @@ osi_TryEvictVCache(struct vcache *avc, int *slept, int defersleep) {
- 
- struct vcache *
- osi_NewVnode(void) {
--    return (struct vcache *)afs_osi_Alloc(sizeof(struct vcache));
-+    struct vcache *avc;
-+
-+    avc = afs_osi_Alloc(sizeof(struct vcache));
-+    osi_Assert(avc != NULL);
-+    return avc;
- }
- 
- void
-diff --git a/src/afs/VNOPS/afs_vnop_attrs.c b/src/afs/VNOPS/afs_vnop_attrs.c
-index b3931e5..d01aff2 100644
---- a/src/afs/VNOPS/afs_vnop_attrs.c
-+++ b/src/afs/VNOPS/afs_vnop_attrs.c
-@@ -104,8 +104,9 @@ afs_CopyOutAttrs(struct vcache *avc, struct vattr *attrs)
- 	/* The mount point's vnode. */
- 	if (tvp) {
- 	    attrs->va_nodeid =
--	      afs_calc_inum (tvp->mtpoint.Fid.Volume,
--			      tvp->mtpoint.Fid.Vnode);
-+	      afs_calc_inum(tvp->mtpoint.Cell,
-+			    tvp->mtpoint.Fid.Volume,
-+			    tvp->mtpoint.Fid.Vnode);
- 	    if (FidCmp(&afs_rootFid, &avc->f.fid) && !attrs->va_nodeid)
- 		attrs->va_nodeid = 2;
- 	    afs_PutVolume(tvp, READ_LOCK);
-@@ -113,8 +114,9 @@ afs_CopyOutAttrs(struct vcache *avc, struct vattr *attrs)
- 	    attrs->va_nodeid = 2;
-     } else
- 	attrs->va_nodeid = 
--	      afs_calc_inum (avc->f.fid.Fid.Volume,
--			      avc->f.fid.Fid.Vnode);
-+	      afs_calc_inum(avc->f.fid.Cell,
-+			    avc->f.fid.Fid.Volume,
-+			    avc->f.fid.Fid.Vnode);
-     attrs->va_nodeid &= 0x7fffffff;	/* Saber C hates negative inode #s! */
-     attrs->va_nlink = fakedir ? 100 : avc->f.m.LinkCount;
-     attrs->va_size = fakedir ? 4096 : avc->f.m.Length;
-diff --git a/src/afs/VNOPS/afs_vnop_lookup.c b/src/afs/VNOPS/afs_vnop_lookup.c
-index 580f78b..f4f28da 100644
---- a/src/afs/VNOPS/afs_vnop_lookup.c
-+++ b/src/afs/VNOPS/afs_vnop_lookup.c
-@@ -622,6 +622,33 @@ Next_AtSys(struct vcache *avc, struct vrequest *areq,
-     return 1;
- }
- 
-+static int
-+afs_CheckBulkStatus(struct afs_conn *tc, int nFids, AFSBulkStats *statParm,
-+                    AFSCBs *cbParm)
-+{
-+    int i;
-+    int code;
-+
-+    if (statParm->AFSBulkStats_len != nFids || cbParm->AFSCBs_len != nFids) {
-+	afs_warn("afs: BulkFetchStatus length %u/%u, expected %u\n",
-+	         (unsigned)statParm->AFSBulkStats_len,
-+	         (unsigned)cbParm->AFSCBs_len, nFids);
-+	afs_BadFetchStatus(tc);
-+	return VBUSY;
-+    }
-+    for (i = 0; i < nFids; i++) {
-+	if (statParm->AFSBulkStats_val[i].errorCode) {
-+	    continue;
-+	}
-+	code = afs_CheckFetchStatus(tc, &statParm->AFSBulkStats_val[i]);
-+	if (code) {
-+	    return code;
-+	}
-+    }
-+
-+    return 0;
-+}
-+
- extern int BlobScan(struct dcache * afile, afs_int32 ablob);
- 
- /* called with an unlocked directory and directory cookie.  Areqp
-@@ -1001,6 +1028,10 @@ afs_DoBulkStat(struct vcache *adp, long dirCookie, struct vrequest *areqp)
- 		RX_AFS_GLOCK();
- 	    }
- 	    XSTATS_END_TIME;
-+
-+	    if (code == 0) {
-+		code = afs_CheckBulkStatus(tcp, fidIndex, &statParm, &cbParm);
-+	    }
- 	} else
- 	    code = -1;
-     } while (afs_Analyze
-diff --git a/src/afs/VNOPS/afs_vnop_symlink.c b/src/afs/VNOPS/afs_vnop_symlink.c
-index 3e08108..faf103e 100644
---- a/src/afs/VNOPS/afs_vnop_symlink.c
-+++ b/src/afs/VNOPS/afs_vnop_symlink.c
-@@ -277,7 +277,8 @@ afs_symlink(OSI_VC_DECL(adp), char *aname, struct vattr *attrs,
-     }
- 
-     if (!tvc->linkData) {
--	tvc->linkData = (char *)afs_osi_Alloc(alen);
-+	tvc->linkData = afs_osi_Alloc(alen);
-+	osi_Assert(tvc->linkData != NULL);
- 	strncpy(tvc->linkData, atargetName, alen - 1);
- 	tvc->linkData[alen - 1] = 0;
-     }
-@@ -334,6 +335,7 @@ afs_MemHandleLink(struct vcache *avc, struct vrequest *areq)
- 	rbuf[alen - 1] = 0;
- 	alen = strlen(rbuf) + 1;
- 	tp = afs_osi_Alloc(alen);	/* make room for terminating null */
-+	osi_Assert(tp != NULL);
- 	memcpy(tp, rbuf, alen);
- 	osi_FreeLargeSpace(rbuf);
- 	if (code != len) {
-@@ -390,6 +392,7 @@ afs_UFSHandleLink(struct vcache *avc, struct vrequest *areq)
- 	rbuf[alen - 1] = '\0';
- 	alen = strlen(rbuf) + 1;
- 	tp = afs_osi_Alloc(alen);	/* make room for terminating null */
-+	osi_Assert(tp != NULL);
- 	memcpy(tp, rbuf, alen);
- 	osi_FreeLargeSpace(rbuf);
- 	if (code != tlen) {
-diff --git a/src/afs/afs.h b/src/afs/afs.h
-index 542617a..25b69b6 100644
---- a/src/afs/afs.h
-+++ b/src/afs/afs.h
-@@ -244,6 +244,7 @@ struct vrequest {
-     char tokenError;            /* a token error other than expired. */
-     char idleError;             /* the server idled too long */
-     char skipserver[AFS_MAXHOSTS];
-+    afs_int32 lasterror[AFS_MAXHOSTS];
- };
- #define VOLMISSING 1
- #define VOLBUSY 2
-@@ -879,6 +880,13 @@ struct vcache {
- #if defined(AFS_LINUX26_ENV)
-     cred_t *cred;		/* last writer's cred */
- #endif
-+#ifdef AFS_LINUX24_ENV
-+    struct dentry *target_link; /* dentry we prefer, when we are redirecting
-+                                 * all requests due to duplicate dentry aliases.
-+                                 * See LINUX/osi_vnodeops.c. Note that this is
-+                                 * NOT an actual reference to a dentry, so this
-+                                 * pointer MUST NOT be dereferenced on its own. */
-+#endif
-     afs_int32 vc_error;		/* stash write error for this vnode. */
-     int xlatordv;		/* Used by nfs xlator */
-     afs_ucred_t *uncred;
-@@ -1307,6 +1315,11 @@ extern struct brequest afs_brs[NBRS];	/* request structures */
- #define IS_SLOCK 4
- #define IS_WLOCK 8
- 
-+/* values for adown value of afs_LoopServers */
-+#define AFS_LS_UP 0
-+#define AFS_LS_DOWN 1
-+#define AFS_LS_ALL 2
-+
- /* values for flag param of afs_CheckVolumeNames */
- #define AFS_VOLCHECK_EXPIRED	0x1	/* volumes whose callbacks have expired */
- #define AFS_VOLCHECK_BUSY	0x2	/* volumes which were marked busy */
-diff --git a/src/afs/afs_analyze.c b/src/afs/afs_analyze.c
-index efda1be..b7f4aea 100644
---- a/src/afs/afs_analyze.c
-+++ b/src/afs/afs_analyze.c
-@@ -111,6 +111,7 @@ VLDB_Same(struct VenusFid *afid, struct vrequest *areq)
-     if ((i = afs_InitReq(&treq, afs_osi_credp)))
- 	return DUNNO;
-     v = afs_osi_Alloc(sizeof(*v));
-+    osi_Assert(v != NULL);
-     tcell = afs_GetCell(afid->Cell, READ_LOCK);
-     bp = afs_cv2string(&tbuf[CVBS], afid->Fid.Volume);
-     do {
-@@ -332,6 +333,55 @@ afs_ClearStatus(struct VenusFid *afid, int op, struct volume *avp)
-     return 0;
- }
- 
-+/*!
-+ * \brief
-+ *      Print the last errors from the servers for the volume on
-+ *      this request.
-+ *
-+ * \param[in] areq   The request record associated with this operation.
-+ * \param[in] afid   The FID of the file involved in the action.  This argument
-+ *		     may be null if none was involved.
-+ *
-+ * \return
-+ *      None
-+ *
-+ * \note
-+ *      This routine is called before a hard-mount retry, to display
-+ *      the servers by primary address and the errors encountered.
-+ */
-+static void
-+afs_PrintServerErrors(struct vrequest *areq, struct VenusFid *afid)
-+{
-+    int i;
-+    struct volume *tvp;
-+    struct srvAddr *sa;
-+    afs_uint32 address;
-+    char *sep = " (";
-+    char *term = "";
-+
-+    if (afid) {
-+	tvp = afs_FindVolume(afid, READ_LOCK);
-+	if (tvp) {
-+	    for (i = 0; i < AFS_MAXHOSTS; i++) {
-+		if (tvp->serverHost[i]) {
-+		    sa = tvp->serverHost[i]->addr;
-+		    if (sa) {
-+			address = ntohl(sa->sa_ip);
-+			afs_warnuser("%s%d.%d.%d.%d code=%d", sep,
-+				     (address >> 24), (address >> 16) & 0xff,
-+				     (address >> 8) & 0xff, (address) & 0xff,
-+				     areq->lasterror[i]);
-+			sep = ", ";
-+			term = ")";
-+		    }
-+		}
-+	    }
-+	    afs_PutVolume(tvp, READ_LOCK);
-+	}
-+    }
-+    afs_warnuser("%s\n", term);
-+}
-+
- /*------------------------------------------------------------------------
-  * EXPORTED afs_Analyze
-  *
-@@ -377,7 +427,6 @@ afs_Analyze(struct afs_conn *aconn, struct rx_connection *rxconn,
-     afs_int32 shouldRetry = 0;
-     afs_int32 serversleft = 1;
-     struct afs_stats_RPCErrors *aerrP;
--    afs_int32 markeddown;
-     afs_uint32 address;
- 
-     if (AFS_IS_DISCONNECTED && !AFS_IN_SYNC) {
-@@ -501,8 +550,9 @@ afs_Analyze(struct afs_conn *aconn, struct rx_connection *rxconn,
- 		    if (shouldRetry) {
- 			if (warn) {
- 			    afs_warnuser
--			        ("afs: hard-mount waiting for volume %u\n",
-+			        ("afs: hard-mount waiting for volume %u",
- 			         afid->Fid.Volume);
-+			    afs_PrintServerErrors(areq, afid);
- 			}
- 
- 			VSleep(hm_retry_int);
-@@ -533,6 +583,8 @@ afs_Analyze(struct afs_conn *aconn, struct rx_connection *rxconn,
- 		}
- 	    }
- 	}
-+	if (aconn) /* simply lacking aconn->server doesn't absolve this */
-+	    afs_PutConn(aconn, rxconn, locktype);
- 	return shouldRetry;
-     }
- 
-@@ -564,6 +616,17 @@ afs_Analyze(struct afs_conn *aconn, struct rx_connection *rxconn,
- 	return 0;
-     }
- 
-+    /* Save the last code of this server on this request. */
-+    tvp = afs_FindVolume(afid, READ_LOCK);
-+    if (tvp) {
-+	for (i = 0; i < AFS_MAXHOSTS; i++) {
-+	    if (tvp->serverHost[i] == tsp) {
-+		areq->lasterror[i] = acode;
-+	    }
-+	}
-+	afs_PutVolume(tvp, READ_LOCK);
-+    }
-+
-     /* If network troubles, mark server as having bogued out again. */
-     /* VRESTARTING is < 0 because of backward compatibility issues
-      * with 3.4 file servers and older cache managers */
-@@ -601,7 +664,7 @@ afs_Analyze(struct afs_conn *aconn, struct rx_connection *rxconn,
- 	     */
- 	    goto out;
- 	}
--	markeddown = afs_ServerDown(sa);
-+	afs_ServerDown(sa, acode);
- 	ForceNewConnections(sa); /**multi homed clients lock:afs_xsrvAddr? */
- 	if (aerrP)
- 	    (aerrP->err_Server)++;
-@@ -727,7 +790,7 @@ afs_Analyze(struct afs_conn *aconn, struct rx_connection *rxconn,
-     }
-     /* check for ubik errors; treat them like crashed servers */
-     else if (acode >= ERROR_TABLE_BASE_U && acode < ERROR_TABLE_BASE_U + 255) {
--	afs_ServerDown(sa);
-+	afs_ServerDown(sa, acode);
- 	if (aerrP)
- 	    (aerrP->err_Server)++;
- 	shouldRetry = 1;	/* retryable (maybe one is working) */
-diff --git a/src/afs/afs_axscache.c b/src/afs/afs_axscache.c
-index 790a238..08f233a 100644
---- a/src/afs/afs_axscache.c
-+++ b/src/afs/afs_axscache.c
-@@ -69,6 +69,7 @@ axs_Alloc(void)
- 	return i;
-     } else {
- 	h = afs_osi_Alloc(sizeof(struct xfreelist));
-+	osi_Assert(h != NULL);
- 	afs_xaxscnt++;
- 	xsp = xfreemallocs;
- 	xfreemallocs = h;
-diff --git a/src/afs/afs_buffer.c b/src/afs/afs_buffer.c
-index e65d789..bf04c42 100644
---- a/src/afs/afs_buffer.c
-+++ b/src/afs/afs_buffer.c
-@@ -119,8 +119,8 @@ DInit(int abuffers)
-     abuffers = ((abuffers - 1) | (NPB - 1)) + 1;
-     afs_max_buffers = abuffers << 2;		/* possibly grow up to 4 times as big */
-     LOCK_INIT(&afs_bufferLock, "afs_bufferLock");
--    Buffers =
--	(struct buffer *)afs_osi_Alloc(afs_max_buffers * sizeof(struct buffer));
-+    Buffers = afs_osi_Alloc(afs_max_buffers * sizeof(struct buffer));
-+    osi_Assert(Buffers != NULL);
-     timecounter = 1;
-     afs_stats_cmperf.bufAlloced = nbuffers = abuffers;
-     for (i = 0; i < PHSIZE; i++)
-@@ -128,7 +128,8 @@ DInit(int abuffers)
-     for (i = 0; i < abuffers; i++) {
- 	if ((i & (NPB - 1)) == 0) {
- 	    /* time to allocate a fresh buffer */
--	    BufferData = (char *) afs_osi_Alloc(AFS_BUFFER_PAGESIZE * NPB);
-+	    BufferData = afs_osi_Alloc(AFS_BUFFER_PAGESIZE * NPB);
-+	    osi_Assert(BufferData != NULL);
- 	}
- 	/* Fill in each buffer with an empty indication. */
- 	tb = &Buffers[i];
-@@ -337,7 +338,8 @@ afs_newslot(struct dcache *adc, afs_int32 apage, struct buffer *lp)
- 	    return 0;
- 	}
- 
--	BufferData = (char *) afs_osi_Alloc(AFS_BUFFER_PAGESIZE * NPB);
-+	BufferData = afs_osi_Alloc(AFS_BUFFER_PAGESIZE * NPB);
-+	osi_Assert(BufferData != NULL);
- 	for (i = 0; i< NPB; i++) {
- 	    /* Fill in each buffer with an empty indication. */
- 	    tp = &Buffers[i + nbuffers];
-@@ -555,7 +557,7 @@ DNew(struct dcache *adc, int page)
-      * DFlush due to lock hierarchy issues */
-     if ((page + 1) * AFS_BUFFER_PAGESIZE > adc->f.chunkBytes) {
- 	afs_AdjustSize(adc, (page + 1) * AFS_BUFFER_PAGESIZE);
--	afs_WriteDCache(adc, 1);
-+	osi_Assert(afs_WriteDCache(adc, 1) == 0);
-     }
-     ObtainWriteLock(&tb->lock, 265);
-     tb->lockers++;
-diff --git a/src/afs/afs_bypasscache.c b/src/afs/afs_bypasscache.c
-index e447024..4dca01c 100644
---- a/src/afs/afs_bypasscache.c
-+++ b/src/afs/afs_bypasscache.c
-@@ -270,49 +270,12 @@ done:
- #ifdef UKERNEL
- typedef void * bypass_page_t;
- 
--#define copy_page(pp, pageoff, rxiov, iovno, iovoff, auio, curiov)	\
--    do { \
--	int dolen = auio->uio_iov[curiov].iov_len - pageoff; \
--	memcpy(((char *)pp) + pageoff,		       \
--	       ((char *)rxiov[iovno].iov_base) + iovoff, dolen);	\
--	auio->uio_resid -= dolen; \
--    } while(0)
--
--#define copy_pages(pp, pageoff, rxiov, iovno, iovoff, auio, curiov)	\
--    do { \
--	int dolen = rxiov[iovno].iov_len - iovoff; \
--	memcpy(((char *)pp) + pageoff,				\
--	       ((char *)rxiov[iovno].iov_base) + iovoff, dolen);	\
--	auio->uio_resid -= dolen;	\
--    } while(0)
--
- #define unlock_and_release_pages(auio)
- #define release_full_page(pp, pageoff)
- 
- #else
- typedef struct page * bypass_page_t;
- 
--#define copy_page(pp, pageoff, rxiov, iovno, iovoff, auio, curiov)	\
--    do { \
--        char *address;						\
--	int dolen = auio->uio_iov[curiov].iov_len - pageoff; \
--	address = kmap_atomic(pp, KM_USER0); \
--	memcpy(address + pageoff, \
--	       (char *)(rxiov[iovno].iov_base) + iovoff, dolen);	\
--	kunmap_atomic(address, KM_USER0); \
--    } while(0)
--
--#define copy_pages(pp, pageoff, rxiov, iovno, iovoff, auio, curiov)	\
--    do { \
--        char *address; \
--	int dolen = rxiov[iovno].iov_len - iovoff; \
--	address = kmap_atomic(pp, KM_USER0); \
--	memcpy(address + pageoff, \
--	       (char *)(rxiov[iovno].iov_base) + iovoff, dolen);	\
--	kunmap_atomic(address, KM_USER0); \
--    } while(0)
--
--
- #define unlock_and_release_pages(auio) \
-     do { \
- 	struct iovec *ciov;	\
-@@ -347,8 +310,38 @@ typedef struct page * bypass_page_t;
- 	    afs_warn("afs_NoCacheFetchProc: page not locked!\n"); \
- 	put_page(pp); /* decrement refcount */ \
-     } while(0)
-+#endif
- 
-+static void
-+afs_bypass_copy_page(bypass_page_t pp, int pageoff, struct iovec *rxiov,
-+	int iovno, int iovoff, struct uio *auio, int curiov, int partial)
-+{
-+    char *address;
-+    int dolen;
-+
-+    if (partial)
-+	dolen = rxiov[iovno].iov_len - iovoff;
-+    else
-+	dolen = auio->uio_iov[curiov].iov_len - pageoff;
-+
-+#if !defined(UKERNEL)
-+# if defined(KMAP_ATOMIC_TAKES_NO_KM_TYPE)
-+    address = kmap_atomic(pp);
-+# else
-+    address = kmap_atomic(pp, KM_USER0);
-+# endif
-+#else
-+    address = pp;
- #endif
-+    memcpy(address + pageoff, (char *)(rxiov[iovno].iov_base) + iovoff, dolen);
-+#if !defined(UKERNEL)
-+# if defined(KMAP_ATOMIC_TAKES_NO_KM_TYPE)
-+    kunmap_atomic(address);
-+# else
-+    kunmap_atomic(address, KM_USER0);
-+# endif
-+#endif
-+}
- 
- /* no-cache prefetch routine */
- static afs_int32
-@@ -447,7 +440,7 @@ afs_NoCacheFetchProc(struct rx_call *acall,
- 		if (pageoff + (rxiov[iovno].iov_len - iovoff) <= auio->uio_iov[curpage].iov_len) {
- 		    /* Copy entire (or rest of) current iovec into current page */
- 		    if (pp)
--			copy_pages(pp, pageoff, rxiov, iovno, iovoff, auio, curpage);
-+			afs_bypass_copy_page(pp, pageoff, rxiov, iovno, iovoff, auio, curpage, 0);
- 		    length -= (rxiov[iovno].iov_len - iovoff);
- 		    pageoff += rxiov[iovno].iov_len - iovoff;
- 		    iovno++;
-@@ -455,7 +448,7 @@ afs_NoCacheFetchProc(struct rx_call *acall,
- 		} else {
- 		    /* Copy only what's needed to fill current page */
- 		    if (pp)
--			copy_page(pp, pageoff, rxiov, iovno, iovoff, auio, curpage);
-+			afs_bypass_copy_page(pp, pageoff, rxiov, iovno, iovoff, auio, curpage, 1);
- 		    length -= (auio->uio_iov[curpage].iov_len - pageoff);
- 		    iovoff += auio->uio_iov[curpage].iov_len - pageoff;
- 		    pageoff = auio->uio_iov[curpage].iov_len;
-@@ -568,7 +561,6 @@ afs_PrefetchNoCache(struct vcache *avc,
- #endif
- 
-     struct afs_conn *tc;
--    afs_int32 i;
-     struct rx_call *tcall;
-     struct tlocal1 {
- 	struct AFSVolSync tsync;
-@@ -588,7 +580,6 @@ afs_PrefetchNoCache(struct vcache *avc,
-       tc = afs_Conn(&avc->f.fid, areq, SHARED_LOCK /* ignored */, &rxconn);
- 	if (tc) {
- 	    avc->callback = tc->srvr->server;
--	    i = osi_Time();
- 	    tcall = rx_NewCall(rxconn);
- #ifdef AFS_64BIT_CLIENT
- 	    if (!afs_serverHasNo64Bit(tc)) {
-diff --git a/src/afs/afs_call.c b/src/afs/afs_call.c
-index 0841090..3d184b5 100644
---- a/src/afs/afs_call.c
-+++ b/src/afs/afs_call.c
-@@ -66,7 +66,9 @@ static int AFS_Running = 0;
- static int afs_CacheInit_Done = 0;
- static int afs_Go_Done = 0;
- extern struct interfaceAddr afs_cb_interface;
-+#ifdef RXK_LISTENER_ENV
- static int afs_RX_Running = 0;
-+#endif
- static int afs_InitSetup_done = 0;
- afs_int32 afs_numcachefiles = -1;
- afs_int32 afs_numfilesperdir = -1;
-@@ -662,7 +664,9 @@ afs_syscall_call(long parm, long parm2, long parm3,
- 		   sizeof(struct afs_uspc_param), code);
- 	namebufsz = mvParam->bufSz;
- 	param1 = afs_osi_Alloc(namebufsz);
-+	osi_Assert(param1 != NULL);
- 	param2 = afs_osi_Alloc(namebufsz);
-+	osi_Assert(param2 != NULL);
- 
- 	while (afs_initState < AFSOP_START_BKG)
- 	    afs_osi_Sleep(&afs_initState);
-@@ -867,6 +871,7 @@ afs_syscall_call(long parm, long parm2, long parm3,
- 	 * home cell flag (0x1 bit) and the nosuid flag (0x2 bit) */
- 	struct afsop_cell *tcell = afs_osi_Alloc(sizeof(struct afsop_cell));
- 
-+	osi_Assert(tcell != NULL);
- 	code = afs_InitDynroot();
- 	if (!code) {
- 	    AFS_COPYIN(AFSKPTR(parm2), (caddr_t)tcell->hosts, sizeof(tcell->hosts),
-@@ -889,6 +894,9 @@ afs_syscall_call(long parm, long parm2, long parm3,
- 	char *tbuffer1 = osi_AllocSmallSpace(AFS_SMALLOCSIZ);
- 	int cflags = parm4;
- 
-+	osi_Assert(tcell != NULL);
-+	osi_Assert(tbuffer != NULL);
-+	osi_Assert(tbuffer1 != NULL);
- 	code = afs_InitDynroot();
- 	if (!code) {
- #if 0
-@@ -1093,6 +1101,9 @@ afs_syscall_call(long parm, long parm2, long parm3,
- 	    afs_osi_Alloc(sizeof(afs_int32) * AFS_MAX_INTERFACE_ADDR);
- 	int i;
- 
-+	osi_Assert(buffer != NULL);
-+	osi_Assert(maskbuffer != NULL);
-+	osi_Assert(mtubuffer != NULL);
- 	/* This is a refresh */
- 	if (count & 0x40000000) {
- 	    count &= ~0x40000000;
-@@ -1158,7 +1169,7 @@ afs_syscall_call(long parm, long parm2, long parm3,
- 
- 	if (refresh) {
- 	    afs_CheckServers(1, NULL);     /* check down servers */
--	    afs_CheckServers(0, NULL);     /* check down servers */
-+	    afs_CheckServers(0, NULL);     /* check up servers */
- 	}
-     }
- #ifdef	AFS_SGI53_ENV
-@@ -1271,6 +1282,8 @@ afs_syscall_call(long parm, long parm2, long parm3,
- 	afs_int32 *kmsg = afs_osi_Alloc(kmsgLen);
- 	char *cellname = afs_osi_Alloc(cellLen);
- 
-+	osi_Assert(kmsg != NULL);
-+	osi_Assert(cellname != NULL);
- #ifndef UKERNEL
- 	afs_osi_MaskUserLoop();
- #endif
-@@ -1373,6 +1386,15 @@ afs_shutdown(void)
-     afs_FlushAllVCaches();
- #endif
- 
-+    afs_termState = AFSOP_STOP_BKG;
-+
-+    afs_warn("BkG... ");
-+    /* Wake-up afs_brsDaemons so that we don't have to wait for a bkg job! */
-+    while (afs_termState == AFSOP_STOP_BKG) {
-+	afs_osi_Wakeup(&afs_brsDaemons);
-+	afs_osi_Sleep(&afs_termState);
-+    }
-+
-     afs_warn("CB... ");
- 
-     afs_termState = AFSOP_STOP_RXCALLBACK;
-@@ -1395,12 +1417,6 @@ afs_shutdown(void)
- 	    afs_osi_Sleep(&afs_termState);
- 	}
-     }
--    afs_warn("BkG... ");
--    /* Wake-up afs_brsDaemons so that we don't have to wait for a bkg job! */
--    while (afs_termState == AFSOP_STOP_BKG) {
--	afs_osi_Wakeup(&afs_brsDaemons);
--	afs_osi_Sleep(&afs_termState);
--    }
-     afs_warn("CTrunc... ");
-     /* Cancel cache truncate daemon. */
-     while (afs_termState == AFSOP_STOP_TRUNCDAEMON) {
-diff --git a/src/afs/afs_callback.c b/src/afs/afs_callback.c
-index d24e070..51b6b61 100644
---- a/src/afs/afs_callback.c
-+++ b/src/afs/afs_callback.c
-@@ -898,6 +898,7 @@ SRXAFSCB_GetXStats(struct rx_call *a_call, afs_int32 a_clientVersionNum,
- 	 */
- 	dataBytes = sizeof(struct afs_CMStats);
- 	dataBuffP = (afs_int32 *) afs_osi_Alloc(dataBytes);
-+	osi_Assert(dataBuffP != NULL);
- 	memcpy((char *)dataBuffP, (char *)&afs_cmstats, dataBytes);
- 	a_dataP->AFSCB_CollData_len = dataBytes >> 2;
- 	a_dataP->AFSCB_CollData_val = dataBuffP;
-@@ -918,6 +919,7 @@ SRXAFSCB_GetXStats(struct rx_call *a_call, afs_int32 a_clientVersionNum,
- 	afs_CountServers();
- 	dataBytes = sizeof(afs_stats_cmperf);
- 	dataBuffP = (afs_int32 *) afs_osi_Alloc(dataBytes);
-+	osi_Assert(dataBuffP != NULL);
- 	memcpy((char *)dataBuffP, (char *)&afs_stats_cmperf, dataBytes);
- 	a_dataP->AFSCB_CollData_len = dataBytes >> 2;
- 	a_dataP->AFSCB_CollData_val = dataBuffP;
-@@ -942,6 +944,7 @@ SRXAFSCB_GetXStats(struct rx_call *a_call, afs_int32 a_clientVersionNum,
- 
- 	dataBytes = sizeof(afs_stats_cmfullperf);
- 	dataBuffP = (afs_int32 *) afs_osi_Alloc(dataBytes);
-+	osi_Assert(dataBuffP != NULL);
- 	memcpy((char *)dataBuffP, (char *)(&afs_stats_cmfullperf), dataBytes);
- 	a_dataP->AFSCB_CollData_len = dataBytes >> 2;
- 	a_dataP->AFSCB_CollData_val = dataBuffP;
-@@ -1295,8 +1298,8 @@ SRXAFSCB_GetCellServDB(struct rx_call *a_call, afs_int32 a_index,
- 	p_name = tcell->cellName;
- 	for (j = 0; j < AFSMAXCELLHOSTS && tcell->cellHosts[j]; j++);
- 	i = strlen(p_name);
--	a_hosts->serverList_val =
--	    (afs_int32 *) afs_osi_Alloc(j * sizeof(afs_int32));
-+	a_hosts->serverList_val = afs_osi_Alloc(j * sizeof(afs_int32));
-+	osi_Assert(a_hosts->serverList_val != NULL);
- 	a_hosts->serverList_len = j;
- 	for (j = 0; j < AFSMAXCELLHOSTS && tcell->cellHosts[j]; j++)
- 	    a_hosts->serverList_val[j] =
-@@ -1304,7 +1307,7 @@ SRXAFSCB_GetCellServDB(struct rx_call *a_call, afs_int32 a_index,
- 	afs_PutCell(tcell, READ_LOCK);
-     }
- 
--    t_name = (char *)afs_osi_Alloc(i + 1);
-+    t_name = afs_osi_Alloc(i + 1);
-     if (t_name == NULL) {
- 	afs_osi_Free(a_hosts->serverList_val, (j * sizeof(afs_int32)));
- 	RX_AFS_GUNLOCK();
-@@ -1362,7 +1365,7 @@ SRXAFSCB_GetLocalCell(struct rx_call *a_call, char **a_name)
- 	plen = strlen(p_name);
-     else
- 	plen = 0;
--    t_name = (char *)afs_osi_Alloc(plen + 1);
-+    t_name = afs_osi_Alloc(plen + 1);
-     if (t_name == NULL) {
- 	if (tcell)
- 	    afs_PutCell(tcell, READ_LOCK);
-@@ -1459,7 +1462,7 @@ SRXAFSCB_GetCacheConfig(struct rx_call *a_call, afs_uint32 callerVersion,
-      * Currently only support version 1
-      */
-     allocsize = sizeof(cm_initparams_v1);
--    t_config = (afs_uint32 *) afs_osi_Alloc(allocsize);
-+    t_config = afs_osi_Alloc(allocsize);
-     if (t_config == NULL) {
- 	RX_AFS_GUNLOCK();
- 	return ENOMEM;
-@@ -1600,8 +1603,8 @@ SRXAFSCB_GetCellByNum(struct rx_call *a_call, afs_int32 a_cellnum,
- 
-     for (sn = 0; sn < AFSMAXCELLHOSTS && tcell->cellHosts[sn]; sn++);
-     a_hosts->serverList_len = sn;
--    a_hosts->serverList_val =
--	(afs_int32 *) afs_osi_Alloc(sn * sizeof(afs_int32));
-+    a_hosts->serverList_val = afs_osi_Alloc(sn * sizeof(afs_int32));
-+    osi_Assert(a_hosts->serverList_val != NULL);
- 
-     for (i = 0; i < sn; i++)
- 	a_hosts->serverList_val[i] = ntohl(tcell->cellHosts[i]->addr->sa_ip);
-@@ -1642,7 +1645,8 @@ SRXAFSCB_TellMeAboutYourself(struct rx_call *a_call,
-     RX_AFS_GUNLOCK();
- 
-     dataBytes = 1 * sizeof(afs_uint32);
--    dataBuffP = (afs_uint32 *) afs_osi_Alloc(dataBytes);
-+    dataBuffP = afs_osi_Alloc(dataBytes);
-+    osi_Assert(dataBuffP != NULL);
-     dataBuffP[0] = CLIENT_CAPABILITY_ERRORTRANS;
-     capabilities->Capabilities_len = dataBytes / sizeof(afs_uint32);
-     capabilities->Capabilities_val = dataBuffP;
-diff --git a/src/afs/afs_cell.c b/src/afs/afs_cell.c
-index f688689..3e4259a 100644
---- a/src/afs/afs_cell.c
-+++ b/src/afs/afs_cell.c
-@@ -57,7 +57,11 @@ afs_StopAFSDB(void)
- 	afs_osi_Wakeup(&afsdb_req);
-     } else {
- 	afsdb_handler_shutdown = 1;
-+#if defined(AFS_SUN5_ENV) || defined(RXK_LISTENER_ENV) || defined(RXK_UPCALL_ENV)
- 	afs_termState = AFSOP_STOP_RXEVENT;
-+#else
-+	afs_termState = AFSOP_STOP_COMPLETE;
-+#endif
- 	afs_osi_Wakeup(&afs_termState);
-     }
- }
-@@ -229,7 +233,8 @@ afs_cellname_new(char *name, afs_int32 cellnum)
-     if (cellnum == 0)
- 	cellnum = afs_cellnum_next;
- 
--    cn = (struct cell_name *)afs_osi_Alloc(sizeof(*cn));
-+    cn = afs_osi_Alloc(sizeof(*cn));
-+    osi_Assert(cn != NULL);
-     cn->next = afs_cellname_head;
-     cn->cellnum = cellnum;
-     cn->cellname = afs_strdup(name);
-@@ -326,7 +331,6 @@ afs_cellname_init(afs_dcache_id_t *inode, int lookupcode)
- 
-     while (1) {
- 	afs_int32 cellnum, clen, magic;
--	struct cell_name *cn;
- 	char *cellname;
- 
- 	cc = afs_osi_Read(tfile, off, &magic, sizeof(magic));
-@@ -364,7 +368,7 @@ afs_cellname_init(afs_dcache_id_t *inode, int lookupcode)
- 	    break;
- 	}
- 
--	cn = afs_cellname_new(cellname, cellnum);
-+	afs_cellname_new(cellname, cellnum);
- 	afs_osi_Free(cellname, clen + 1);
-     }
- 
-@@ -511,7 +515,8 @@ afs_NewCellAlias(char *alias, char *cell)
-     }
- 
-     UpgradeSToWLock(&afs_xcell, 682);
--    tc = (struct cell_alias *)afs_osi_Alloc(sizeof(struct cell_alias));
-+    tc = afs_osi_Alloc(sizeof(struct cell_alias));
-+    osi_Assert(tc != NULL);
-     tc->alias = afs_strdup(alias);
-     tc->cell = afs_strdup(cell);
-     tc->next = afs_cellalias_head;
-@@ -913,7 +918,8 @@ afs_NewCell(char *acellName, afs_int32 * acellHosts, int aflags,
-     if (tc) {
- 	aflags &= ~CNoSUID;
-     } else {
--	tc = (struct cell *)afs_osi_Alloc(sizeof(struct cell));
-+	tc = afs_osi_Alloc(sizeof(struct cell));
-+	osi_Assert(tc != NULL);
- 	memset(tc, 0, sizeof(*tc));
- 	tc->cellName = afs_strdup(acellName);
- 	tc->fsport = AFS_FSPORT;
-diff --git a/src/afs/afs_chunkops.h b/src/afs/afs_chunkops.h
-index d3a5090..2aa19c1 100644
---- a/src/afs/afs_chunkops.h
-+++ b/src/afs/afs_chunkops.h
-@@ -63,8 +63,7 @@ struct afs_cacheOps {
- 		  int noLock);
-     int (*vwrite) (struct vcache * avc, struct uio * auio, int aio,
- 		   afs_ucred_t * acred, int noLock);
--    struct dcache *(*GetDSlot) (afs_int32 aslot,
--				struct dcache * tmpdc);
-+    struct dcache *(*GetDSlot) (afs_int32 aslot, int needvalid);
-     struct volume *(*GetVolSlot) (void);
-     int (*HandleLink) (struct vcache * avc, struct vrequest * areq);
- };
-@@ -75,7 +74,8 @@ struct afs_cacheOps {
- #define	afs_CFileRead(file, offset, data, size) (*(afs_cacheType->fread))(file, offset, data, size)
- #define	afs_CFileWrite(file, offset, data, size) (*(afs_cacheType->fwrite))(file, offset, data, size)
- #define	afs_CFileClose(handle)		(*(afs_cacheType->close))(handle)
--#define	afs_GetDSlot(slot, adc)		(*(afs_cacheType->GetDSlot))(slot, adc)
-+#define	afs_GetValidDSlot(slot)	(*(afs_cacheType->GetDSlot))(slot, 1)
-+#define	afs_GetNewDSlot(slot)	(*(afs_cacheType->GetDSlot))(slot, 0)
- #define	afs_GetVolSlot()		(*(afs_cacheType->GetVolSlot))()
- #define	afs_HandleLink(avc, areq)	(*(afs_cacheType->HandleLink))(avc, areq)
- 
-diff --git a/src/afs/afs_conn.c b/src/afs/afs_conn.c
-index 108df40..692e7c2 100644
---- a/src/afs/afs_conn.c
-+++ b/src/afs/afs_conn.c
-@@ -148,6 +148,7 @@ afs_Conn(struct VenusFid *afid, struct vrequest *areq,
- 
-     /* First is always lowest rank, if it's up */
-     if ((tv->status[0] == not_busy) && tv->serverHost[0]
-+	&& tv->serverHost[0]->addr
- 	&& !(tv->serverHost[0]->addr->sa_flags & SRVR_ISDOWN) &&
- 	!(((areq->idleError > 0) || (areq->tokenError > 0))
- 	  && (areq->skipserver[0] == 1)))
-@@ -269,7 +270,8 @@ afs_ConnBySA(struct srvAddr *sap, unsigned short aport, afs_int32 acell,
- 	 * gets set, marking the time of its ``birth''.
- 	 */
- 	UpgradeSToWLock(&afs_xconn, 37);
--	tc = (struct afs_conn *)afs_osi_Alloc(sizeof(struct afs_conn));
-+	tc = afs_osi_Alloc(sizeof(struct afs_conn));
-+	osi_Assert(tc != NULL);
- 	memset(tc, 0, sizeof(struct afs_conn));
- 
- 	tc->user = tu;
-diff --git a/src/afs/afs_daemons.c b/src/afs/afs_daemons.c
-index 23655e3..dd710b7 100644
---- a/src/afs/afs_daemons.c
-+++ b/src/afs/afs_daemons.c
-@@ -90,7 +90,7 @@ afs_CheckServerDaemon(void)
-     last10MinCheck = lastCheck = osi_Time();
-     while (1) {
- 	if (afs_termState == AFSOP_STOP_CS) {
--	    afs_termState = AFSOP_STOP_BKG;
-+	    afs_termState = AFSOP_STOP_TRUNCDAEMON;
- 	    afs_osi_Wakeup(&afs_termState);
- 	    break;
- 	}
-@@ -108,7 +108,7 @@ afs_CheckServerDaemon(void)
- 	}
- 	/* shutdown check. */
- 	if (afs_termState == AFSOP_STOP_CS) {
--	    afs_termState = AFSOP_STOP_BKG;
-+	    afs_termState = AFSOP_STOP_TRUNCDAEMON;
- 	    afs_osi_Wakeup(&afs_termState);
- 	    break;
- 	}
-@@ -308,7 +308,7 @@ afs_Daemon(void)
- 	    if (afs_CheckServerDaemonStarted)
- 		afs_termState = AFSOP_STOP_CS;
- 	    else
--		afs_termState = AFSOP_STOP_BKG;
-+		afs_termState = AFSOP_STOP_TRUNCDAEMON;
- 	    afs_osi_Wakeup(&afs_termState);
- 	    return;
- 	}
-@@ -396,8 +396,13 @@ afs_CheckRootVolume(void)
- 		    spin_lock(&dp->d_lock);
- #endif
- #endif
-+#if defined(D_ALIAS_IS_HLIST)
-+		    hlist_del_init(&dp->d_alias);
-+		    hlist_add_head(&dp->d_alias, &(AFSTOV(vcp)->i_dentry));
-+#else
- 		    list_del_init(&dp->d_alias);
- 		    list_add(&dp->d_alias, &(AFSTOV(vcp)->i_dentry));
-+#endif
- 		    dp->d_inode = AFSTOV(vcp);
- #if defined(AFS_LINUX24_ENV)
- #if defined(AFS_LINUX26_ENV)
-@@ -1045,7 +1050,7 @@ afs_BackgroundDaemon(void)
- 
- 	if (afs_termState == AFSOP_STOP_BKG) {
- 	    if (--afs_nbrs <= 0)
--		afs_termState = AFSOP_STOP_TRUNCDAEMON;
-+		afs_termState = AFSOP_STOP_RXCALLBACK;
- 	    ReleaseWriteLock(&afs_xbrs);
- 	    afs_osi_Wakeup(&afs_termState);
- #ifdef AFS_DARWIN80_ENV
-@@ -1176,7 +1181,7 @@ afs_sgidaemon(void)
- 	    SPUNLOCK(afs_sgibklock, s);
- 	    AFS_GLOCK();
- 	    tdc->dflags &= ~DFEntryMod;
--	    afs_WriteDCache(tdc, 1);
-+	    osi_Assert(afs_WriteDCache(tdc, 1) == 0);
- 	    AFS_GUNLOCK();
- 	    s = SPLOCK(afs_sgibklock);
- 	}
-diff --git a/src/afs/afs_dcache.c b/src/afs/afs_dcache.c
-index b5773d0..ff5ee5c 100644
---- a/src/afs/afs_dcache.c
-+++ b/src/afs/afs_dcache.c
-@@ -672,15 +672,17 @@ afs_GetDownD(int anumber, int *aneedSpace, afs_int32 buckethint)
- 	 * during the truncate operation.
- 	 */
- 	for (i = 0; i < victimPtr; i++) {
--	    tdc = afs_GetDSlot(victims[i], 0);
-+	    tdc = afs_GetValidDSlot(victims[i]);
- 	    /* We got tdc->tlock(R) here */
--	    if (tdc->refCount == 1)
-+	    if (tdc && tdc->refCount == 1)
- 		victimDCs[i] = tdc;
- 	    else
- 		victimDCs[i] = 0;
--	    ReleaseReadLock(&tdc->tlock);
--	    if (!victimDCs[i])
--		afs_PutDCache(tdc);
-+	    if (tdc) {
-+		ReleaseReadLock(&tdc->tlock);
-+		if (!victimDCs[i])
-+		    afs_PutDCache(tdc);
-+	    }
- 	}
- 	for (i = 0; i < victimPtr; i++) {
- 	    /* q is first elt in dcache entry */
-@@ -689,7 +691,7 @@ afs_GetDownD(int anumber, int *aneedSpace, afs_int32 buckethint)
- 	     * have to verify, before proceeding, that there are no other
- 	     * references to this dcache entry, even now.  Note that we
- 	     * compare with 1, since we bumped it above when we called
--	     * afs_GetDSlot to preserve the entry's identity.
-+	     * afs_GetValidDSlot to preserve the entry's identity.
- 	     */
- 	    if (tdc && tdc->refCount == 1) {
- 		unsigned char chunkFlags;
-@@ -1085,7 +1087,7 @@ afs_FreeDiscardedDCache(void)
-     /*
-      * Get an entry from the list of discarded cache elements
-      */
--    tdc = afs_GetDSlot(afs_discardDCList, 0);
-+    tdc = afs_GetNewDSlot(afs_discardDCList);
-     osi_Assert(tdc->refCount == 1);
-     ReleaseReadLock(&tdc->tlock);
- 
-@@ -1201,7 +1203,7 @@ afs_GetDownDSlot(int anumber)
- 		}
- #else
- 		tdc->dflags &= ~DFEntryMod;
--		afs_WriteDCache(tdc, 1);
-+		osi_Assert(afs_WriteDCache(tdc, 1) == 0);
- #endif
- 	    }
- 
-@@ -1311,7 +1313,8 @@ afs_TryToSmush(struct vcache *avc, afs_ucred_t *acred, int sync)
- 	i = afs_dvnextTbl[index];	/* next pointer this hash table */
- 	if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
- 	    int releaseTlock = 1;
--	    tdc = afs_GetDSlot(index, NULL);
-+	    tdc = afs_GetValidDSlot(index);
-+	    if (!tdc) osi_Panic("afs_TryToSmush tdc");
- 	    if (!FidCmp(&tdc->f.fid, &avc->f.fid)) {
- 		if (sync) {
- 		    if ((afs_indexFlags[index] & IFDataMod) == 0
-@@ -1400,12 +1403,14 @@ afs_DCacheMissingChunks(struct vcache *avc)
-     for (index = afs_dvhashTbl[i]; index != NULLIDX; index = i) {
-         i = afs_dvnextTbl[index];
-         if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
--            tdc = afs_GetDSlot(index, NULL);
--            if (!FidCmp(&tdc->f.fid, &avc->f.fid)) {
--		totalChunks--;
--            }
--            ReleaseReadLock(&tdc->tlock);
--            afs_PutDCache(tdc);
-+            tdc = afs_GetValidDSlot(index);
-+	    if (tdc) {
-+		if (!FidCmp(&tdc->f.fid, &avc->f.fid)) {
-+		    totalChunks--;
-+		}
-+		ReleaseReadLock(&tdc->tlock);
-+		afs_PutDCache(tdc);
-+	    }
-         }
-     }
-     ReleaseWriteLock(&afs_xdcache);
-@@ -1453,7 +1458,8 @@ afs_FindDCache(struct vcache *avc, afs_size_t abyte)
-     ObtainWriteLock(&afs_xdcache, 278);
-     for (index = afs_dchashTbl[i]; index != NULLIDX;) {
- 	if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
--	    tdc = afs_GetDSlot(index, NULL);
-+	    tdc = afs_GetValidDSlot(index);
-+	    if (!tdc) osi_Panic("afs_FindDCache tdc");
- 	    ReleaseReadLock(&tdc->tlock);
- 	    if (!FidCmp(&tdc->f.fid, &avc->f.fid) && chunk == tdc->f.chunk) {
- 		break;		/* leaving refCount high for caller */
-@@ -1501,7 +1507,7 @@ afs_AllocDCache(struct vcache *avc, afs_int32 chunk, afs_int32 lock,
- 	|| ((lock & 2) && afs_freeDCList != NULLIDX)) {
- 
- 	afs_indexFlags[afs_freeDCList] &= ~IFFree;
--	tdc = afs_GetDSlot(afs_freeDCList, 0);
-+	tdc = afs_GetNewDSlot(afs_freeDCList);
- 	osi_Assert(tdc->refCount == 1);
- 	ReleaseReadLock(&tdc->tlock);
- 	ObtainWriteLock(&tdc->lock, 604);
-@@ -1509,7 +1515,7 @@ afs_AllocDCache(struct vcache *avc, afs_int32 chunk, afs_int32 lock,
- 	afs_freeDCCount--;
-     } else {
- 	afs_indexFlags[afs_discardDCList] &= ~IFDiscarded;
--	tdc = afs_GetDSlot(afs_discardDCList, 0);
-+	tdc = afs_GetNewDSlot(afs_discardDCList);
- 	osi_Assert(tdc->refCount == 1);
- 	ReleaseReadLock(&tdc->tlock);
- 	ObtainWriteLock(&tdc->lock, 605);
-@@ -1627,7 +1633,6 @@ afs_GetDCache(struct vcache *avc, afs_size_t abyte,
-     afs_int32 index;
-     afs_int32 us;
-     afs_int32 chunk;
--    afs_size_t maxGoodLength;	/* amount of good data at server */
-     afs_size_t Position = 0;
-     afs_int32 size, tlen;	/* size of segment to transfer */
-     struct afs_FetchOutput *tsmall = 0;
-@@ -1769,7 +1774,11 @@ afs_GetDCache(struct vcache *avc, afs_size_t abyte,
- 	us = NULLIDX;
- 	for (index = afs_dchashTbl[i]; index != NULLIDX;) {
- 	    if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
--		tdc = afs_GetDSlot(index, NULL);
-+		tdc = afs_GetValidDSlot(index);
-+		if (!tdc) {
-+		    ReleaseWriteLock(&afs_xdcache);
-+		    goto done;
-+		}
- 		ReleaseReadLock(&tdc->tlock);
- 		/*
- 		 * Locks held:
-@@ -2077,10 +2086,6 @@ afs_GetDCache(struct vcache *avc, afs_size_t abyte,
- 	    goto RetryGetDCache;
- 	}
- 
--	/* Do not fetch data beyond truncPos. */
--	maxGoodLength = avc->f.m.Length;
--	if (avc->f.truncPos < maxGoodLength)
--	    maxGoodLength = avc->f.truncPos;
- 	Position = AFS_CHUNKBASE(abyte);
- 	if (vType(avc) == VDIR) {
- 	    size = avc->f.m.Length;
-@@ -2090,16 +2095,49 @@ afs_GetDCache(struct vcache *avc, afs_size_t abyte,
- 	    }
- 	    size = 999999999;	/* max size for transfer */
- 	} else {
-+	    afs_size_t maxGoodLength;
-+
-+	    /* estimate how much data we're expecting back from the server,
-+	     * and reserve space in the dcache entry for it */
-+
-+	    maxGoodLength = avc->f.m.Length;
-+	    if (avc->f.truncPos < maxGoodLength)
-+		maxGoodLength = avc->f.truncPos;
-+
- 	    size = AFS_CHUNKSIZE(abyte);	/* expected max size */
--	    /* don't read past end of good data on server */
- 	    if (Position + size > maxGoodLength)
- 		size = maxGoodLength - Position;
- 	    if (size < 0)
- 		size = 0;	/* Handle random races */
- 	    if (size > tdc->f.chunkBytes) {
--		/* pre-reserve space for file */
-+		/* pre-reserve estimated space for file */
- 		afs_AdjustSize(tdc, size);	/* changes chunkBytes */
--		/* max size for transfer still in size */
-+	    }
-+
-+	    if (size) {
-+		/* For the actual fetch, do not limit the request to the
-+		 * length of the file. If this results in a read past EOF on
-+		 * the server, the server will just reply with less data than
-+		 * requested. If we limit ourselves to only requesting data up
-+		 * to the avc file length, we open ourselves up to races if the
-+		 * file is extended on the server at about the same time.
-+		 *
-+		 * However, we must restrict ourselves to the avc->f.truncPos
-+		 * length, since this represents an outstanding local
-+		 * truncation of the file that will be committed to the
-+		 * fileserver when we actually write the fileserver contents.
-+		 * If we do not restrict the fetch length based on
-+		 * avc->f.truncPos, a different truncate operation extending
-+		 * the file length could cause the old data after
-+		 * avc->f.truncPos to reappear, instead of extending the file
-+		 * with NUL bytes. */
-+		size = AFS_CHUNKSIZE(abyte);
-+		if (Position + size > avc->f.truncPos) {
-+		    size = avc->f.truncPos - Position;
-+		}
-+		if (size < 0) {
-+		    size = 0;
-+		}
- 	    }
- 	}
- 	if (afs_mariner && !tdc->f.chunk)
-@@ -2523,7 +2561,7 @@ afs_WriteThroughDSlots(void)
- 	    if (wrLock && (tdc->dflags & DFEntryMod)) {
- 		tdc->dflags &= ~DFEntryMod;
- 		ObtainWriteLock(&afs_xdcache, 620);
--		afs_WriteDCache(tdc, 1);
-+		osi_Assert(afs_WriteDCache(tdc, 1) == 0);
- 		ReleaseWriteLock(&afs_xdcache);
- 		touchedit = 1;
- 	    }
-@@ -2561,14 +2599,14 @@ afs_WriteThroughDSlots(void)
-  *
-  * Parameters:
-  *	aslot : Dcache slot to look at.
-- *	tmpdc : Ptr to dcache entry.
-+ *      needvalid : Whether the specified slot should already exist
-  *
-  * Environment:
-  *	Must be called with afs_xdcache write-locked.
-  */
- 
- struct dcache *
--afs_MemGetDSlot(afs_int32 aslot, struct dcache *tmpdc)
-+afs_MemGetDSlot(afs_int32 aslot, int needvalid)
- {
-     struct dcache *tdc;
-     int existing = 0;
-@@ -2588,30 +2626,32 @@ afs_MemGetDSlot(afs_int32 aslot, struct dcache *tmpdc)
- 	ConvertWToRLock(&tdc->tlock);
- 	return tdc;
-     }
--    if (tmpdc == NULL) {
--	if (!afs_freeDSList)
--	    afs_GetDownDSlot(4);
--	if (!afs_freeDSList) {
--	    /* none free, making one is better than a panic */
--	    afs_stats_cmperf.dcacheXAllocs++;	/* count in case we have a leak */
--	    tdc = (struct dcache *)afs_osi_Alloc(sizeof(struct dcache));
-+
-+    /* if 'needvalid' is true, the slot must already exist and be populated
-+     * somewhere. for memcache, the only place that dcache entries exist is
-+     * in memory, so if we did not find it above, something is very wrong. */
-+    osi_Assert(!needvalid);
-+
-+    if (!afs_freeDSList)
-+	afs_GetDownDSlot(4);
-+    if (!afs_freeDSList) {
-+	/* none free, making one is better than a panic */
-+	afs_stats_cmperf.dcacheXAllocs++;	/* count in case we have a leak */
-+	tdc = afs_osi_Alloc(sizeof(struct dcache));
-+	osi_Assert(tdc != NULL);
- #ifdef	KERNEL_HAVE_PIN
--	    pin((char *)tdc, sizeof(struct dcache));	/* XXX */
-+	pin((char *)tdc, sizeof(struct dcache));	/* XXX */
- #endif
--	} else {
--	    tdc = afs_freeDSList;
--	    afs_freeDSList = (struct dcache *)tdc->lruq.next;
--	    existing = 1;
--	}
--	tdc->dflags = 0;	/* up-to-date, not in free q */
--	tdc->mflags = 0;
--	QAdd(&afs_DLRU, &tdc->lruq);
--	if (tdc->lruq.prev == &tdc->lruq)
--	    osi_Panic("lruq 3");
-     } else {
--	tdc = tmpdc;
--	tdc->f.states = 0;
-+	tdc = afs_freeDSList;
-+	afs_freeDSList = (struct dcache *)tdc->lruq.next;
-+	existing = 1;
-     }
-+    tdc->dflags = 0;	/* up-to-date, not in free q */
-+    tdc->mflags = 0;
-+    QAdd(&afs_DLRU, &tdc->lruq);
-+    if (tdc->lruq.prev == &tdc->lruq)
-+	osi_Panic("lruq 3");
- 
-     /* initialize entry */
-     tdc->f.fid.Cell = 0;
-@@ -2635,8 +2675,7 @@ afs_MemGetDSlot(afs_int32 aslot, struct dcache *tmpdc)
-     AFS_RWLOCK_INIT(&tdc->mflock, "dcache flock");
-     ObtainReadLock(&tdc->tlock);
- 
--    if (tmpdc == NULL)
--	afs_indexTable[aslot] = tdc;
-+    afs_indexTable[aslot] = tdc;
-     return tdc;
- 
- }				/*afs_MemGetDSlot */
-@@ -2652,18 +2691,19 @@ unsigned int last_error = 0, lasterrtime = 0;
-  *
-  * Parameters:
-  *	aslot : Dcache slot to look at.
-- *	tmpdc : Ptr to dcache entry.
-+ *      needvalid : Whether the specified slot should already exist
-  *
-  * Environment:
-  *	afs_xdcache lock write-locked.
-  */
- struct dcache *
--afs_UFSGetDSlot(afs_int32 aslot, struct dcache *tmpdc)
-+afs_UFSGetDSlot(afs_int32 aslot, int needvalid)
- {
-     afs_int32 code;
-     struct dcache *tdc;
-     int existing = 0;
-     int entryok;
-+    int off;
- 
-     AFS_STATCNT(afs_UFSGetDSlot);
-     if (CheckLock(&afs_xdcache) != -1)
-@@ -2680,49 +2720,74 @@ afs_UFSGetDSlot(afs_int32 aslot, struct dcache *tmpdc)
- 	ConvertWToRLock(&tdc->tlock);
- 	return tdc;
-     }
-+
-     /* otherwise we should read it in from the cache file */
--    /*
--     * If we weren't passed an in-memory region to place the file info,
--     * we have to allocate one.
--     */
--    if (tmpdc == NULL) {
--	if (!afs_freeDSList)
--	    afs_GetDownDSlot(4);
--	if (!afs_freeDSList) {
--	    /* none free, making one is better than a panic */
--	    afs_stats_cmperf.dcacheXAllocs++;	/* count in case we have a leak */
--	    tdc = (struct dcache *)afs_osi_Alloc(sizeof(struct dcache));
-+    if (!afs_freeDSList)
-+	afs_GetDownDSlot(4);
-+    if (!afs_freeDSList) {
-+	/* none free, making one is better than a panic */
-+	afs_stats_cmperf.dcacheXAllocs++;	/* count in case we have a leak */
-+	tdc = afs_osi_Alloc(sizeof(struct dcache));
-+	osi_Assert(tdc != NULL);
- #ifdef	KERNEL_HAVE_PIN
--	    pin((char *)tdc, sizeof(struct dcache));	/* XXX */
-+	pin((char *)tdc, sizeof(struct dcache));	/* XXX */
- #endif
--	} else {
--	    tdc = afs_freeDSList;
--	    afs_freeDSList = (struct dcache *)tdc->lruq.next;
--	    existing = 1;
--	}
--	tdc->dflags = 0;	/* up-to-date, not in free q */
--	tdc->mflags = 0;
--	QAdd(&afs_DLRU, &tdc->lruq);
--	if (tdc->lruq.prev == &tdc->lruq)
--	    osi_Panic("lruq 3");
-     } else {
--	tdc = tmpdc;
--	tdc->f.states = 0;
-+	tdc = afs_freeDSList;
-+	afs_freeDSList = (struct dcache *)tdc->lruq.next;
-+	existing = 1;
-     }
-+    tdc->dflags = 0;	/* up-to-date, not in free q */
-+    tdc->mflags = 0;
-+    QAdd(&afs_DLRU, &tdc->lruq);
-+    if (tdc->lruq.prev == &tdc->lruq)
-+	osi_Panic("lruq 3");
- 
-     /*
-      * Seek to the aslot'th entry and read it in.
-      */
-+    off = sizeof(struct fcache)*aslot + sizeof(struct afs_fheader);
-     code =
- 	afs_osi_Read(afs_cacheInodep,
--		     sizeof(struct fcache) * aslot +
--		     sizeof(struct afs_fheader), (char *)(&tdc->f),
-+		     off, (char *)(&tdc->f),
- 		     sizeof(struct fcache));
-     entryok = 1;
--    if (code != sizeof(struct fcache))
-+    if (code != sizeof(struct fcache)) {
- 	entryok = 0;
--    if (!afs_CellNumValid(tdc->f.fid.Cell))
-+#if defined(KERNEL_HAVE_UERROR)
-+	last_error = getuerror();
-+#endif
-+	lasterrtime = osi_Time();
-+	if (needvalid) {
-+	    struct osi_stat tstat;
-+	    if (afs_osi_Stat(afs_cacheInodep, &tstat)) {
-+		tstat.size = -1;
-+	    }
-+	    afs_warn("afs: disk cache read error in CacheItems off %d/%d "
-+	             "code %d/%d\n",
-+	             off, (int)tstat.size,
-+	             (int)code, (int)sizeof(struct fcache));
-+	    /* put tdc back on the free dslot list */
-+	    QRemove(&tdc->lruq);
-+	    tdc->index = NULLIDX;
-+	    tdc->lruq.next = (struct afs_q *)afs_freeDSList;
-+	    afs_freeDSList = tdc;
-+	    return NULL;
-+	}
-+    }
-+    if (!afs_CellNumValid(tdc->f.fid.Cell)) {
- 	entryok = 0;
-+	if (needvalid) {
-+	    osi_Panic("afs: needed valid dcache but index %d off %d has "
-+	              "invalid cell num %d\n",
-+	              (int)aslot, off, (int)tdc->f.fid.Cell);
-+	}
-+    }
-+
-+    if (needvalid && tdc->f.fid.Fid.Volume == 0) {
-+	osi_Panic("afs: invalid zero-volume dcache entry at slot %d off %d",
-+	          (int)aslot, off);
-+    }
- 
-     if (!entryok) {
- 	tdc->f.fid.Cell = 0;
-@@ -2730,10 +2795,6 @@ afs_UFSGetDSlot(afs_int32 aslot, struct dcache *tmpdc)
- 	tdc->f.chunk = -1;
- 	hones(tdc->f.versionNo);
- 	tdc->dflags |= DFEntryMod;
--#if defined(KERNEL_HAVE_UERROR)
--	last_error = getuerror();
--#endif
--	lasterrtime = osi_Time();
- 	afs_indexUnique[aslot] = tdc->f.fid.Fid.Unique;
- 	tdc->f.states &= ~(DRO|DBackup|DRW);
- 	afs_DCMoveBucket(tdc, 0, 0);
-@@ -2770,8 +2831,7 @@ afs_UFSGetDSlot(afs_int32 aslot, struct dcache *tmpdc)
-      * If we didn't read into a temporary dcache region, update the
-      * slot pointer table.
-      */
--    if (tmpdc == NULL)
--	afs_indexTable[aslot] = tdc;
-+    afs_indexTable[aslot] = tdc;
-     return tdc;
- 
- }				/*afs_UFSGetDSlot */
-@@ -2802,6 +2862,19 @@ afs_WriteDCache(struct dcache *adc, int atime)
-     osi_Assert(WriteLocked(&afs_xdcache));
-     if (atime)
- 	adc->f.modTime = osi_Time();
-+
-+    if ((afs_indexFlags[adc->index] & (IFFree | IFDiscarded)) == 0 &&
-+        adc->f.fid.Fid.Volume == 0) {
-+	/* If a dcache slot is not on the free or discard list, it must be
-+	 * in the hash table. Thus, the volume must be non-zero, since that
-+	 * is how we determine whether or not to unhash the entry when kicking
-+	 * it out of the cache. Do this check now, since otherwise this can
-+	 * cause hash table corruption and a panic later on after we read the
-+	 * entry back in. */
-+	osi_Panic("afs_WriteDCache zero volume index %d flags 0x%x\n",
-+	          adc->index, (unsigned)afs_indexFlags[adc->index]);
-+    }
-+
-     /*
-      * Seek to the right dcache slot and write the in-memory image out to disk.
-      */
-@@ -2811,8 +2884,12 @@ afs_WriteDCache(struct dcache *adc, int atime)
- 		      sizeof(struct fcache) * adc->index +
- 		      sizeof(struct afs_fheader), (char *)(&adc->f),
- 		      sizeof(struct fcache));
--    if (code != sizeof(struct fcache))
-+    if (code != sizeof(struct fcache)) {
-+	afs_warn("afs: failed to write to CacheItems off %ld code %d/%d\n",
-+	         (long)(sizeof(struct fcache) * adc->index + sizeof(struct afs_fheader)),
-+	         (int)code, (int)sizeof(struct fcache));
- 	return EIO;
-+    }
-     return 0;
- }
- 
-@@ -2861,7 +2938,6 @@ afs_wakeup(struct vcache *avc)
-     return 0;
- }
- 
--
- /*!
-  * Given a file name and inode, set up that file to be an
-  * active member in the AFS cache.  This also involves checking
-@@ -2889,62 +2965,67 @@ afs_InitCacheFile(char *afile, ino_t ainode)
- 	return EINVAL;
- 
-     ObtainWriteLock(&afs_xdcache, 282);
--    tdc = afs_GetDSlot(index, NULL);
-+    tdc = afs_GetNewDSlot(index);
-     ReleaseReadLock(&tdc->tlock);
-     ReleaseWriteLock(&afs_xdcache);
- 
-     ObtainWriteLock(&tdc->lock, 621);
-     ObtainWriteLock(&afs_xdcache, 622);
--    if (afile) {
--	code = afs_LookupInodeByPath(afile, &tdc->f.inode.ufs, NULL);
--	if (code) {
--	    ReleaseWriteLock(&afs_xdcache);
--	    ReleaseWriteLock(&tdc->lock);
--	    afs_PutDCache(tdc);
--	    return code;
--	}
-+    if (!afile && !ainode) {
-+	tfile = NULL;
-+	fileIsBad = 1;
-     } else {
--	/* Add any other 'complex' inode types here ... */
-+	if (afile) {
-+	    code = afs_LookupInodeByPath(afile, &tdc->f.inode.ufs, NULL);
-+	    if (code) {
-+		ReleaseWriteLock(&afs_xdcache);
-+		ReleaseWriteLock(&tdc->lock);
-+		afs_PutDCache(tdc);
-+		return code;
-+	    }
-+	} else {
-+	    /* Add any other 'complex' inode types here ... */
- #if !defined(AFS_LINUX26_ENV) && !defined(AFS_CACHE_VNODE_PATH)
--	tdc->f.inode.ufs = ainode;
-+	    tdc->f.inode.ufs = ainode;
- #else
--	osi_Panic("Can't init cache with inode numbers when complex inodes are "
--	          "in use\n");
-+	    osi_Panic("Can't init cache with inode numbers when complex inodes are "
-+		      "in use\n");
- #endif
--    }
--    fileIsBad = 0;
--    if ((tdc->f.states & DWriting) || tdc->f.fid.Fid.Volume == 0)
--	fileIsBad = 1;
--    tfile = osi_UFSOpen(&tdc->f.inode);
--    code = afs_osi_Stat(tfile, &tstat);
--    if (code)
--	osi_Panic("initcachefile stat");
-+	}
-+	fileIsBad = 0;
-+	if ((tdc->f.states & DWriting) || tdc->f.fid.Fid.Volume == 0)
-+	    fileIsBad = 1;
-+	tfile = osi_UFSOpen(&tdc->f.inode);
-+	code = afs_osi_Stat(tfile, &tstat);
-+	if (code)
-+	    osi_Panic("initcachefile stat");
- 
--    /*
--     * If file size doesn't match the cache info file, it's probably bad.
--     */
--    if (tdc->f.chunkBytes != tstat.size)
--	fileIsBad = 1;
-+	/*
-+	 * If file size doesn't match the cache info file, it's probably bad.
-+	 */
-+	if (tdc->f.chunkBytes != tstat.size)
-+	    fileIsBad = 1;
-+	/*
-+	 * If file changed within T (120?) seconds of cache info file, it's
-+	 * probably bad.  In addition, if slot changed within last T seconds,
-+	 * the cache info file may be incorrectly identified, and so slot
-+	 * may be bad.
-+	 */
-+	if (cacheInfoModTime < tstat.mtime + 120)
-+	    fileIsBad = 1;
-+	if (cacheInfoModTime < tdc->f.modTime + 120)
-+	    fileIsBad = 1;
-+	/* In case write through is behind, make sure cache items entry is
-+	 * at least as new as the chunk.
-+	 */
-+	if (tdc->f.modTime < tstat.mtime)
-+	    fileIsBad = 1;
-+    }
-     tdc->f.chunkBytes = 0;
- 
--    /*
--     * If file changed within T (120?) seconds of cache info file, it's
--     * probably bad.  In addition, if slot changed within last T seconds,
--     * the cache info file may be incorrectly identified, and so slot
--     * may be bad.
--     */
--    if (cacheInfoModTime < tstat.mtime + 120)
--	fileIsBad = 1;
--    if (cacheInfoModTime < tdc->f.modTime + 120)
--	fileIsBad = 1;
--    /* In case write through is behind, make sure cache items entry is
--     * at least as new as the chunk.
--     */
--    if (tdc->f.modTime < tstat.mtime)
--	fileIsBad = 1;
-     if (fileIsBad) {
- 	tdc->f.fid.Fid.Volume = 0;	/* not in the hash table */
--	if (tstat.size != 0)
-+	if (tfile && tstat.size != 0)
- 	    osi_UFSTruncate(tfile, 0);
- 	tdc->f.states &= ~(DRO|DBackup|DRW);
- 	afs_DCMoveBucket(tdc, 0, 0);
-@@ -2981,11 +3062,12 @@ afs_InitCacheFile(char *afile, ino_t ainode)
- 	afs_indexUnique[index] = tdc->f.fid.Fid.Unique;
-     }				/*File is not bad */
- 
--    osi_UFSClose(tfile);
-+    if (tfile)
-+	osi_UFSClose(tfile);
-     tdc->f.states &= ~DWriting;
-     tdc->dflags &= ~DFEntryMod;
-     /* don't set f.modTime; we're just cleaning up */
--    afs_WriteDCache(tdc, 0);
-+    osi_Assert(afs_WriteDCache(tdc, 0) == 0);
-     ReleaseWriteLock(&afs_xdcache);
-     ReleaseWriteLock(&tdc->lock);
-     afs_PutDCache(tdc);
-@@ -3038,63 +3120,44 @@ afs_dcacheInit(int afiles, int ablocks, int aDentries, int achunk, int aflags)
-     if (!aDentries)
- 	aDentries = DDSIZE;
- 
--    if (aflags & AFSCALL_INIT_MEMCACHE) {
--	/*
--	 * Use a memory cache instead of a disk cache
--	 */
--	cacheDiskType = AFS_FCACHE_TYPE_MEM;
--	afs_cacheType = &afs_MemCacheOps;
--	afiles = (afiles < aDentries) ? afiles : aDentries;	/* min */
--	ablocks = afiles * (AFS_FIRSTCSIZE / 1024);
--	/* ablocks is reported in 1K blocks */
--	code = afs_InitMemCache(afiles, AFS_FIRSTCSIZE, aflags);
--	if (code != 0) {
--	    afs_warn("afsd: memory cache too large for available memory.\n");
--	    afs_warn("afsd: AFS files cannot be accessed.\n\n");
--	    dcacheDisabled = 1;
--	    afiles = ablocks = 0;
--	} else
--	    afs_warn("Memory cache: Allocating %d dcache entries...",
--		   aDentries);
--    } else {
--	cacheDiskType = AFS_FCACHE_TYPE_UFS;
--	afs_cacheType = &afs_UfsCacheOps;
--    }
--
-     if (aDentries > 512)
- 	afs_dhashsize = 2048;
-     /* initialize hash tables */
--    afs_dvhashTbl =
--	(afs_int32 *) afs_osi_Alloc(afs_dhashsize * sizeof(afs_int32));
--    afs_dchashTbl =
--	(afs_int32 *) afs_osi_Alloc(afs_dhashsize * sizeof(afs_int32));
-+    afs_dvhashTbl = afs_osi_Alloc(afs_dhashsize * sizeof(afs_int32));
-+    osi_Assert(afs_dvhashTbl != NULL);
-+    afs_dchashTbl = afs_osi_Alloc(afs_dhashsize * sizeof(afs_int32));
-+    osi_Assert(afs_dchashTbl != NULL);
-     for (i = 0; i < afs_dhashsize; i++) {
- 	afs_dvhashTbl[i] = NULLIDX;
- 	afs_dchashTbl[i] = NULLIDX;
-     }
--    afs_dvnextTbl = (afs_int32 *) afs_osi_Alloc(afiles * sizeof(afs_int32));
--    afs_dcnextTbl = (afs_int32 *) afs_osi_Alloc(afiles * sizeof(afs_int32));
-+    afs_dvnextTbl = afs_osi_Alloc(afiles * sizeof(afs_int32));
-+    osi_Assert(afs_dvnextTbl != NULL);
-+    afs_dcnextTbl = afs_osi_Alloc(afiles * sizeof(afs_int32));
-+    osi_Assert(afs_dcnextTbl != NULL);
-     for (i = 0; i < afiles; i++) {
- 	afs_dvnextTbl[i] = NULLIDX;
- 	afs_dcnextTbl[i] = NULLIDX;
-     }
- 
-     /* Allocate and zero the pointer array to the dcache entries */
--    afs_indexTable = (struct dcache **)
--	afs_osi_Alloc(sizeof(struct dcache *) * afiles);
-+    afs_indexTable = afs_osi_Alloc(sizeof(struct dcache *) * afiles);
-+    osi_Assert(afs_indexTable != NULL);
-     memset(afs_indexTable, 0, sizeof(struct dcache *) * afiles);
--    afs_indexTimes =
--	(afs_hyper_t *) afs_osi_Alloc(afiles * sizeof(afs_hyper_t));
-+    afs_indexTimes = afs_osi_Alloc(afiles * sizeof(afs_hyper_t));
-+    osi_Assert(afs_indexTimes != NULL);
-     memset(afs_indexTimes, 0, afiles * sizeof(afs_hyper_t));
--    afs_indexUnique =
--	(afs_int32 *) afs_osi_Alloc(afiles * sizeof(afs_uint32));
-+    afs_indexUnique = afs_osi_Alloc(afiles * sizeof(afs_uint32));
-+    osi_Assert(afs_indexUnique != NULL);
-     memset(afs_indexUnique, 0, afiles * sizeof(afs_uint32));
--    afs_indexFlags = (u_char *) afs_osi_Alloc(afiles * sizeof(u_char));
-+    afs_indexFlags = afs_osi_Alloc(afiles * sizeof(u_char));
-+    osi_Assert(afs_indexFlags != NULL);
-     memset(afs_indexFlags, 0, afiles * sizeof(char));
- 
-     /* Allocate and thread the struct dcache entries themselves */
-     tdp = afs_Initial_freeDSList =
--	(struct dcache *)afs_osi_Alloc(aDentries * sizeof(struct dcache));
-+	afs_osi_Alloc(aDentries * sizeof(struct dcache));
-+    osi_Assert(tdp != NULL);
-     memset(tdp, 0, aDentries * sizeof(struct dcache));
- #ifdef	KERNEL_HAVE_PIN
-     pin((char *)afs_indexTable, sizeof(struct dcache *) * afiles);	/* XXX */
-@@ -3131,6 +3194,29 @@ afs_dcacheInit(int afiles, int ablocks, int aDentries, int achunk, int aflags)
- 	afs_stats_cmperf.cacheBucket2_Discarded = 0;
-     afs_DCSizeInit();
-     QInit(&afs_DLRU);
-+
-+    if (aflags & AFSCALL_INIT_MEMCACHE) {
-+	/*
-+	 * Use a memory cache instead of a disk cache
-+	 */
-+	cacheDiskType = AFS_FCACHE_TYPE_MEM;
-+	afs_cacheType = &afs_MemCacheOps;
-+	afiles = (afiles < aDentries) ? afiles : aDentries;	/* min */
-+	ablocks = afiles * (AFS_FIRSTCSIZE / 1024);
-+	/* ablocks is reported in 1K blocks */
-+	code = afs_InitMemCache(afiles, AFS_FIRSTCSIZE, aflags);
-+	if (code != 0) {
-+	    afs_warn("afsd: memory cache too large for available memory.\n");
-+	    afs_warn("afsd: AFS files cannot be accessed.\n\n");
-+	    dcacheDisabled = 1;
-+	    afiles = ablocks = 0;
-+	} else
-+	    afs_warn("Memory cache: Allocating %d dcache entries...",
-+		   aDentries);
-+    } else {
-+	cacheDiskType = AFS_FCACHE_TYPE_UFS;
-+	afs_cacheType = &afs_UfsCacheOps;
-+    }
- }
- 
- /*!
-@@ -3348,7 +3434,7 @@ afs_MakeShadowDir(struct vcache *avc, struct dcache *adc)
-     ReleaseWriteLock(&afs_xdcache);
- 
-     /* Alloc a 4k block. */
--    data = (char *) afs_osi_Alloc(4096);
-+    data = afs_osi_Alloc(4096);
-     if (!data) {
- 	afs_warn("afs_MakeShadowDir: could not alloc data\n");
- 	ret_code = ENOMEM;
-diff --git a/src/afs/afs_disconnected.c b/src/afs/afs_disconnected.c
-index d07df60..a587538 100644
---- a/src/afs/afs_disconnected.c
-+++ b/src/afs/afs_disconnected.c
-@@ -71,12 +71,14 @@ afs_FindDCacheByFid(struct VenusFid *afid)
-     ObtainWriteLock(&afs_xdcache, 758);
-     for (index = afs_dvhashTbl[i]; index != NULLIDX;) {
- 	if (afs_indexUnique[index] == afid->Fid.Unique) {
--	    tdc = afs_GetDSlot(index, NULL);
--	    ReleaseReadLock(&tdc->tlock);
--	    if (!FidCmp(&tdc->f.fid, afid)) {
--		break;		/* leaving refCount high for caller */
-+	    tdc = afs_GetValidDSlot(index);
-+	    if (tdc) {
-+		ReleaseReadLock(&tdc->tlock);
-+		if (!FidCmp(&tdc->f.fid, afid)) {
-+		    break;		/* leaving refCount high for caller */
-+		}
-+		afs_PutDCache(tdc);
- 	    }
--	    afs_PutDCache(tdc);
- 	}
- 	index = afs_dvnextTbl[index];
-     }
-@@ -563,7 +565,7 @@ afs_ProcessOpRename(struct vcache *avc, struct vrequest *areq)
-     old_pdir_fid.Fid.Unique = avc->f.oldParent.unique;
- 
-     /* Get old name. */
--    old_name = (char *) afs_osi_Alloc(AFSNAMEMAX);
-+    old_name = afs_osi_Alloc(AFSNAMEMAX);
-     if (!old_name) {
- 	/* printf("afs_ProcessOpRename: Couldn't alloc space for old name.\n"); */
- 	return ENOMEM;
-@@ -575,7 +577,7 @@ afs_ProcessOpRename(struct vcache *avc, struct vrequest *areq)
-     }
- 
-     /* Alloc data first. */
--    new_name = (char *) afs_osi_Alloc(AFSNAMEMAX);
-+    new_name = afs_osi_Alloc(AFSNAMEMAX);
-     if (!new_name) {
- 	/* printf("afs_ProcessOpRename: Couldn't alloc space for new name.\n"); */
- 	code = ENOMEM;
-@@ -853,7 +855,7 @@ afs_ProcessOpCreate(struct vcache *avc, struct vrequest *areq,
-     ObtainWriteLock(&afs_xdcache, 743);
-     for (index = afs_dvhashTbl[hash]; index != NULLIDX; index = hash) {
-         hash = afs_dvnextTbl[index];
--        tdc = afs_GetDSlot(index, NULL);
-+        tdc = afs_GetValidDSlot(index);
-         ReleaseReadLock(&tdc->tlock);
- 	if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
-             if (!FidCmp(&tdc->f.fid, &avc->f.fid)) {
-diff --git a/src/afs/afs_dynroot.c b/src/afs/afs_dynroot.c
-index 24b8140..1177fbe 100644
---- a/src/afs/afs_dynroot.c
-+++ b/src/afs/afs_dynroot.c
-@@ -347,6 +347,7 @@ afs_RebuildDynroot(void)
- 	}
- 	dotLen = strlen(c->cellName) + 2;
- 	dotCell = afs_osi_Alloc(dotLen);
-+	osi_Assert(dotCell != NULL);
- 	strcpy(dotCell, ".");
- 	afs_strcat(dotCell, c->cellName);
- 
-@@ -365,6 +366,7 @@ afs_RebuildDynroot(void)
- 
- 	dotLen = strlen(ca->alias) + 2;
- 	dotCell = afs_osi_Alloc(dotLen);
-+	osi_Assert(dotCell != NULL);
- 	strcpy(dotCell, ".");
- 	afs_strcat(dotCell, ca->alias);
- 
-@@ -385,6 +387,7 @@ afs_RebuildDynroot(void)
- 
-     dirSize = (curPage + 1) * AFS_PAGESIZE;
-     newDir = afs_osi_Alloc(dirSize);
-+    osi_Assert(newDir != NULL);
- 
-     /*
-      * Now actually construct the directory.
-@@ -424,6 +427,7 @@ afs_RebuildDynroot(void)
- 
- 	dotLen = strlen(c->cellName) + 2;
- 	dotCell = afs_osi_Alloc(dotLen);
-+	osi_Assert(dotCell != NULL);
- 	strcpy(dotCell, ".");
- 	afs_strcat(dotCell, c->cellName);
- 	afs_dynroot_addDirEnt(dirHeader, &curPage, &curChunk, c->cellName,
-@@ -443,6 +447,7 @@ afs_RebuildDynroot(void)
- 
- 	dotLen = strlen(ca->alias) + 2;
- 	dotCell = afs_osi_Alloc(dotLen);
-+	osi_Assert(dotCell != NULL);
- 	strcpy(dotCell, ".");
- 	afs_strcat(dotCell, ca->alias);
- 	afs_dynroot_addDirEnt(dirHeader, &curPage, &curChunk, ca->alias,
-@@ -481,6 +486,7 @@ afs_RebuildDynrootMount(void)
-     struct DirHeader *dirHeader;
- 
-     newDir = afs_osi_Alloc(AFS_PAGESIZE);
-+    osi_Assert(newDir != NULL);
- 
-     /*
-      * Now actually construct the directory.
-@@ -648,6 +654,7 @@ afs_DynrootNewVnode(struct vcache *avc, struct AFSFetchStatus *status)
- 	    if (ts) {
- 		linklen = strlen(ts->target);
- 		avc->linkData = afs_osi_Alloc(linklen + 1);
-+		osi_Assert(avc->linkData != NULL);
- 		strcpy(avc->linkData, ts->target);
- 
- 		status->Length = linklen;
-@@ -696,6 +703,7 @@ afs_DynrootNewVnode(struct vcache *avc, struct AFSFetchStatus *status)
- 		int namelen = strlen(realName);
- 		linklen = rw + namelen;
- 		avc->linkData = afs_osi_Alloc(linklen + 1);
-+		osi_Assert(avc->linkData != NULL);
- 		strcpy(avc->linkData, rw ? "." : "");
- 		afs_strcat(avc->linkData, realName);
- 	    }
-@@ -718,6 +726,7 @@ afs_DynrootNewVnode(struct vcache *avc, struct AFSFetchStatus *status)
- 	    bp = afs_cv2string(&tbuf[CVBS], avc->f.fid.Fid.Unique);
- 	    linklen = 2 + namelen + strlen(bp);
- 	    avc->linkData = afs_osi_Alloc(linklen + 1);
-+	    osi_Assert(avc->linkData != NULL);
- 	    strcpy(avc->linkData, "%");
- 	    afs_strcat(avc->linkData, c->cellName);
- 	    afs_strcat(avc->linkData, ":");
-@@ -741,6 +750,7 @@ afs_DynrootNewVnode(struct vcache *avc, struct AFSFetchStatus *status)
- 	    namelen = strlen(c->cellName);
- 	    linklen = 1 + namelen + 10;
- 	    avc->linkData = afs_osi_Alloc(linklen + 1);
-+	    osi_Assert(avc->linkData != NULL);
- 	    strcpy(avc->linkData, rw ? "%" : "#");
- 	    afs_strcat(avc->linkData, c->cellName);
- 	    afs_strcat(avc->linkData, ":root.cell");
-@@ -881,11 +891,14 @@ afs_DynrootVOPSymlink(struct vcache *avc, afs_ucred_t *acred,
- 
-     /* Doesn't already exist -- go ahead and create it */
-     tps = afs_osi_Alloc(sizeof(*tps));
-+    osi_Assert(tps != NULL);
-     tps->index = afs_dynSymlinkIndex++;
-     tps->next = afs_dynSymlinkBase;
-     tps->name = afs_osi_Alloc(strlen(aname) + 1);
-+    osi_Assert(tps->name != NULL);
-     strcpy(tps->name, aname);
-     tps->target = afs_osi_Alloc(strlen(atargetName) + 1);
-+    osi_Assert(tps->target != NULL);
-     strcpy(tps->target, atargetName);
-     afs_dynSymlinkBase = tps;
-     ReleaseWriteLock(&afs_dynSymlinkLock);
-diff --git a/src/afs/afs_exporter.c b/src/afs/afs_exporter.c
-index 4bc777a..891b11b 100644
---- a/src/afs/afs_exporter.c
-+++ b/src/afs/afs_exporter.c
-@@ -35,7 +35,8 @@ exporter_add(afs_int32 size, struct exporterops *ops, afs_int32 state,
- 	LOCK_INIT(&afs_xexp, "afs_xexp");
-     }
-     length = (size ? size : sizeof(struct afs_exporter));
--    ex = (struct afs_exporter *)afs_osi_Alloc(length);
-+    ex = afs_osi_Alloc(length);
-+    osi_Assert(ex != NULL);
-     memset(ex, 0, length);
-     ObtainWriteLock(&afs_xexp, 308);
-     for (op = root_exported; op; op = op->exp_next) {
-diff --git a/src/afs/afs_fetchstore.c b/src/afs/afs_fetchstore.c
-index 3473646..6746f1b 100644
---- a/src/afs/afs_fetchstore.c
-+++ b/src/afs/afs_fetchstore.c
-@@ -540,6 +540,7 @@ afs_CacheStoreDCaches(struct vcache *avc, struct dcache **dclist,
- 
-     if (!code) {
- 	code = (*ops->close)(rock, OutStatus, doProcessFS);
-+	/* if this succeeds, dv has been bumped. */
- 	if (*doProcessFS) {
- 	    hadd32(*anewDV, 1);
- 	}
-@@ -547,6 +548,11 @@ afs_CacheStoreDCaches(struct vcache *avc, struct dcache **dclist,
-     }
-     if (ops)
- 	code = (*ops->destroy)(&rock, code);
-+
-+    /* if we errored, can't trust this. */
-+    if (code)
-+	*doProcessFS = 0;
-+
-     return code;
- }
- 
-diff --git a/src/afs/afs_icl.c b/src/afs/afs_icl.c
-index 7b99e90..759342b 100644
---- a/src/afs/afs_icl.c
-+++ b/src/afs/afs_icl.c
-@@ -931,8 +931,8 @@ afs_icl_LogUse(struct afs_icl_log *logp)
- 	    /* we weren't passed in a hint and it wasn't set */
- 	    logp->logSize = ICL_DEFAULT_LOGSIZE;
- 	}
--	logp->datap =
--	    (afs_int32 *) afs_osi_Alloc(sizeof(afs_int32) * logp->logSize);
-+	logp->datap = afs_osi_Alloc(sizeof(afs_int32) * logp->logSize);
-+	osi_Assert(logp->datap != NULL);
- #ifdef	KERNEL_HAVE_PIN
- 	pin((char *)logp->datap, sizeof(afs_int32) * logp->logSize);
- #endif
-@@ -979,8 +979,8 @@ afs_icl_LogSetSize(struct afs_icl_log *logp, afs_int32 logSize)
- #ifdef	KERNEL_HAVE_PIN
- 	unpin((char *)logp->datap, sizeof(afs_int32) * logp->logSize);
- #endif
--	logp->datap =
--	    (afs_int32 *) afs_osi_Alloc(sizeof(afs_int32) * logSize);
-+	logp->datap = afs_osi_Alloc(sizeof(afs_int32) * logSize);
-+	osi_Assert(logp->datap != NULL);
- #ifdef	KERNEL_HAVE_PIN
- 	pin((char *)logp->datap, sizeof(afs_int32) * logSize);
- #endif
-@@ -1170,6 +1170,7 @@ afs_icl_CreateSetWithFlags(char *name, struct afs_icl_log *baseLogp,
-     strcpy(setp->name, name);
-     setp->nevents = ICL_DEFAULTEVENTS;
-     setp->eventFlags = afs_osi_Alloc(ICL_DEFAULTEVENTS);
-+    osi_Assert(setp->eventFlags != NULL);
- #ifdef	KERNEL_HAVE_PIN
-     pin((char *)setp->eventFlags, ICL_DEFAULTEVENTS);
- #endif
-diff --git a/src/afs/afs_init.c b/src/afs/afs_init.c
-index 748531f..431d89d 100644
---- a/src/afs/afs_init.c
-+++ b/src/afs/afs_init.c
-@@ -141,7 +141,8 @@ afs_CacheInit(afs_int32 astatSize, afs_int32 afiles, afs_int32 ablocks,
-     else if (aVolumes > 32767)
- 	aVolumes = 32767;
- 
--    tv = (struct volume *)afs_osi_Alloc(aVolumes * sizeof(struct volume));
-+    tv = afs_osi_Alloc(aVolumes * sizeof(struct volume));
-+    osi_Assert(tv != NULL);
-     for (i = 0; i < aVolumes - 1; i++)
- 	tv[i].next = &tv[i + 1];
-     tv[aVolumes - 1].next = NULL;
-@@ -533,8 +534,10 @@ afs_ResourceInit(int preallocs)
- 	afs_resourceinit_flag = 1;
- 	for (i = 0; i < NFENTRIES; i++)
- 	    fvTable[i] = 0;
--	for (i = 0; i < MAXNUMSYSNAMES; i++)
-+	for (i = 0; i < MAXNUMSYSNAMES; i++) {
- 	    afs_sysnamelist[i] = afs_osi_Alloc(MAXSYSNAME);
-+	    osi_Assert(afs_sysnamelist[i] != NULL);
-+	}
- 	afs_sysname = afs_sysnamelist[0];
- 	strcpy(afs_sysname, SYS_NAME);
- 	afs_sysnamecount = 1;
-@@ -721,11 +724,6 @@ shutdown_cache(void)
- void
- shutdown_vnodeops(void)
- {
--#if !defined(AFS_SGI_ENV) && !defined(AFS_SUN5_ENV)
--    struct buf *afs_bread_freebp = 0;
--#endif
--
--
-     AFS_STATCNT(shutdown_vnodeops);
-     if (afs_cold_shutdown) {
- #ifndef	AFS_SUN5_ENV		/* XXX */
-@@ -734,9 +732,6 @@ shutdown_vnodeops(void)
- #ifndef AFS_LINUX20_ENV
- 	afs_rd_stash_i = 0;
- #endif
--#if !defined(AFS_SGI_ENV) && !defined(AFS_SUN5_ENV)
--	afs_bread_freebp = 0;
--#endif
- 	shutdown_mariner();
-     }
- }
-diff --git a/src/afs/afs_memcache.c b/src/afs/afs_memcache.c
-index 51b7561..23513a8 100644
---- a/src/afs/afs_memcache.c
-+++ b/src/afs/afs_memcache.c
-@@ -35,8 +35,9 @@ afs_InitMemCache(int blkCount, int blkSize, int flags)
- 	memCacheBlkSize = blkSize;
- 
-     memMaxBlkNumber = blkCount;
--    memCache = (struct memCacheEntry *)
-+    memCache =
- 	afs_osi_Alloc(memMaxBlkNumber * sizeof(struct memCacheEntry));
-+    osi_Assert(memCache != NULL);
- 
-     for (index = 0; index < memMaxBlkNumber; index++) {
- 	char *blk;
-@@ -52,7 +53,8 @@ afs_InitMemCache(int blkCount, int blkSize, int flags)
- #if defined(AFS_HAVE_VXFS)
-     afs_InitDualFSCacheOps((struct vnode *)0);
- #endif
--
-+    for (index = 0; index < blkCount; index++)
-+	afs_InitCacheFile(NULL, 0);
-     return 0;
- 
-   nomem:
-diff --git a/src/afs/afs_nfsclnt.c b/src/afs/afs_nfsclnt.c
-index 782ce7f..b8bf179 100644
---- a/src/afs/afs_nfsclnt.c
-+++ b/src/afs/afs_nfsclnt.c
-@@ -76,7 +76,8 @@ afs_GetNfsClientPag(afs_int32 uid, afs_uint32 host)
- 	    return np;
- 	}
-     }
--    np = (struct nfsclientpag *)afs_osi_Alloc(sizeof(struct nfsclientpag));
-+    np = afs_osi_Alloc(sizeof(struct nfsclientpag));
-+    osi_Assert(np != NULL);
-     memset(np, 0, sizeof(struct nfsclientpag));
-     /* Copy the necessary afs_exporter fields */
-     memcpy((char *)np, (char *)afs_nfsexporter, sizeof(struct afs_exporter));
-@@ -479,6 +480,7 @@ afs_nfsclient_sysname(struct nfsclientpag *np, char *inname,
- 	    }
- 	for(count=0; count < *num;++count) {
- 	    np->sysname[count]= afs_osi_Alloc(MAXSYSNAME);
-+	    osi_Assert(np->sysname[count] != NULL);
- 	}
- 	cp = inname;
- 	for(count=0; count < *num;++count) {
-diff --git a/src/afs/afs_osi_alloc.c b/src/afs/afs_osi_alloc.c
-index 3039995..1822acc 100644
---- a/src/afs/afs_osi_alloc.c
-+++ b/src/afs/afs_osi_alloc.c
-@@ -168,7 +168,7 @@ osi_AllocLargeSpace(size_t size)
- 	char *p;
- 
- 	afs_stats_cmperf.LargeBlocksAlloced++;
--	p = (char *)afs_osi_Alloc(AFS_LRALLOCSIZ);
-+	p = afs_osi_Alloc(AFS_LRALLOCSIZ);
- #ifdef  KERNEL_HAVE_PIN
- 	/*
- 	 * Need to pin this memory since under heavy conditions this memory
-diff --git a/src/afs/afs_osi_pag.c b/src/afs/afs_osi_pag.c
-index 20cee62..efce229 100644
---- a/src/afs/afs_osi_pag.c
-+++ b/src/afs/afs_osi_pag.c
-@@ -481,7 +481,7 @@ afs_InitReq(struct vrequest *av, afs_ucred_t *acred)
- #elif defined(AFS_SUN510_ENV)
-         av->uid = crgetruid(acred);
- #else
--	av->uid = afs_cr_uid(acred);	/* default when no pag is set */
-+	av->uid = afs_cr_ruid(acred);	/* default when no pag is set */
- #endif
-     }
-     return 0;
-diff --git a/src/afs/afs_osidnlc.c b/src/afs/afs_osidnlc.c
-index d2a6616..0309e9a 100644
---- a/src/afs/afs_osidnlc.c
-+++ b/src/afs/afs_osidnlc.c
-@@ -190,10 +190,9 @@ struct vcache *
- osi_dnlc_lookup(struct vcache *adp, char *aname, int locktype)
- {
-     struct vcache *tvc;
--    int LRUme;
-     unsigned int key, skey;
-     char *ts = aname;
--    struct nc *tnc, *tnc1 = 0;
-+    struct nc *tnc;
-     int safety;
- #ifdef AFS_DARWIN80_ENV
-     vnode_t tvp;
-@@ -218,7 +217,6 @@ osi_dnlc_lookup(struct vcache *adp, char *aname, int locktype)
- 	if ( /* (tnc->key == key)  && */ (tnc->dirp == adp)
- 	    && (!strcmp((char *)tnc->name, aname))) {
- 	    tvc = tnc->vp;
--	    tnc1 = tnc;
- 	    break;
- 	} else if (tnc->next == nameHash[skey]) {	/* end of list */
- 	    break;
-@@ -232,7 +230,6 @@ osi_dnlc_lookup(struct vcache *adp, char *aname, int locktype)
- 	}
-     }
- 
--    LRUme = 0;			/* (tnc != nameHash[skey]); */
-     ReleaseReadLock(&afs_xdnlc);
- 
-     if (!tvc) {
-diff --git a/src/afs/afs_pag_call.c b/src/afs/afs_pag_call.c
-index 9d23e90..39f78b1 100644
---- a/src/afs/afs_pag_call.c
-+++ b/src/afs/afs_pag_call.c
-@@ -113,8 +113,10 @@ afspag_Init(afs_int32 nfs_server_addr)
- 
-     afs_resourceinit_flag = 1;
-     afs_nfs_server_addr = nfs_server_addr;
--    for (i = 0; i < MAXNUMSYSNAMES; i++)
-+    for (i = 0; i < MAXNUMSYSNAMES; i++) {
- 	afs_sysnamelist[i] = afs_osi_Alloc(MAXSYSNAME);
-+        osi_Assert(afs_sysnamelist[i] != NULL);
-+    }
-     afs_sysname = afs_sysnamelist[0];
-     strcpy(afs_sysname, SYS_NAME);
-     afs_sysnamecount = 1;
-diff --git a/src/afs/afs_pag_cred.c b/src/afs/afs_pag_cred.c
-index e35cc82..48a50ec 100644
---- a/src/afs/afs_pag_cred.c
-+++ b/src/afs/afs_pag_cred.c
-@@ -45,10 +45,10 @@ afspag_GetCell(char *acell)
-     }
- 
-     if (!tcell) {
--	tcell = (struct afspag_cell *)afs_osi_Alloc(sizeof(struct afspag_cell));
-+	tcell = afs_osi_Alloc(sizeof(struct afspag_cell));
- 	if (!tcell)
- 	    goto out;
--	tcell->cellname = (char *)afs_osi_Alloc(strlen(acell) + 1);
-+	tcell->cellname = afs_osi_Alloc(strlen(acell) + 1);
- 	if (!tcell->cellname) {
- 	    afs_osi_Free(tcell, sizeof(struct afspag_cell));
- 	    tcell = 0;
-@@ -251,8 +251,7 @@ SPAGCB_GetCreds(struct rx_call *a_call, afs_int32 a_uid,
- 	return UAESRCH;
-     }
- 
--    a_creds->CredInfos_val =
--	(CredInfo *)afs_osi_Alloc(count * sizeof(CredInfo));
-+    a_creds->CredInfos_val = afs_osi_Alloc(count * sizeof(CredInfo));
-     if (!a_creds->CredInfos_val)
- 	goto out;
-     a_creds->CredInfos_len = count;
-diff --git a/src/afs/afs_pioctl.c b/src/afs/afs_pioctl.c
-index 440d617..d96a842 100644
---- a/src/afs/afs_pioctl.c
-+++ b/src/afs/afs_pioctl.c
-@@ -1937,6 +1937,8 @@ DECL_PIOCTL(PGetVolumeStatus)
-     struct rx_connection *rxconn;
-     XSTATS_DECLS;
- 
-+    osi_Assert(offLineMsg != NULL);
-+    osi_Assert(motd != NULL);
-     AFS_STATCNT(PGetVolumeStatus);
-     if (!avc) {
- 	code = EINVAL;
-@@ -3481,7 +3483,10 @@ DECL_PIOCTL(PFlushVolumeData)
-     for (i = 0; i < afs_cacheFiles; i++) {
- 	if (!(afs_indexFlags[i] & IFEverUsed))
- 	    continue;		/* never had any data */
--	tdc = afs_GetDSlot(i, NULL);
-+	tdc = afs_GetValidDSlot(i);
-+	if (!tdc) {
-+	    continue;
-+	}
- 	if (tdc->refCount <= 1) {    /* too high, in use by running sys call */
- 	    ReleaseReadLock(&tdc->tlock);
- 	    if (tdc->f.fid.Fid.Volume == volume && tdc->f.fid.Cell == cell) {
-@@ -3824,7 +3829,8 @@ ReSortCells(int s, afs_int32 * l, int vlonly)
- 
-     if (vlonly) {
- 	afs_int32 *p;
--	p = (afs_int32 *) afs_osi_Alloc(sizeof(afs_int32) * (s + 1));
-+	p = afs_osi_Alloc(sizeof(afs_int32) * (s + 1));
-+        osi_Assert(p != NULL);
- 	p[0] = s;
- 	memcpy(p + 1, l, s * sizeof(afs_int32));
- 	afs_TraverseCells(&ReSortCells_cb, p);
-@@ -4848,8 +4854,8 @@ DECL_PIOCTL(PRxStatPeer)
- 
- DECL_PIOCTL(PPrefetchFromTape)
- {
--    afs_int32 code, code1;
--    afs_int32 bytes, outval;
-+    afs_int32 code;
-+    afs_int32 outval;
-     struct afs_conn *tc;
-     struct rx_call *tcall;
-     struct AFSVolSync tsync;
-@@ -4892,11 +4898,11 @@ DECL_PIOCTL(PPrefetchFromTape)
- 		StartRXAFS_FetchData(tcall, (struct AFSFid *)&tvc->f.fid.Fid, 0,
- 				     0);
- 	    if (!code) {
--		bytes = rx_Read(tcall, (char *)&outval, sizeof(afs_int32));
-+		rx_Read(tcall, (char *)&outval, sizeof(afs_int32));
- 		code =
- 		    EndRXAFS_FetchData(tcall, &OutStatus, &CallBack, &tsync);
- 	    }
--	    code1 = rx_EndCall(tcall, code);
-+	    code = rx_EndCall(tcall, code);
- 	    RX_AFS_GLOCK();
- 	} else
- 	    code = -1;
-@@ -5082,6 +5088,7 @@ DECL_PIOCTL(PCallBackAddr)
-     }
- 
-     addrs = afs_osi_Alloc(srvAddrCount * sizeof(*addrs));
-+    osi_Assert(addrs != NULL);
-     j = 0;
-     for (i = 0; i < NSERVERS; i++) {
- 	for (sa = afs_srvAddrs[i]; sa; sa = sa->next_bkt) {
-diff --git a/src/afs/afs_prototypes.h b/src/afs/afs_prototypes.h
-index 6e8a87b..f411ddd 100644
---- a/src/afs/afs_prototypes.h
-+++ b/src/afs/afs_prototypes.h
-@@ -258,8 +258,7 @@ extern void afs_FlushDCache(struct dcache *adc);
- extern void shutdown_dcache(void);
- extern void afs_CacheTruncateDaemon(void);
- extern afs_int32 afs_fsfragsize;
--extern struct dcache *afs_MemGetDSlot(afs_int32 aslot,
--				      struct dcache *tmpdc);
-+extern struct dcache *afs_MemGetDSlot(afs_int32 aslot, int needvalid);
- extern struct dcache *afs_GetDCache(struct vcache *avc,
- 				    afs_size_t abyte,
- 				    struct vrequest *areq,
-@@ -281,8 +280,7 @@ extern void afs_TryToSmush(struct vcache *avc,
- extern void updateV2DC(int lockVc, struct vcache *v, struct dcache *d,
- 		       int src);
- extern void afs_WriteThroughDSlots(void);
--extern struct dcache *afs_UFSGetDSlot(afs_int32 aslot,
--				      struct dcache *tmpdc);
-+extern struct dcache *afs_UFSGetDSlot(afs_int32 aslot, int needvalid);
- extern int afs_WriteDCache(struct dcache *adc, int atime);
- extern int afs_wakeup(struct vcache *avc);
- extern int afs_InitCacheFile(char *afile, ino_t ainode);
-@@ -853,9 +851,18 @@ extern struct server *afs_GetServer(afs_uint32 * aserver, afs_int32 nservers,
- extern void afs_GetCapabilities(struct server *ts);
- extern void ForceAllNewConnections(void);
- extern void afs_MarkServerUpOrDown(struct srvAddr *sa, int a_isDown);
--extern afs_int32 afs_ServerDown(struct srvAddr *sa);
-+extern afs_int32 afs_ServerDown(struct srvAddr *sa, int code);
- extern void afs_CountServers(void);
- extern void afs_CheckServers(int adown, struct cell *acellp);
-+extern void afs_LoopServers(int adown, struct cell *acellp, int vlalso,
-+			    void (*func1) (struct rx_connection **rxconns,
-+					   int nconns, int nservers,
-+					   struct afs_conn **conns,
-+					   struct srvAddr **addrs),
-+			    void (*func2) (struct rx_connection **rxconns,
-+					   int nconns, int nservers,
-+					   struct afs_conn **conns,
-+					   struct srvAddr **addrs));
- extern unsigned int afs_random(void);
- extern int afs_randomMod15(void);
- extern int afs_randomMod127(void);
-@@ -968,7 +975,8 @@ extern void afs_MarkUserExpired(afs_int32 pag);
- 
- /* afs_util.c */
- extern afs_int32 afs_strtoi_r(const char *str, char **endptr, afs_uint32 *ret);
--extern afs_int32 afs_calc_inum (afs_int32 volume, afs_int32 vnode);
-+extern afs_int32 afs_calc_inum(afs_int32 cell, afs_int32 volume,
-+                               afs_int32 vnode);
- #ifndef afs_cv2string
- extern char *afs_cv2string(char *ttp, afs_uint32 aval);
- #endif
-@@ -989,7 +997,7 @@ extern char *afs_strrchr(char *s, int c);
- #endif
- extern char *afs_strdup(char *s);
- extern void print_internet_address(char *preamble, struct srvAddr *sa,
--				   char *postamble, int flag);
-+				   char *postamble, int flag, int code);
- extern afs_int32 afs_data_pointer_to_int32(const void *p);
- 
- extern void afs_CheckLocks(void);
-@@ -1033,6 +1041,9 @@ extern void afs_FlushReclaimedVcaches(void);
- void afs_vcacheInit(int astatSize);
- extern struct vcache *afs_FindVCache(struct VenusFid *afid, afs_int32 * retry,
- 				     afs_int32 flag);
-+extern void afs_BadFetchStatus(struct afs_conn *tc);
-+extern int afs_CheckFetchStatus(struct afs_conn *tc,
-+                                struct AFSFetchStatus *status);
- extern afs_int32 afs_FetchStatus(struct vcache *avc, struct VenusFid *afid,
- 				 struct vrequest *areq,
- 				 struct AFSFetchStatus *Outsp);
-diff --git a/src/afs/afs_segments.c b/src/afs/afs_segments.c
-index e5c9eb2..192a3d4 100644
---- a/src/afs/afs_segments.c
-+++ b/src/afs/afs_segments.c
-@@ -169,7 +169,6 @@ afs_StoreAllSegments(struct vcache *avc, struct vrequest *areq,
-     afs_hyper_t newDV, oldDV;	/* DV when we start, and finish, respectively */
-     struct dcache **dcList;
-     unsigned int i, j, minj, moredata, high, off;
--    afs_size_t tlen;
-     afs_size_t maxStoredLength;	/* highest offset we've written to server. */
-     int safety, marineronce = 0;
- 
-@@ -238,7 +237,6 @@ afs_StoreAllSegments(struct vcache *avc, struct vrequest *areq,
-     origCBs = afs_allCBs;
- 
-     maxStoredLength = 0;
--    tlen = avc->f.m.Length;
-     minj = 0;
- 
-     do {
-@@ -254,7 +252,12 @@ afs_StoreAllSegments(struct vcache *avc, struct vrequest *areq,
- 	for (j = 0; index != NULLIDX;) {
- 	    if ((afs_indexFlags[index] & IFDataMod)
- 		&& (afs_indexUnique[index] == avc->f.fid.Fid.Unique)) {
--		tdc = afs_GetDSlot(index, 0);	/* refcount+1. */
-+		tdc = afs_GetValidDSlot(index);	/* refcount+1. */
-+		if (!tdc) {
-+		    ReleaseWriteLock(&afs_xdcache);
-+		    code = EIO;
-+		    goto done;
-+		}
- 		ReleaseReadLock(&tdc->tlock);
- 		if (!FidCmp(&tdc->f.fid, &avc->f.fid) && tdc->f.chunk >= minj) {
- 		    off = tdc->f.chunk - minj;
-@@ -317,6 +320,7 @@ afs_StoreAllSegments(struct vcache *avc, struct vrequest *areq,
- 	minj += NCHUNKSATONCE;
-     } while (!code && moredata);
- 
-+ done:
-     UpgradeSToWLock(&avc->lock, 29);
- 
-     /* send a trivial truncation store if did nothing else */
-@@ -358,7 +362,8 @@ afs_StoreAllSegments(struct vcache *avc, struct vrequest *areq,
- 		 index != NULLIDX && safety < afs_cacheFiles + 2;) {
- 
- 		if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
--		    tdc = afs_GetDSlot(index, 0);
-+		    tdc = afs_GetValidDSlot(index);
-+		    if (!tdc) osi_Panic("afs_StoreAllSegments tdc dv");
- 		    ReleaseReadLock(&tdc->tlock);
- 
- 		    if (!FidCmp(&tdc->f.fid, &avc->f.fid)
-@@ -413,6 +418,9 @@ afs_StoreAllSegments(struct vcache *avc, struct vrequest *areq,
- 			UpgradeSToWLock(&tdc->lock, 678);
- 			hset(tdc->f.versionNo, avc->f.m.DataVersion);
- 			tdc->dflags |= DFEntryMod;
-+			/* DWriting may not have gotten cleared above, if all
-+			 * we did was a StoreMini */
-+			tdc->f.states &= ~DWriting;
- 			ConvertWToSLock(&tdc->lock);
- 		    }
- 		}
-@@ -522,7 +530,8 @@ afs_InvalidateAllSegments(struct vcache *avc)
- 
-     for (index = afs_dvhashTbl[hash]; index != NULLIDX;) {
- 	if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
--	    tdc = afs_GetDSlot(index, 0);
-+	    tdc = afs_GetValidDSlot(index);
-+	    if (!tdc) osi_Panic("afs_InvalidateAllSegments tdc count");
- 	    ReleaseReadLock(&tdc->tlock);
- 	    if (!FidCmp(&tdc->f.fid, &avc->f.fid))
- 		dcListMax++;
-@@ -536,7 +545,8 @@ afs_InvalidateAllSegments(struct vcache *avc)
- 
-     for (index = afs_dvhashTbl[hash]; index != NULLIDX;) {
- 	if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
--	    tdc = afs_GetDSlot(index, 0);
-+	    tdc = afs_GetValidDSlot(index);
-+	    if (!tdc) osi_Panic("afs_InvalidateAllSegments tdc store");
- 	    ReleaseReadLock(&tdc->tlock);
- 	    if (!FidCmp(&tdc->f.fid, &avc->f.fid)) {
- 		/* same file? we'll zap it */
-@@ -593,7 +603,7 @@ afs_ExtendSegments(struct vcache *avc, afs_size_t alen, struct vrequest *areq)
-     struct dcache *tdc;
-     void *zeros;
- 
--    zeros = (void *) afs_osi_Alloc(AFS_PAGESIZE);
-+    zeros = afs_osi_Alloc(AFS_PAGESIZE);
-     if (zeros == NULL)
- 	return ENOMEM;
-     memset(zeros, 0, AFS_PAGESIZE);
-@@ -714,7 +724,12 @@ afs_TruncateAllSegments(struct vcache *avc, afs_size_t alen,
-     dcCount = 0;
-     for (index = afs_dvhashTbl[code]; index != NULLIDX;) {
- 	if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
--	    tdc = afs_GetDSlot(index, 0);
-+	    tdc = afs_GetValidDSlot(index);
-+	    if (!tdc) {
-+		ReleaseWriteLock(&afs_xdcache);
-+		code = EIO;
-+		goto done;
-+	    }
- 	    ReleaseReadLock(&tdc->tlock);
- 	    if (!FidCmp(&tdc->f.fid, &avc->f.fid))
- 		dcCount++;
-@@ -732,7 +747,8 @@ afs_TruncateAllSegments(struct vcache *avc, afs_size_t alen,
- 
-     for (index = afs_dvhashTbl[code]; index != NULLIDX;) {
- 	if (afs_indexUnique[index] == avc->f.fid.Fid.Unique) {
--	    tdc = afs_GetDSlot(index, 0);
-+	    tdc = afs_GetValidDSlot(index);
-+	    if (!tdc) osi_Panic("afs_TruncateAllSegments tdc");
- 	    ReleaseReadLock(&tdc->tlock);
- 	    if (!FidCmp(&tdc->f.fid, &avc->f.fid)) {
- 		/* same file, and modified, we'll store it back */
-@@ -762,6 +778,7 @@ afs_TruncateAllSegments(struct vcache *avc, afs_size_t alen,
- 	ObtainSharedLock(&tdc->lock, 672);
- 	if (newSize < tdc->f.chunkBytes && newSize < MAX_AFS_UINT32) {
- 	    UpgradeSToWLock(&tdc->lock, 673);
-+	    tdc->f.states |= DWriting;
- 	    tfile = afs_CFileOpen(&tdc->f.inode);
- 	    afs_CFileTruncate(tfile, (afs_int32)newSize);
- 	    afs_CFileClose(tfile);
-@@ -780,6 +797,9 @@ afs_TruncateAllSegments(struct vcache *avc, afs_size_t alen,
- 
-     osi_Free(tdcArray, dcCount * sizeof(struct dcache *));
- 
-+    code = 0;
-+
-+ done:
- #if	(defined(AFS_SUN5_ENV))
-     ObtainWriteLock(&avc->vlock, 547);
-     if (--avc->activeV == 0 && (avc->vstates & VRevokeWait)) {
-@@ -789,5 +809,5 @@ afs_TruncateAllSegments(struct vcache *avc, afs_size_t alen,
-     ReleaseWriteLock(&avc->vlock);
- #endif
- 
--    return 0;
-+    return code;
- }
-diff --git a/src/afs/afs_server.c b/src/afs/afs_server.c
-index 0bfdce6..8470ca6 100644
---- a/src/afs/afs_server.c
-+++ b/src/afs/afs_server.c
-@@ -238,7 +238,7 @@ afs_MarkServerUpOrDown(struct srvAddr *sa, int a_isDown)
- 
- 
- afs_int32
--afs_ServerDown(struct srvAddr *sa)
-+afs_ServerDown(struct srvAddr *sa, int code)
- {
-     struct server *aserver = sa->server;
- 
-@@ -248,10 +248,10 @@ afs_ServerDown(struct srvAddr *sa)
-     afs_MarkServerUpOrDown(sa, SRVR_ISDOWN);
-     if (sa->sa_portal == aserver->cell->vlport)
- 	print_internet_address
--	    ("afs: Lost contact with volume location server ", sa, "", 1);
-+	    ("afs: Lost contact with volume location server ", sa, "", 1, code);
-     else
- 	print_internet_address("afs: Lost contact with file server ", sa, "",
--			       1);
-+			       1, code);
-     return 1;
- }				/*ServerDown */
- 
-@@ -318,7 +318,7 @@ CheckVLServer(struct srvAddr *sa, struct vrequest *areq)
- 	if (tc->srvr == sa) {
- 	    afs_MarkServerUpOrDown(sa, 0);
- 	    print_internet_address("afs: volume location server ", sa,
--				   " is back up", 2);
-+				   " is back up", 2, code);
- 	}
-     }
- 
-@@ -507,6 +507,7 @@ ForceAllNewConnections(void)
-     }
- 
-     addrs = afs_osi_Alloc(srvAddrCount * sizeof(*addrs));
-+    osi_Assert(addrs != NULL);
-     j = 0;
-     for (i = 0; i < NSERVERS; i++) {
- 	for (sa = afs_srvAddrs[i]; sa; sa = sa->next_bkt) {
-@@ -524,27 +525,257 @@ ForceAllNewConnections(void)
-     }
- }
- 
-+static void
-+CkSrv_MarkUpDown(struct afs_conn **conns, int nconns, afs_int32 *results)
-+{
-+    struct srvAddr *sa;
-+    struct afs_conn *tc;
-+    afs_int32 i;
-+
-+    for(i = 0; i < nconns; i++){
-+	tc = conns[i];
-+	sa = tc->srvr;
-+
-+	if (( results[i] >= 0 ) && (sa->sa_flags & SRVADDR_ISDOWN) &&
-+	    (tc->srvr == sa)) {
-+	    /* server back up */
-+	    print_internet_address("afs: file server ", sa, " is back up", 2,
-+			           results[i]);
-+
-+	    ObtainWriteLock(&afs_xserver, 244);
-+	    ObtainWriteLock(&afs_xsrvAddr, 245);
-+	    afs_MarkServerUpOrDown(sa, 0);
-+	    ReleaseWriteLock(&afs_xsrvAddr);
-+	    ReleaseWriteLock(&afs_xserver);
-+
-+	    if (afs_waitForeverCount) {
-+		afs_osi_Wakeup(&afs_waitForever);
-+	    }
-+	} else {
-+	    if (results[i] < 0) {
-+		/* server crashed */
-+		afs_ServerDown(sa, results[i]);
-+		ForceNewConnections(sa);  /* multi homed clients */
-+	    }
-+	}
-+    }
-+}
-+
-+void
-+CkSrv_SetTime(struct rx_connection **rxconns, int nconns, int nservers,
-+	      struct afs_conn **conns, struct srvAddr **addrs)
-+{
-+    struct afs_conn *tc;
-+    afs_int32 start, end = 0, delta;
-+    osi_timeval_t tv;
-+    struct srvAddr *sa;
-+    afs_int32 *conntimer, *results, *deltas;
-+    afs_int32 i = 0;
-+    char tbuffer[CVBS];
-+
-+    conntimer = afs_osi_Alloc(nservers * sizeof (afs_int32));
-+    osi_Assert(conntimer != NULL);
-+    results = afs_osi_Alloc(nservers * sizeof (afs_int32));
-+    osi_Assert(results != NULL);
-+    deltas = afs_osi_Alloc(nservers * sizeof (afs_int32));
-+    osi_Assert(deltas != NULL);
-+
-+    /* make sure we're starting from zero */
-+    memset(&deltas, 0, sizeof(deltas));
-+
-+    start = osi_Time();         /* time the gettimeofday call */
-+    AFS_GUNLOCK();
-+    if ( afs_setTimeHost == NULL ) {
-+	multi_Rx(rxconns,nconns)
-+	{
-+	    tv.tv_sec = tv.tv_usec = 0;
-+	    multi_RXAFS_GetTime(
-+		(afs_uint32 *)&tv.tv_sec, (afs_uint32 *)&tv.tv_usec);
-+	    tc = conns[multi_i];
-+	    sa = tc->srvr;
-+	    if (conntimer[multi_i] == 1)
-+		rx_SetConnDeadTime(tc->id, afs_rx_deadtime);
-+	    end = osi_Time();
-+	    results[multi_i]=multi_error;
-+	    if ((start == end) && !multi_error)
-+		deltas[multi_i] = end - tv.tv_sec;
-+	} multi_End;
-+    } else {			/* find and query setTimeHost only */
-+	for ( i = 0 ; i < nservers ; i++ ) {
-+	    if ( conns[i] == NULL || conns[i]->srvr == NULL )
-+		continue;
-+	    if ( conns[i]->srvr->server == afs_setTimeHost ) {
-+		tv.tv_sec = tv.tv_usec = 0;
-+		results[i] = RXAFS_GetTime(rxconns[i],
-+					   (afs_uint32 *)&tv.tv_sec,
-+					   (afs_uint32 *)&tv.tv_usec);
-+		end = osi_Time();
-+		if ((start == end) && !results[i])
-+		    deltas[i] = end - tv.tv_sec;
-+		break;
-+	    }
-+	}
-+    }
-+    AFS_GLOCK();
-+
-+    if ( afs_setTimeHost == NULL )
-+	CkSrv_MarkUpDown(conns, nconns, results);
-+    else /* We lack info for other than this host */
-+	CkSrv_MarkUpDown(&conns[i], 1, &results[i]);
-+
-+    /*
-+     * If we're supposed to set the time, and the call worked
-+     * quickly (same second response) and this is the host we
-+     * use for the time and the time is really different, then
-+     * really set the time
-+     */
-+    if (afs_setTime != 0) {
-+	for (i=0; i<nconns; i++) {
-+	    delta = deltas[i];
-+	    tc = conns[i];
-+	    sa = tc->srvr;
-+
-+	    if ((tc->srvr->server == afs_setTimeHost ||
-+		 /* Sync only to a server in the local cell */
-+		 (afs_setTimeHost == (struct server *)0 &&
-+		  afs_IsPrimaryCell(sa->server->cell)))) {
-+		/* set the time */
-+		char msgbuf[90];  /* strlen("afs: setting clock...") + slop */
-+		delta = end - tv.tv_sec;   /* how many secs fast we are */
-+
-+		afs_setTimeHost = tc->srvr->server;
-+		/* see if clock has changed enough to make it worthwhile */
-+		if (delta >= AFS_MINCHANGE || delta <= -AFS_MINCHANGE) {
-+		    end = osi_Time();
-+		    if (delta > AFS_MAXCHANGEBACK) {
-+			/* setting clock too far back, just do it a little */
-+			tv.tv_sec = end - AFS_MAXCHANGEBACK;
-+		    } else {
-+			tv.tv_sec = end - delta;
-+		    }
-+		    afs_osi_SetTime(&tv);
-+		    if (delta > 0) {
-+			strcpy(msgbuf, "afs: setting clock back ");
-+			if (delta > AFS_MAXCHANGEBACK) {
-+			    afs_strcat(msgbuf,
-+				       afs_cv2string(&tbuffer[CVBS],
-+						     AFS_MAXCHANGEBACK));
-+			    afs_strcat(msgbuf, " seconds (of ");
-+			    afs_strcat(msgbuf,
-+				       afs_cv2string(&tbuffer[CVBS],
-+						     delta -
-+						     AFS_MAXCHANGEBACK));
-+			    afs_strcat(msgbuf, ", via ");
-+			    print_internet_address(msgbuf, sa,
-+						   "); clock is still fast.",
-+						   0, 0);
-+			} else {
-+			    afs_strcat(msgbuf,
-+				       afs_cv2string(&tbuffer[CVBS], delta));
-+			    afs_strcat(msgbuf, " seconds (via ");
-+			    print_internet_address(msgbuf, sa, ").", 0, 0);
-+			}
-+		    } else {
-+			strcpy(msgbuf, "afs: setting clock ahead ");
-+			afs_strcat(msgbuf,
-+				   afs_cv2string(&tbuffer[CVBS], -delta));
-+			afs_strcat(msgbuf, " seconds (via ");
-+			print_internet_address(msgbuf, sa, ").", 0, 0);
-+		    }
-+                    /* We're only going to set it once; why bother looping? */
-+		    break;
-+		}
-+	    }
-+	}
-+    }
-+    afs_osi_Free(conntimer, nservers * sizeof(afs_int32));
-+    afs_osi_Free(deltas, nservers * sizeof(afs_int32));
-+    afs_osi_Free(results, nservers * sizeof(afs_int32));
-+}
-+
-+void
-+CkSrv_GetCaps(struct rx_connection **rxconns, int nconns, int nservers,
-+	      struct afs_conn **conns, struct srvAddr **addrs)
-+{
-+    Capabilities *caps;
-+    afs_int32 *results;
-+    afs_int32 i;
-+    struct server *ts;
-+
-+    caps = afs_osi_Alloc(nservers * sizeof (Capabilities));
-+    osi_Assert(caps != NULL);
-+    memset(caps, 0, nservers * sizeof(Capabilities));
-+
-+    results = afs_osi_Alloc(nservers * sizeof (afs_int32));
-+    osi_Assert(results != NULL);
-+
-+    AFS_GUNLOCK();
-+    multi_Rx(rxconns,nconns)
-+      {
-+	multi_RXAFS_GetCapabilities(&caps[multi_i]);
-+	results[multi_i] = multi_error;
-+      } multi_End;
-+    AFS_GLOCK();
-+
-+    for ( i = 0 ; i < nconns ; i++ ) {
-+	ts = addrs[i]->server;
-+	if ( !ts )
-+	    continue;
-+	ts->capabilities = 0;
-+	ts->flags |= SCAPS_KNOWN;
-+	if ( results[i] == RXGEN_OPCODE ) {
-+	    /* Mark server as up - it responded */
-+	    results[i] = 0;
-+	    continue;
-+	}
-+	if ( results[i] >= 0 )
-+	    /* we currently handle 32-bits of capabilities */
-+	    if (caps[i].Capabilities_len > 0) {
-+		ts->capabilities = caps[i].Capabilities_val[0];
-+		xdr_free((xdrproc_t)xdr_Capabilities, &caps[i]);
-+		caps[i].Capabilities_val = NULL;
-+		caps[i].Capabilities_len = 0;
-+	    }
-+    }
-+    CkSrv_MarkUpDown(conns, nconns, results);
-+
-+    afs_osi_Free(caps, nservers * sizeof(Capabilities));
-+    afs_osi_Free(results, nservers * sizeof(afs_int32));
-+}
-+
- /* check down servers (if adown), or running servers (if !adown) */
- void
- afs_CheckServers(int adown, struct cell *acellp)
- {
-+    afs_LoopServers(adown?AFS_LS_DOWN:AFS_LS_UP, acellp, 1, CkSrv_GetCaps,
-+		    afs_setTime?CkSrv_SetTime:NULL);
-+}
-+
-+/* adown: AFS_LS_UP   - check only up
-+ *        AFS_LS_DOWN - check only down.
-+ *        AFS_LS_ALL  - check all */
-+void
-+afs_LoopServers(int adown, struct cell *acellp, int vlalso,
-+		void (*func1) (struct rx_connection **rxconns, int nconns,
-+			       int nservers, struct afs_conn **conns,
-+			       struct srvAddr **addrs),
-+		void (*func2) (struct rx_connection **rxconns, int nconns,
-+			       int nservers, struct afs_conn **conns,
-+			       struct srvAddr **addrs))
-+{
-     struct vrequest treq;
-     struct server *ts;
-     struct srvAddr *sa;
--    struct afs_conn *tc;
-+    struct afs_conn *tc = NULL;
-     afs_int32 i, j;
-     afs_int32 code;
--    afs_int32 start, end = 0, delta;
--    osi_timeval_t tv;
-     struct unixuser *tu;
--    char tbuffer[CVBS];
-     int srvAddrCount;
-     struct srvAddr **addrs;
-     struct afs_conn **conns;
-     int nconns;
-     struct rx_connection **rxconns;
--    afs_int32 *conntimer, *deltas, *results;
--    Capabilities *caps = NULL;
-+    afs_int32 *conntimer, *results;
- 
-     AFS_STATCNT(afs_CheckServers);
- 
-@@ -573,6 +804,7 @@ afs_CheckServers(int adown, struct cell *acellp)
-     }
- 
-     addrs = afs_osi_Alloc(srvAddrCount * sizeof(*addrs));
-+    osi_Assert(addrs != NULL);
-     j = 0;
-     for (i = 0; i < NSERVERS; i++) {
- 	for (sa = afs_srvAddrs[i]; sa; sa = sa->next_bkt) {
-@@ -585,19 +817,18 @@ afs_CheckServers(int adown, struct cell *acellp)
-     ReleaseReadLock(&afs_xsrvAddr);
-     ReleaseReadLock(&afs_xserver);
- 
--    conns = (struct afs_conn **)afs_osi_Alloc(j * sizeof(struct afs_conn *));
--    rxconns = (struct rx_connection **)afs_osi_Alloc(j * sizeof(struct rx_connection *));
--    conntimer = (afs_int32 *)afs_osi_Alloc(j * sizeof (afs_int32));
--    deltas = (afs_int32 *)afs_osi_Alloc(j * sizeof (afs_int32));
--    results = (afs_int32 *)afs_osi_Alloc(j * sizeof (afs_int32));
--
--    caps = (Capabilities *)afs_osi_Alloc(j * sizeof (Capabilities));
--    memset(caps, 0, j * sizeof(Capabilities));
-+    conns = afs_osi_Alloc(j * sizeof(struct afs_conn *));
-+    osi_Assert(conns != NULL);
-+    rxconns = afs_osi_Alloc(j * sizeof(struct rx_connection *));
-+    osi_Assert(rxconns != NULL);
-+    conntimer = afs_osi_Alloc(j * sizeof (afs_int32));
-+    osi_Assert(conntimer != NULL);
-+    results = afs_osi_Alloc(j * sizeof (afs_int32));
-+    osi_Assert(results != NULL);
- 
-     for (i = 0; i < j; i++) {
- 	struct rx_connection *rxconn;
- 
--	deltas[i] = 0;
- 	sa = addrs[i];
- 	ts = sa->server;
- 	if (!ts)
-@@ -609,13 +840,14 @@ afs_CheckServers(int adown, struct cell *acellp)
- 	if (acellp && acellp != ts->cell)
- 	    continue;
- 
--	if ((!adown && (sa->sa_flags & SRVADDR_ISDOWN))
--	    || (adown && !(sa->sa_flags & SRVADDR_ISDOWN)))
-+	if (((adown==AFS_LS_DOWN) && !(sa->sa_flags & SRVADDR_ISDOWN))
-+	    || ((adown==AFS_LS_UP) && (sa->sa_flags & SRVADDR_ISDOWN)))
- 	    continue;
- 
- 	/* check vlserver with special code */
- 	if (sa->sa_portal == AFS_VLPORT) {
--	    CheckVLServer(sa, &treq);
-+	    if (vlalso)
-+		CheckVLServer(sa, &treq);
- 	    continue;
- 	}
- 
-@@ -646,165 +878,15 @@ afs_CheckServers(int adown, struct cell *acellp)
- 	    afs_PutConn(tc, rxconn, SHARED_LOCK);
-     } /* Outer loop over addrs */
- 
--    AFS_GUNLOCK();
--    multi_Rx(rxconns,nconns)
--      {
--	multi_RXAFS_GetCapabilities(&caps[multi_i]);
--	results[multi_i] = multi_error;
--      } multi_End;
--    AFS_GLOCK();
-+    (*func1)(rxconns, nconns, j, conns, addrs);
- 
--    for ( i = 0 ; i < nconns ; i++ ) {
--	ts = addrs[i]->server;
--	if ( !ts )
--	    continue;
--	ts->capabilities = 0;
--	ts->flags |= SCAPS_KNOWN;
--	if ( results[i] == RXGEN_OPCODE ) {
--	    /* Mark server as up - it responded */
--	    results[i] = 0;
--	    continue;
--	}
--	if ( results[i] >= 0 )
--	    /* we currently handle 32-bits of capabilities */
--	    if (caps[i].Capabilities_len > 0) {
--		ts->capabilities = caps[i].Capabilities_val[0];
--		xdr_free((xdrproc_t)xdr_Capabilities, &caps[i]);
--		caps[i].Capabilities_val = NULL;
--		caps[i].Capabilities_len = 0;
--	    }
--    }
--
--    if ( afs_setTime != 0 ) {
--	start = osi_Time();         /* time the gettimeofday call */
--	AFS_GUNLOCK();
--	if ( afs_setTimeHost == NULL ) {
--	    multi_Rx(rxconns,nconns)
--	      {
--		tv.tv_sec = tv.tv_usec = 0;
--		multi_RXAFS_GetTime(
--			(afs_uint32 *)&tv.tv_sec, (afs_uint32 *)&tv.tv_usec);
--		tc = conns[multi_i];
--		sa = tc->srvr;
--		if (conntimer[multi_i] == 1)
--		    rx_SetConnDeadTime(rxconns[multi_i], afs_rx_deadtime);
--		end = osi_Time();
--		results[multi_i]=multi_error;
--		if ((start == end) && !multi_error)
--		  deltas[multi_i] = end - tv.tv_sec;
--
--	      } multi_End;
--	    }
--	else {			/* find and query setTimeHost only */
--	    for ( i = 0 ; i < nconns ; i++ ) {
--		if ( conns[i] == NULL || conns[i]->srvr == NULL )
--		    continue;
--		if ( conns[i]->srvr->server == afs_setTimeHost ) {
--		    tv.tv_sec = tv.tv_usec = 0;
--		    results[i] = RXAFS_GetTime(rxconns[i],
--				(afs_uint32 *)&tv.tv_sec, (afs_uint32 *)&tv.tv_usec);
--		    end = osi_Time();
--		    if ((start == end) && !results[i])
--			deltas[i] = end - tv.tv_sec;
--		    break;
--		}
--	    }
--	}
--	AFS_GLOCK();
--    }
--
--    for(i=0;i<nconns;i++){
--      tc = conns[i];
--      sa = tc->srvr;
--
--      if (( results[i] >= 0 ) && (sa->sa_flags & SRVADDR_ISDOWN) && (tc->srvr == sa)) {
--	/* server back up */
--	print_internet_address("afs: file server ", sa, " is back up", 2);
--
--	ObtainWriteLock(&afs_xserver, 244);
--	ObtainWriteLock(&afs_xsrvAddr, 245);
--	afs_MarkServerUpOrDown(sa, 0);
--	ReleaseWriteLock(&afs_xsrvAddr);
--	ReleaseWriteLock(&afs_xserver);
--
--	if (afs_waitForeverCount) {
--	  afs_osi_Wakeup(&afs_waitForever);
--	}
--      } else {
--	  if ((results[i] < 0) && (results[i] != RXGEN_OPCODE)) {
--	      /* server crashed */
--	      afs_ServerDown(sa);
--	      ForceNewConnections(sa);  /* multi homed clients */
--	  }
--      }
-+    if (func2) {
-+	(*func2)(rxconns, nconns, j, conns, addrs);
-     }
- 
--    /*
--     * If we're supposed to set the time, and the call worked
--     * quickly (same second response) and this is the host we
--     * use for the time and the time is really different, then
--     * really set the time
--     */
--    if (afs_setTime != 0) {
--	for (i=0; i<nconns; i++) {
--	    delta = deltas[i];
--	    tc = conns[i];
--	    sa = tc->srvr;
--
--	    if ((tc->srvr->server == afs_setTimeHost ||
--		 /* Sync only to a server in the local cell */
--		 (afs_setTimeHost == (struct server *)0 &&
--		  afs_IsPrimaryCell(sa->server->cell)))) {
--		/* set the time */
--		char msgbuf[90];  /* strlen("afs: setting clock...") + slop */
--		delta = end - tv.tv_sec;   /* how many secs fast we are */
--
--		afs_setTimeHost = tc->srvr->server;
--		/* see if clock has changed enough to make it worthwhile */
--		if (delta >= AFS_MINCHANGE || delta <= -AFS_MINCHANGE) {
--		    end = osi_Time();
--		    if (delta > AFS_MAXCHANGEBACK) {
--			/* setting clock too far back, just do it a little */
--			tv.tv_sec = end - AFS_MAXCHANGEBACK;
--		    } else {
--			tv.tv_sec = end - delta;
--		    }
--		    afs_osi_SetTime(&tv);
--		    if (delta > 0) {
--			strcpy(msgbuf, "afs: setting clock back ");
--			if (delta > AFS_MAXCHANGEBACK) {
--			    afs_strcat(msgbuf,
--				       afs_cv2string(&tbuffer[CVBS],
--						     AFS_MAXCHANGEBACK));
--			    afs_strcat(msgbuf, " seconds (of ");
--			    afs_strcat(msgbuf,
--				       afs_cv2string(&tbuffer[CVBS],
--						     delta -
--						     AFS_MAXCHANGEBACK));
--			    afs_strcat(msgbuf, ", via ");
--			    print_internet_address(msgbuf, sa,
--						   "); clock is still fast.",
--						   0);
--			} else {
--			    afs_strcat(msgbuf,
--				       afs_cv2string(&tbuffer[CVBS], delta));
--			    afs_strcat(msgbuf, " seconds (via ");
--			    print_internet_address(msgbuf, sa, ").", 0);
--			}
--		    } else {
--			strcpy(msgbuf, "afs: setting clock ahead ");
--			afs_strcat(msgbuf,
--				   afs_cv2string(&tbuffer[CVBS], -delta));
--			afs_strcat(msgbuf, " seconds (via ");
--			print_internet_address(msgbuf, sa, ").", 0);
--		    }
--                    /* We're only going to set it once; why bother looping? */
--		    break;
--		}
--	    }
--	}
--    }
-     for (i = 0; i < nconns; i++) {
-+	if (conntimer[i] == 1)
-+	    rx_SetConnDeadTime(tc->id, afs_rx_deadtime);
- 	afs_PutConn(conns[i], rxconns[i], SHARED_LOCK);     /* done with it now */
-     }
- 
-@@ -812,9 +894,7 @@ afs_CheckServers(int adown, struct cell *acellp)
-     afs_osi_Free(conns, j * sizeof(struct afs_conn *));
-     afs_osi_Free(rxconns, j * sizeof(struct rx_connection *));
-     afs_osi_Free(conntimer, j * sizeof(afs_int32));
--    afs_osi_Free(deltas, j * sizeof(afs_int32));
-     afs_osi_Free(results, j * sizeof(afs_int32));
--    afs_osi_Free(caps, j * sizeof(Capabilities));
- 
- } /*afs_CheckServers*/
- 
-@@ -1731,11 +1811,10 @@ afs_GetCapabilities(struct server *ts)
-     ObtainWriteLock(&afs_xserver, 723);
-     /* we forced a conn above; important we mark it down if needed */
-     if ((code < 0) && (code != RXGEN_OPCODE)) {
--	afs_PutConn(tc, rxconn, SHARED_LOCK);
--	afs_ServerDown(tc->srvr);
-+	afs_ServerDown(tc->srvr, code);
- 	ForceNewConnections(tc->srvr); /* multi homed clients */
-     }
--
-+    afs_PutConn(tc, rxconn, SHARED_LOCK);
-     if ( code && code != RXGEN_OPCODE ) {
- 	afs_warn("RXAFS_GetCapabilities failed with code %d\n", code);
- 	/* better not be anything to free. we failed! */
-@@ -1803,7 +1882,6 @@ afs_GetServer(afs_uint32 *aserverp, afs_int32 nservers, afs_int32 acell,
- {
-     struct server *oldts = 0, *ts, *newts, *orphts = 0;
-     struct srvAddr *oldsa, *newsa, *nextsa, *orphsa;
--    u_short fsport;
-     afs_int32 iphash, k, srvcount = 0;
-     unsigned int srvhash;
- 
-@@ -1865,7 +1943,7 @@ afs_GetServer(afs_uint32 *aserverp, afs_int32 nservers, afs_int32 acell,
-     if (oldts) {
- 	newts = oldts;
-     } else {
--	newts = (struct server *)afs_osi_Alloc(sizeof(struct server));
-+	newts = afs_osi_Alloc(sizeof(struct server));
- 	if (!newts)
- 	    panic("malloc of server struct");
- 	afs_totalServers++;
-@@ -1887,8 +1965,6 @@ afs_GetServer(afs_uint32 *aserverp, afs_int32 nservers, afs_int32 acell,
-     if (acell)
- 	newts->cell = afs_GetCell(acell, 0);
- 
--    fsport = (newts->cell ? newts->cell->fsport : AFS_FSPORT);
--
-     /* For each IP address we are registering */
-     for (k = 0; k < nservers; k++) {
- 	iphash = SHash(aserverp[k]);
-@@ -1910,7 +1986,7 @@ afs_GetServer(afs_uint32 *aserverp, afs_int32 nservers, afs_int32 acell,
- 	if (oldsa) {
- 	    newsa = oldsa;
- 	} else {
--	    newsa = (struct srvAddr *)afs_osi_Alloc(sizeof(struct srvAddr));
-+	    newsa = afs_osi_Alloc(sizeof(struct srvAddr));
- 	    if (!newsa)
- 		panic("malloc of srvAddr struct");
- 	    afs_totalSrvAddrs++;
-@@ -1960,8 +2036,7 @@ afs_GetServer(afs_uint32 *aserverp, afs_int32 nservers, afs_int32 acell,
- 
- 	    /* Have a srvAddr struct. Now get a server struct (if not already) */
- 	    if (!orphts) {
--		orphts =
--		    (struct server *)afs_osi_Alloc(sizeof(struct server));
-+		orphts = afs_osi_Alloc(sizeof(struct server));
- 		if (!orphts)
- 		    panic("malloc of lo server struct");
- 		memset(orphts, 0, sizeof(struct server));
-diff --git a/src/afs/afs_user.c b/src/afs/afs_user.c
-index f471216..df18a7f 100644
---- a/src/afs/afs_user.c
-+++ b/src/afs/afs_user.c
-@@ -485,7 +485,8 @@ afs_GetUser(afs_int32 auid, afs_int32 acell, afs_int32 locktype)
- 	    }
- 	}
-     }
--    tu = (struct unixuser *)afs_osi_Alloc(sizeof(struct unixuser));
-+    tu = afs_osi_Alloc(sizeof(struct unixuser));
-+    osi_Assert(tu != NULL);
- #ifndef AFS_NOSTATS
-     afs_stats_cmfullperf.authent.PAGCreations++;
- #endif /* AFS_NOSTATS */
-diff --git a/src/afs/afs_util.c b/src/afs/afs_util.c
-index 2b20a94..d324499 100644
---- a/src/afs/afs_util.c
-+++ b/src/afs/afs_util.c
-@@ -187,7 +187,7 @@ afs_strdup(char *s)
-     int cc;
- 
-     cc = strlen(s) + 1;
--    n = (char *)afs_osi_Alloc(cc);
-+    n = afs_osi_Alloc(cc);
-     if (n)
- 	memcpy(n, s, cc);
- 
-@@ -196,7 +196,7 @@ afs_strdup(char *s)
- 
- void
- print_internet_address(char *preamble, struct srvAddr *sa, char *postamble,
--		       int flag)
-+		       int flag, int code)
- {
-     struct server *aserver = sa->server;
-     char *ptr = "\n";
-@@ -216,12 +216,12 @@ print_internet_address(char *preamble, struct srvAddr *sa, char *postamble,
- 		" (multi-homed address; other same-host interfaces may still be down)\n";
- 	}
-     }
--    afs_warn("%s%d.%d.%d.%d in cell %s%s%s", preamble, (address >> 24),
-+    afs_warn("%s%d.%d.%d.%d in cell %s%s (code %d)%s", preamble, (address >> 24),
- 	     (address >> 16) & 0xff, (address >> 8) & 0xff, (address) & 0xff,
--	     aserver->cell->cellName, postamble, ptr);
--    afs_warnuser("%s%d.%d.%d.%d in cell %s%s%s", preamble, (address >> 24),
-+	     aserver->cell->cellName, postamble, code, ptr);
-+    afs_warnuser("%s%d.%d.%d.%d in cell %s%s (code %d)%s", preamble, (address >> 24),
- 		 (address >> 16) & 0xff, (address >> 8) & 0xff,
--		 (address) & 0xff, aserver->cell->cellName, postamble, ptr);
-+		 (address) & 0xff, aserver->cell->cellName, postamble, code, ptr);
- 
- }				/*print_internet_address */
- 
-@@ -370,20 +370,35 @@ afs_data_pointer_to_int32(const void *p)
- #ifdef AFS_LINUX20_ENV
- 
- afs_int32
--afs_calc_inum(afs_int32 volume, afs_int32 vnode)
-+afs_calc_inum(afs_int32 cell, afs_int32 volume, afs_int32 vnode)
- {
--    afs_int32 ino, vno = vnode;
-+    afs_int32 ino = 0, vno = vnode;
-     char digest[16];
-     struct afs_md5 ct;
- 
-     if (afs_new_inum) {
-+	int offset;
- 	AFS_MD5_Init(&ct);
-+	AFS_MD5_Update(&ct, &cell, 4);
- 	AFS_MD5_Update(&ct, &volume, 4);
- 	AFS_MD5_Update(&ct, &vnode, 4);
- 	AFS_MD5_Final(digest, &ct);
--	memcpy(&ino, digest, sizeof(afs_int32));
--	ino ^= (ino ^ vno) & 1;
--    } else {
-+
-+	/* Userspace may react oddly to an inode number of 0 or 1, so keep
-+	 * reading more of the md5 digest if we get back one of those.
-+	 * Make sure not to read beyond the end of the digest; if we somehow
-+	 * still have a 0, we will fall through to the non-md5 calculation. */
-+	for (offset = 0;
-+	     (ino == 0 || ino == 1) &&
-+	      offset + sizeof(ino) <= sizeof(digest);
-+	     offset++) {
-+
-+	    memcpy(&ino, &digest[offset], sizeof(ino));
-+	    ino ^= (ino ^ vno) & 1;
-+	    ino &= 0x7fffffff;      /* Assumes 32 bit ino_t ..... */
-+	}
-+    }
-+    if (ino == 0 || ino == 1) {
- 	ino = (volume << 16) + vnode;
-     }
-     ino &= 0x7fffffff;      /* Assumes 32 bit ino_t ..... */
-@@ -393,7 +408,7 @@ afs_calc_inum(afs_int32 volume, afs_int32 vnode)
- #else
- 
- afs_int32
--afs_calc_inum (afs_int32 volume, afs_int32 vnode)
-+afs_calc_inum(afs_int32 cell, afs_int32 volume, afs_int32 vnode)
- {
-     return (volume << 16) + vnode;
- }
-diff --git a/src/afs/afs_vcache.c b/src/afs/afs_vcache.c
-index ec45a1a..ca07e92 100644
---- a/src/afs/afs_vcache.c
-+++ b/src/afs/afs_vcache.c
-@@ -205,8 +205,6 @@ afs_FlushVCache(struct vcache *avc, int *slept)
-     vn_reinit(AFSTOV(avc));
- #endif
-     afs_FreeAllAxs(&(avc->Access));
--    if (!afs_shuttingdown)
--	afs_QueueVCB(avc, slept);
-     ObtainWriteLock(&afs_xcbhash, 460);
-     afs_DequeueCallback(avc);	/* remove it from queued callbacks list */
-     avc->f.states &= ~(CStatd | CUnique);
-@@ -216,6 +214,9 @@ afs_FlushVCache(struct vcache *avc, int *slept)
-     else
- 	osi_dnlc_purgevp(avc);
- 
-+    if (!afs_shuttingdown)
-+	afs_QueueVCB(avc, slept);
-+
-     /*
-      * Next, keep track of which vnodes we've deleted for create's
-      * optimistic synchronization algorithm
-@@ -308,9 +309,8 @@ afs_AllocCBR(void)
- 	    afs_stats_cmperf.CallBackFlushes++;
- 	} else {
- 	    /* try allocating */
--	    tsp =
--		(struct afs_cbr *)afs_osi_Alloc(AFS_NCBRS *
--						sizeof(struct afs_cbr));
-+	    tsp = afs_osi_Alloc(AFS_NCBRS * sizeof(struct afs_cbr));
-+	    osi_Assert(tsp != NULL);
- 	    for (i = 0; i < AFS_NCBRS - 1; i++) {
- 		tsp[i].next = &tsp[i + 1];
- 	    }
-@@ -378,6 +378,7 @@ afs_FlushVCBs(afs_int32 lockit)
- 	return code;
-     treq.flags |= O_NONBLOCK;
-     tfids = afs_osi_Alloc(sizeof(struct AFSFid) * AFS_MAXCBRSCALL);
-+    osi_Assert(tfids != NULL);
- 
-     if (lockit)
- 	ObtainWriteLock(&afs_xvcb, 273);
-@@ -689,10 +690,11 @@ afs_ShakeLooseVCaches(afs_int32 anumber)
- 	    i = 0;
- 	    continue;	/* start over - may have raced. */
- 	}
--	if (tq == uq) {
-+	if (uq == &VLRU) {
- 	    if (anumber && !defersleep) {
- 		defersleep = 1;
--		tq = VLRU.prev;
-+		uq = VLRU.prev;
-+		i = 0;
- 		continue;
- 	    }
- 	    break;
-@@ -1409,9 +1411,6 @@ afs_ProcessFS(struct vcache *avc,
- 	      struct AFSFetchStatus *astat, struct vrequest *areq)
- {
-     afs_size_t length;
--#ifdef AFS_DARWIN80_ENV
--    int fixup = 0;
--#endif
-     AFS_STATCNT(afs_ProcessFS);
- 
- #ifdef AFS_64BIT_CLIENT
-@@ -1446,32 +1445,16 @@ afs_ProcessFS(struct vcache *avc,
-     avc->f.m.Group = astat->Group;
-     avc->f.m.LinkCount = astat->LinkCount;
-     if (astat->FileType == File) {
--#ifdef AFS_DARWIN80_ENV
--	if (avc->f.m.Type != VREG)
--	    fixup = 1;
--#endif
- 	vSetType(avc, VREG);
- 	avc->f.m.Mode |= S_IFREG;
-     } else if (astat->FileType == Directory) {
--#ifdef AFS_DARWIN80_ENV
--	if (avc->f.m.Type != VDIR)
--	    fixup = 1;
--#endif
- 	vSetType(avc, VDIR);
- 	avc->f.m.Mode |= S_IFDIR;
-     } else if (astat->FileType == SymbolicLink) {
- 	if (afs_fakestat_enable && (avc->f.m.Mode & 0111) == 0) {
--#ifdef AFS_DARWIN80_ENV
--	    if (avc->f.m.Type != VDIR)
--		fixup = 1;
--#endif
- 	    vSetType(avc, VDIR);
- 	    avc->f.m.Mode |= S_IFDIR;
- 	} else {
--#ifdef AFS_DARWIN80_ENV
--	    if (avc->f.m.Type != VLNK)
--		fixup = 1;
--#endif
- 	    vSetType(avc, VLNK);
- 	    avc->f.m.Mode |= S_IFLNK;
- 	}
-@@ -1479,10 +1462,6 @@ afs_ProcessFS(struct vcache *avc,
- 	    avc->mvstat = 1;
- 	}
-     }
--#ifdef AFS_DARWIN80_ENV
--    if (fixup)
--	printf("found mistyped vnode!\n");
--#endif
-     avc->f.anyAccess = astat->AnonymousAccess;
- #ifdef badidea
-     if ((astat->CallerAccess & ~astat->AnonymousAccess))
-@@ -1532,7 +1511,6 @@ afs_RemoteLookup(struct VenusFid *afid, struct vrequest *areq,
- 		 struct AFSVolSync *tsyncp)
- {
-     afs_int32 code;
--    afs_uint32 start;
-     struct afs_conn *tc;
-     struct rx_connection *rxconn;
-     struct AFSFetchStatus OutDirStatus;
-@@ -1544,7 +1522,6 @@ afs_RemoteLookup(struct VenusFid *afid, struct vrequest *areq,
- 	if (tc) {
- 	    if (serverp)
- 		*serverp = tc->srvr->server;
--	    start = osi_Time();
- 	    XSTATS_START_TIME(AFS_STATS_FS_RPCIDX_XLOOKUP);
- 	    RX_AFS_GUNLOCK();
- 	    code =
-@@ -2302,6 +2279,49 @@ afs_UpdateStatus(struct vcache *avc, struct VenusFid *afid,
-     	afs_PutVolume(volp, READ_LOCK);
- }
- 
-+void
-+afs_BadFetchStatus(struct afs_conn *tc)
-+{
-+    int addr = ntohl(tc->srvr->sa_ip);
-+    afs_warn("afs: Invalid AFSFetchStatus from server %u.%u.%u.%u\n",
-+             (addr >> 24) & 0xff, (addr >> 16) & 0xff, (addr >> 8) & 0xff,
-+             (addr) & 0xff);
-+    afs_warn("afs: This suggests the server may be sending bad data that "
-+             "can lead to availability issues or data corruption. The "
-+             "issue has been avoided for now, but it may not always be "
-+             "detectable. Please upgrade the server if possible.\n");
-+}
-+
-+/**
-+ * Check if a given AFSFetchStatus structure is sane.
-+ *
-+ * @param[in] tc The server from which we received the status
-+ * @param[in] status The status we received
-+ *
-+ * @return whether the given structure is valid or not
-+ *  @retval 0 the structure is fine
-+ *  @retval nonzero the structure looks like garbage; act as if we received
-+ *                  the returned error code from the server
-+ */
-+int
-+afs_CheckFetchStatus(struct afs_conn *tc, struct AFSFetchStatus *status)
-+{
-+    if (status->errorCode ||
-+        status->InterfaceVersion != 1 ||
-+        !(status->FileType > Invalid && status->FileType <= SymbolicLink) ||
-+        status->ParentVnode == 0 || status->ParentUnique == 0) {
-+
-+	afs_warn("afs: FetchStatus ec %u iv %u ft %u pv %u pu %u\n",
-+	         (unsigned)status->errorCode, (unsigned)status->InterfaceVersion,
-+	         (unsigned)status->FileType, (unsigned)status->ParentVnode,
-+	         (unsigned)status->ParentUnique);
-+	afs_BadFetchStatus(tc);
-+
-+	return VBUSY;
-+    }
-+    return 0;
-+}
-+
- /*!
-  * Must be called with avc write-locked
-  * don't absolutely have to invalidate the hint unless the dv has
-@@ -2333,6 +2353,10 @@ afs_FetchStatus(struct vcache * avc, struct VenusFid * afid,
- 
- 	    XSTATS_END_TIME;
- 
-+	    if (code == 0) {
-+		code = afs_CheckFetchStatus(tc, Outsp);
-+	    }
-+
- 	} else
- 	    code = -1;
-     } while (afs_Analyze
-@@ -2919,7 +2943,8 @@ afs_vcacheInit(int astatSize)
- 
- #if !defined(AFS_LINUX22_ENV)
-     /* Allocate and thread the struct vcache entries */
--    tvp = (struct vcache *)afs_osi_Alloc(astatSize * sizeof(struct vcache));
-+    tvp = afs_osi_Alloc(astatSize * sizeof(struct vcache));
-+    osi_Assert(tvp != NULL);
-     memset(tvp, 0, sizeof(struct vcache) * astatSize);
- 
-     Initial_freeVCList = tvp;
-diff --git a/src/afs/afs_volume.c b/src/afs/afs_volume.c
-index 2b278c3..df0e64f 100644
---- a/src/afs/afs_volume.c
-+++ b/src/afs/afs_volume.c
-@@ -245,7 +245,8 @@ afs_MemGetVolSlot(void)
-     if (!afs_freeVolList) {
- 	struct volume *newVp;
- 
--	newVp = (struct volume *)afs_osi_Alloc(sizeof(struct volume));
-+	newVp = afs_osi_Alloc(sizeof(struct volume));
-+	osi_Assert(newVp != NULL);
- 
- 	newVp->next = NULL;
- 	afs_freeVolList = newVp;
-@@ -317,7 +318,7 @@ afs_CheckVolumeNames(int flags)
- 	    for (tv = afs_volumes[i]; tv; tv = tv->next)
- 		++vsize;
- 
--	volumeID = (afs_int32 *) afs_osi_Alloc(2 * vsize * sizeof(*volumeID));
-+	volumeID = afs_osi_Alloc(2 * vsize * sizeof(*volumeID));
- 	cellID = (volumeID) ? volumeID + vsize : 0;
-     }
- 
-@@ -635,6 +636,7 @@ afs_SetupVolume(afs_int32 volid, char *aname, void *ve, struct cell *tcell,
-     if (agood) {
- 	if (!tv->name) {
- 	    tv->name = afs_osi_Alloc(strlen(aname) + 1);
-+	    osi_Assert(tv->name != NULL);
- 	    strcpy(tv->name, aname);
- 	}
-     }
-@@ -702,6 +704,7 @@ afs_NewDynrootVolume(struct VenusFid *fid)
-     if (!tcell)
- 	return NULL;
-     tve = afs_osi_Alloc(sizeof(*tve));
-+    osi_Assert(tve != NULL);
-     if (!(tcell->states & CHasVolRef))
- 	tcell->states |= CHasVolRef;
- 
-diff --git a/src/afsd/afsd.c b/src/afsd/afsd.c
-index 5822530..603551f 100644
---- a/src/afsd/afsd.c
-+++ b/src/afsd/afsd.c
-@@ -2123,23 +2123,25 @@ afsd_run(void)
- 	       cacheFiles, inode_for_V, (cacheFiles * sizeof(AFSD_INO_T)));
- #endif
- 
--    /*
--     * Set up all the pathnames we'll need for later.
--     */
--    sprintf(fullpn_DCacheFile, "%s/%s", cacheBaseDir, DCACHEFILE);
--    sprintf(fullpn_VolInfoFile, "%s/%s", cacheBaseDir, VOLINFOFILE);
--    sprintf(fullpn_CellInfoFile, "%s/%s", cacheBaseDir, CELLINFOFILE);
--    sprintf(fullpn_VFile, "%s/", cacheBaseDir);
--    vFilePtr = fullpn_VFile + strlen(fullpn_VFile);
--
--    if (!(cacheFlags & AFSCALL_INIT_MEMCACHE)
--	&& (fsTypeMsg = CheckCacheBaseDir(cacheBaseDir))) {
-+    if (!(cacheFlags & AFSCALL_INIT_MEMCACHE)) {
-+	/*
-+	 * Set up all the pathnames we'll need for later.
-+	 */
-+	sprintf(fullpn_DCacheFile, "%s/%s", cacheBaseDir, DCACHEFILE);
-+	sprintf(fullpn_VolInfoFile, "%s/%s", cacheBaseDir, VOLINFOFILE);
-+	sprintf(fullpn_CellInfoFile, "%s/%s", cacheBaseDir, CELLINFOFILE);
-+	sprintf(fullpn_VFile, "%s/", cacheBaseDir);
-+	vFilePtr = fullpn_VFile + strlen(fullpn_VFile);
-+
-+	fsTypeMsg = CheckCacheBaseDir(cacheBaseDir);
-+	if (fsTypeMsg) {
- #ifdef AFS_SUN5_ENV
--	printf("%s: WARNING: Cache dir check failed (%s)\n", rn, fsTypeMsg);
-+	    printf("%s: WARNING: Cache dir check failed (%s)\n", rn, fsTypeMsg);
- #else
--	printf("%s: ERROR: Cache dir check failed (%s)\n", rn, fsTypeMsg);
--	exit(1);
-+	    printf("%s: ERROR: Cache dir check failed (%s)\n", rn, fsTypeMsg);
-+	    exit(1);
- #endif
-+	}
-     }
- 
-     /*
-@@ -2410,13 +2412,13 @@ afsd_run(void)
-      * Give the kernel the names of the AFS files cached on the workstation's
-      * disk.
-      */
--    if (afsd_debug)
--	printf
--	    ("%s: Calling AFSOP_CACHEFILE for each of the %d files in '%s'\n",
--	     rn, cacheFiles, cacheBaseDir);
-     if (!(cacheFlags & AFSCALL_INIT_MEMCACHE)) {
--	/* ... and again ... */
- 	int nocachefile = 0;
-+	if (afsd_debug)
-+	    printf
-+	        ("%s: Calling AFSOP_CACHEFILE for each of the %d files in '%s'\n",
-+	         rn, cacheFiles, cacheBaseDir);
-+	/* ... and again ... */
- 	for (currVFile = 0; currVFile < cacheFiles; currVFile++) {
- 	    if (!nocachefile) {
- 		sprintf(fullpn_VFile, "%s/D%d/V%d", cacheBaseDir, dir_for_V[currVFile], currVFile);
-diff --git a/src/afsd/afsd_kernel.c b/src/afsd/afsd_kernel.c
-index 1f7fdbb..e1e87a7 100644
---- a/src/afsd/afsd_kernel.c
-+++ b/src/afsd/afsd_kernel.c
-@@ -37,6 +37,10 @@
- #include <sys/param.h>
- #endif
- 
-+#if defined(AFS_LINUX20_ENV)
-+#include <sys/resource.h>
-+#endif
-+
- #ifdef HAVE_SYS_FS_TYPES_H
- #include <sys/fs_types.h>
- #endif
-diff --git a/src/afsmonitor/afsmon-win.c b/src/afsmonitor/afsmon-win.c
-index f3e2188..550d313 100644
---- a/src/afsmonitor/afsmon-win.c
-+++ b/src/afsmonitor/afsmon-win.c
-@@ -1036,7 +1036,6 @@ create_ovwFrame_objects(void)
-     int hostLines;		/* number of lines of host names to display */
-     struct onode **ovw_fsNames_o_Ptr;	/* index to list of fs names onodes */
-     struct onode **ovw_cmNames_o_Ptr;	/* index to list of cm names onodes */
--    int code;
-     int i;
- 
-     if (afsmon_debug) {
-@@ -1066,8 +1065,8 @@ create_ovwFrame_objects(void)
- 	sprintf(errMsg, "[ %s ] Failed to create initMsg_o onode\n", rn);
- 	afsmon_Exit(250);
-     }
--    code = gtxframe_AddToList(ovwFrame, initMsg_o);
--    code = gator_light_set(initMsg_o, HIGHLIGHT);
-+    gtxframe_AddToList(ovwFrame, initMsg_o);
-+    gator_light_set(initMsg_o, HIGHLIGHT);
-     initMsg_on = 1;
- 
- 
-@@ -1079,8 +1078,8 @@ create_ovwFrame_objects(void)
- 	sprintf(errMsg, "[ %s ] Failed to create command onode\n", rn);
- 	afsmon_Exit(265);
-     }
--    code = gtxframe_AddToList(ovwFrame, ovw_cmd_o);
--    code = gator_light_set(ovw_cmd_o, HIGHLIGHT);
-+    gtxframe_AddToList(ovwFrame, ovw_cmd_o);
-+    gator_light_set(ovw_cmd_o, HIGHLIGHT);
- 
-     /* create the program name object */
- 
-@@ -1089,8 +1088,8 @@ create_ovwFrame_objects(void)
- 	sprintf(errMsg, "[ %s ] Failed to create programName onode\n", rn);
- 	afsmon_Exit(255);
-     }
--    code = gtxframe_AddToList(ovwFrame, ovw_progName_o);
--    code = gator_light_set(ovw_progName_o, HIGHLIGHT);
-+    gtxframe_AddToList(ovwFrame, ovw_progName_o);
-+    gator_light_set(ovw_progName_o, HIGHLIGHT);
- 
-     /* create the page number object */
- 
-@@ -1101,8 +1100,8 @@ create_ovwFrame_objects(void)
- 	sprintf(errMsg, "[ %s ] Failed to create pageNumber onode\n", rn);
- 	afsmon_Exit(260);
-     }
--    code = gtxframe_AddToList(ovwFrame, ovw_pageNum_o);
--    code = gator_light_set(ovw_pageNum_o, HIGHLIGHT);
-+    gtxframe_AddToList(ovwFrame, ovw_pageNum_o);
-+    gator_light_set(ovw_pageNum_o, HIGHLIGHT);
- 
-     /* create the probe number object */
-     ovw_probeNum_o =
-@@ -1112,8 +1111,8 @@ create_ovwFrame_objects(void)
- 	sprintf(errMsg, "[ %s ] Failed to create probe number onode\n", rn);
- 	afsmon_Exit(270);
-     }
--    code = gtxframe_AddToList(ovwFrame, ovw_probeNum_o);
--    code = gator_light_set(ovw_probeNum_o, HIGHLIGHT);
-+    gtxframe_AddToList(ovwFrame, ovw_probeNum_o);
-+    gator_light_set(ovw_probeNum_o, HIGHLIGHT);
- 
-     /* create the numFS monitored object */
-     ovw_numFS_o = initLightObject("", 0, 2, FC_NUMHOSTS_O_WIDTH, afsmon_win);
-@@ -1121,7 +1120,7 @@ create_ovwFrame_objects(void)
- 	sprintf(errMsg, "[ %s ] Failed to create numFS onode\n", rn);
- 	afsmon_Exit(275);
-     }
--    code = gtxframe_AddToList(ovwFrame, ovw_numFS_o);
-+    gtxframe_AddToList(ovwFrame, ovw_numFS_o);
- 
-     /* create the numCM monitored object */
-     ovw_numCM_o =
-@@ -1130,7 +1129,7 @@ create_ovwFrame_objects(void)
- 	sprintf(errMsg, "[ %s ] Failed to create numCM_o onode\n", rn);
- 	afsmon_Exit(280);
-     }
--    code = gtxframe_AddToList(ovwFrame, ovw_numCM_o);
-+    gtxframe_AddToList(ovwFrame, ovw_numCM_o);
- 
-     /* create the number-of-FS-alerts object */
-     ovw_FSalerts_o =
-@@ -1139,7 +1138,7 @@ create_ovwFrame_objects(void)
- 	sprintf(errMsg, "[ %s ] Failed to create FSalerts_o onode\n", rn);
- 	afsmon_Exit(285);
-     }
--    code = gtxframe_AddToList(ovwFrame, ovw_FSalerts_o);
-+    gtxframe_AddToList(ovwFrame, ovw_FSalerts_o);
- 
-     /* create the number-of-CM-alerts object */
-     ovw_CMalerts_o =
-@@ -1148,7 +1147,7 @@ create_ovwFrame_objects(void)
- 	sprintf(errMsg, "[ %s ] Failed to create CMalerts_o onode\n", rn);
- 	afsmon_Exit(290);
-     }
--    code = gtxframe_AddToList(ovwFrame, ovw_CMalerts_o);
-+    gtxframe_AddToList(ovwFrame, ovw_CMalerts_o);
- 
-     /* create file-server-name and cache-manager-names objects */
-     ovw_numHosts_perPage = maxY - OVW_NUM_FIXED_LINES;
-@@ -1180,7 +1179,7 @@ create_ovwFrame_objects(void)
- 	 * fflush(debugFD);
- 	 * }
- 	 */
--	code = gtxframe_AddToList(ovwFrame, *ovw_fsNames_o_Ptr);
-+	gtxframe_AddToList(ovwFrame, *ovw_fsNames_o_Ptr);
- 	ovw_fsNames_o_Ptr++;
- 
-     }
-@@ -1206,7 +1205,7 @@ create_ovwFrame_objects(void)
- 	    sprintf(errMsg, "[ %s ] Failed to create a CM name onode\n", rn);
- 	    afsmon_Exit(310);
- 	}
--	code = gtxframe_AddToList(ovwFrame, *ovw_cmNames_o_Ptr);
-+	gtxframe_AddToList(ovwFrame, *ovw_cmNames_o_Ptr);
- 	ovw_cmNames_o_Ptr++;
-     }
- 
-@@ -2080,7 +2079,6 @@ create_FSframe_objects(void)
-     struct onode **fsLabels_o_Ptr;
-     int x_pos;
-     int y_pos;
--    int code;
-     int i;
-     int j;
-     int numBytes;
-@@ -2100,13 +2098,13 @@ create_FSframe_objects(void)
- 	sprintf(errMsg, "[ %s ] Failed to create fs command onode\n", rn);
- 	afsmon_Exit(340);
-     }
--    code = gtxframe_AddToList(fsFrame, fs_cmd_o);
--    code = gator_light_set(fs_cmd_o, HIGHLIGHT);
-+    gtxframe_AddToList(fsFrame, fs_cmd_o);
-+    gator_light_set(fs_cmd_o, HIGHLIGHT);
- 
-     /* we already have the dimensions for the frame - same as the ovw frame */
-     /* use the ovw program name object for the fs screen too */
- 
--    code = gtxframe_AddToList(fsFrame, ovw_progName_o);
-+    gtxframe_AddToList(fsFrame, ovw_progName_o);
- 
- 
-     /* create the page number object */
-@@ -2118,8 +2116,8 @@ create_FSframe_objects(void)
- 	sprintf(errMsg, "[ %s ] Failed to create pageNumber onode\n", rn);
- 	afsmon_Exit(335);
-     }
--    code = gtxframe_AddToList(fsFrame, fs_pageNum_o);
--    code = gator_light_set(fs_pageNum_o, HIGHLIGHT);
-+    gtxframe_AddToList(fsFrame, fs_pageNum_o);
-+    gator_light_set(fs_pageNum_o, HIGHLIGHT);
- 
-     /* create the probe number object */
-     fs_probeNum_o =
-@@ -2130,8 +2128,8 @@ create_FSframe_objects(void)
- 	sprintf(errMsg, "[ %s ] Failed to create fs probeNum onode\n", rn);
- 	afsmon_Exit(345);
-     }
--    code = gtxframe_AddToList(fsFrame, fs_probeNum_o);
--    code = gator_light_set(fs_probeNum_o, HIGHLIGHT);
-+    gtxframe_AddToList(fsFrame, fs_probeNum_o);
-+    gator_light_set(fs_probeNum_o, HIGHLIGHT);
- 
- 
-     /* create the numFS monitored object */
-@@ -2144,7 +2142,7 @@ create_FSframe_objects(void)
- 		"[ %s ] Failed to create numFS onode for the fs frame\n", rn);
- 	afsmon_Exit(350);
-     }
--    code = gtxframe_AddToList(fsFrame, fs_numFS_o);
-+    gtxframe_AddToList(fsFrame, fs_numFS_o);
- 
-     /* create the "more columns to left" indicator */
-     fs_leftArrows_o =
-@@ -2155,7 +2153,7 @@ create_FSframe_objects(void)
- 		rn);
- 	afsmon_Exit(355);
-     }
--    code = gtxframe_AddToList(fsFrame, fs_leftArrows_o);
-+    gtxframe_AddToList(fsFrame, fs_leftArrows_o);
- 
-     /* create the "more columns to right" indicator */
-     fs_rightArrows_o =
-@@ -2167,7 +2165,7 @@ create_FSframe_objects(void)
- 		rn);
- 	afsmon_Exit(360);
-     }
--    code = gtxframe_AddToList(fsFrame, fs_rightArrows_o);
-+    gtxframe_AddToList(fsFrame, fs_rightArrows_o);
- 
- 
- 
-@@ -2230,7 +2228,7 @@ create_FSframe_objects(void)
- 	    sprintf(errMsg, "[ %s ] Failed to create an FS name onode\n", rn);
- 	    afsmon_Exit(375);
- 	}
--	code = gtxframe_AddToList(fsFrame, fs_lines_Ptr->host_o);
-+	gtxframe_AddToList(fsFrame, fs_lines_Ptr->host_o);
- 
- 	/* if (afsmon_debug) {
- 	 * fprintf(debugFD,"[ %s ] Addr of host_o = %d for line %d\n",
-@@ -2261,7 +2259,7 @@ create_FSframe_objects(void)
- 			    "[ %s ] Failed to create an FS data onode\n", rn);
- 		    afsmon_Exit(380);
- 		}
--		code = gtxframe_AddToList(fsFrame, *fs_data_o_Ptr);
-+		gtxframe_AddToList(fsFrame, *fs_data_o_Ptr);
- 
- 		fs_data_o_Ptr++;
- 	    }			/* for each column */
-@@ -2300,7 +2298,7 @@ create_FSframe_objects(void)
- 			rn);
- 		afsmon_Exit(390);
- 	    }
--	    code = gtxframe_AddToList(fsFrame, *fsLabels_o_Ptr);
-+	    gtxframe_AddToList(fsFrame, *fsLabels_o_Ptr);
- 	    fsLabels_o_Ptr++;
- 	}
- 
-@@ -2861,7 +2859,6 @@ create_CMframe_objects(void)
-     struct onode **cmLabels_o_Ptr;
-     int x_pos;
-     int y_pos;
--    int code;
-     int i;
-     int j;
-     int numBytes;
-@@ -2882,14 +2879,14 @@ create_CMframe_objects(void)
- 	sprintf(errMsg, "[ %s ] Failed to create cm command onode\n", rn);
- 	afsmon_Exit(420);
-     }
--    code = gtxframe_AddToList(cmFrame, cm_cmd_o);
--    code = gator_light_set(cm_cmd_o, HIGHLIGHT);
-+    gtxframe_AddToList(cmFrame, cm_cmd_o);
-+    gator_light_set(cm_cmd_o, HIGHLIGHT);
- 
- 
-     /* we already have the dimensions for the frame - same as the ovw frame */
-     /* use the ovw program name object for the cm screen too */
- 
--    code = gtxframe_AddToList(cmFrame, ovw_progName_o);
-+    gtxframe_AddToList(cmFrame, ovw_progName_o);
- 
- 
-     /* create the page number object */
-@@ -2901,8 +2898,8 @@ create_CMframe_objects(void)
- 	sprintf(errMsg, "[ %s ] Failed to create pageNumber onode\n", rn);
- 	afsmon_Exit(415);
-     }
--    code = gtxframe_AddToList(cmFrame, cm_pageNum_o);
--    code = gator_light_set(cm_pageNum_o, HIGHLIGHT);
-+    gtxframe_AddToList(cmFrame, cm_pageNum_o);
-+    gator_light_set(cm_pageNum_o, HIGHLIGHT);
- 
-     /* create the probe number object */
-     cm_probeNum_o =
-@@ -2913,8 +2910,8 @@ create_CMframe_objects(void)
- 	sprintf(errMsg, "[ %s ] Failed to create cm probeNum onode\n", rn);
- 	afsmon_Exit(425);
-     }
--    code = gtxframe_AddToList(cmFrame, cm_probeNum_o);
--    code = gator_light_set(cm_probeNum_o, HIGHLIGHT);
-+    gtxframe_AddToList(cmFrame, cm_probeNum_o);
-+    gator_light_set(cm_probeNum_o, HIGHLIGHT);
- 
- 
-     /* create the numCM monitored object */
-@@ -2927,7 +2924,7 @@ create_CMframe_objects(void)
- 		"[ %s ] Failed to create numCM onode for the cm frame\n", rn);
- 	afsmon_Exit(430);
-     }
--    code = gtxframe_AddToList(cmFrame, cm_numCM_o);
-+    gtxframe_AddToList(cmFrame, cm_numCM_o);
- 
-     /* create the "more columns to left" indicator */
-     cm_leftArrows_o =
-@@ -2938,7 +2935,7 @@ create_CMframe_objects(void)
- 		rn);
- 	afsmon_Exit(435);
-     }
--    code = gtxframe_AddToList(cmFrame, cm_leftArrows_o);
-+    gtxframe_AddToList(cmFrame, cm_leftArrows_o);
- 
-     /* create the "more columns to right" indicator */
-     cm_rightArrows_o =
-@@ -2950,7 +2947,7 @@ create_CMframe_objects(void)
- 		rn);
- 	afsmon_Exit(440);
-     }
--    code = gtxframe_AddToList(cmFrame, cm_rightArrows_o);
-+    gtxframe_AddToList(cmFrame, cm_rightArrows_o);
- 
- 
- 
-@@ -3013,7 +3010,7 @@ create_CMframe_objects(void)
- 	    sprintf(errMsg, "[ %s ] Failed to create an CM name onode\n", rn);
- 	    afsmon_Exit(455);
- 	}
--	code = gtxframe_AddToList(cmFrame, cm_lines_Ptr->host_o);
-+	gtxframe_AddToList(cmFrame, cm_lines_Ptr->host_o);
- 
- 	/* if (afsmon_debug) {
- 	 * fprintf(debugFD,"[ %s ] Addr of host_o = %d for line %d\n",
-@@ -3044,7 +3041,7 @@ create_CMframe_objects(void)
- 			    "[ %s ] Failed to create an CM data onode\n", rn);
- 		    afsmon_Exit(460);
- 		}
--		code = gtxframe_AddToList(cmFrame, *cm_data_o_Ptr);
-+		gtxframe_AddToList(cmFrame, *cm_data_o_Ptr);
- 
- 		cm_data_o_Ptr++;
- 	    }			/* for each column */
-@@ -3083,7 +3080,7 @@ create_CMframe_objects(void)
- 			rn);
- 		afsmon_Exit(470);
- 	    }
--	    code = gtxframe_AddToList(cmFrame, *cmLabels_o_Ptr);
-+	    gtxframe_AddToList(cmFrame, *cmLabels_o_Ptr);
- 	    cmLabels_o_Ptr++;
- 	}
- 
-diff --git a/src/afsmonitor/afsmonitor.c b/src/afsmonitor/afsmonitor.c
-index b5f1c46..f7992d6 100644
---- a/src/afsmonitor/afsmonitor.c
-+++ b/src/afsmonitor/afsmonitor.c
-@@ -1417,7 +1417,6 @@ process_config_file(char *a_config_filename)
-     char *handlerPtr;		/* ptr to pass theresh handler string */
-     int code = 0;		/* error code */
-     int linenum = 0;		/* config file line number */
--    int threshCount;		/* count of thresholds for each server */
-     int error_in_config;	/* syntax errors in config file  ?? */
-     int i;
-     int numBytes;
-@@ -1453,7 +1452,6 @@ process_config_file(char *a_config_filename)
- 
-     numFS = 0;
-     numCM = 0;
--    threshCount = 0;
-     error_in_config = 0;	/* flag to note if config file has syntax errors */
- 
-     while ((fgets(line, CFG_STR_LEN, configFD)) != NULL) {
-@@ -2044,7 +2042,6 @@ execute_thresh_handler(char *a_handler,		/* ptr to handler function + args */
-     char fileName[256];		/* file name to execute */
-     int i;
-     char *ch;
--    int code;
-     int argNum;
-     int anotherArg;		/* boolean used to flag if another arg is available */
- 
-@@ -2109,7 +2106,7 @@ execute_thresh_handler(char *a_handler,		/* ptr to handler function + args */
- 
-     if (fork() == 0) {
- 	exec_fsThreshHandler = 1;
--	code = afsmon_Exit(60);
-+	afsmon_Exit(60);
-     }
- 
-     return (0);
-diff --git a/src/aklog/aklog.c b/src/aklog/aklog.c
-index 2104bc5..cce3c44 100644
---- a/src/aklog/aklog.c
-+++ b/src/aklog/aklog.c
-@@ -242,12 +242,11 @@ Done:
- #error "Must have either keyblock or session member of krb5_creds"
- #endif
- 
--#ifdef AFS_DARWIN110_ENV
--#define HAVE_NO_KRB5_524 /* MITKerberosShim logs but returns success */
-+/* MITKerberosShim logs but returns success */
-+#if !defined(HAVE_KRB5_524_CONV_PRINCIPAL) || defined(AFS_DARWIN110_ENV) || (!defined(HAVE_KRB5_524_CONVERT_CREDS) && !defined(HAVE_KRB524_CONVERT_CREDS_KDC))
-+#define HAVE_NO_KRB5_524
- #elif !defined(HAVE_KRB5_524_CONVERT_CREDS) && defined(HAVE_KRB524_CONVERT_CREDS_KDC)
- #define krb5_524_convert_creds krb524_convert_creds_kdc
--#elif !defined(HAVE_KRB5_524_CONVERT_CREDS) && !defined(HAVE_KRB524_CONVERT_CREDS_KDC)
--#define HAVE_NO_KRB5_524
- #endif
- 
- #if USING_HEIMDAL
-diff --git a/src/auth/cellconfig.c b/src/auth/cellconfig.c
-index ad95a9b..7b21740 100644
---- a/src/auth/cellconfig.c
-+++ b/src/auth/cellconfig.c
-@@ -989,7 +989,7 @@ afsconf_LookupServer(const char *service, const char *protocol,
- {
-     int code = 0;
-     int len;
--    unsigned char answer[1024];
-+    unsigned char answer[4096];
-     unsigned char *p;
-     char *dotcellname;
-     char *realCellName;
-diff --git a/src/bozo/bnode.c b/src/bozo/bnode.c
-index 6f3e2c3..54ebf92 100644
---- a/src/bozo/bnode.c
-+++ b/src/bozo/bnode.c
-@@ -775,7 +775,7 @@ int
- hdl_notifier(struct bnode_proc *tp)
- {
- #ifndef AFS_NT40_ENV		/* NT notifier callout not yet implemented */
--    int code, pid;
-+    int pid;
-     struct stat tstat;
- 
-     if (stat(tp->bnode->notifier, &tstat)) {
-@@ -786,16 +786,15 @@ hdl_notifier(struct bnode_proc *tp)
-     if ((pid = fork()) == 0) {
- 	FILE *fout;
- 	struct bnode *tb = tp->bnode;
--	int ec;
- 
- #if defined(AFS_HPUX_ENV) || defined(AFS_SUN5_ENV) || defined(AFS_SGI51_ENV)
--	ec = setsid();
-+	setsid();
- #elif defined(AFS_DARWIN90_ENV)
--	ec = setpgid(0, 0);
-+	setpgid(0, 0);
- #elif defined(AFS_LINUX20_ENV) || defined(AFS_AIX_ENV)
--	ec = setpgrp();
-+	setpgrp();
- #else
--	ec = setpgrp(0, 0);
-+	setpgrp(0, 0);
- #endif
- 	fout = popen(tb->notifier, "w");
- 	if (fout == NULL) {
-@@ -804,7 +803,7 @@ hdl_notifier(struct bnode_proc *tp)
- 	    perror(tb->notifier);
- 	    exit(1);
- 	}
--	code = SendNotifierData(fileno(fout), tp);
-+	SendNotifierData(fileno(fout), tp);
- 	pclose(fout);
- 	exit(0);
-     } else if (pid < 0) {
-diff --git a/src/bozo/bnode.p.h b/src/bozo/bnode.p.h
-index 971d272..d4b6da2 100644
---- a/src/bozo/bnode.p.h
-+++ b/src/bozo/bnode.p.h
-@@ -124,9 +124,6 @@ struct bozo_bosEntryStats {
- #ifdef AFS_NT40_ENV
- #define BOSEXIT_RESTART        0xA0
- #define BOSEXIT_DORESTART(code)  (((code) & ~(0xF)) == BOSEXIT_RESTART)
--#define BOSEXIT_NOAUTH_FLAG    0x01
--#define BOSEXIT_LOGGING_FLAG   0x02
--#define BOSEXIT_RXBIND_FLAG    0x04
- #endif
- 
- /* max time to wait for fileserver shutdown */
-diff --git a/src/bozo/bosserver.c b/src/bozo/bosserver.c
-index 632e6ad..562e3b7 100644
---- a/src/bozo/bosserver.c
-+++ b/src/bozo/bosserver.c
-@@ -66,6 +66,10 @@ struct afsconf_dir *bozo_confdir = 0;	/* bozo configuration dir */
- static PROCESS bozo_pid;
- const char *bozo_fileName;
- FILE *bozo_logFile;
-+#ifndef AFS_NT40_ENV
-+static int bozo_argc = 0;
-+static char** bozo_argv = NULL;
-+#endif
- 
- const char *DoCore;
- int DoLogging = 0;
-@@ -112,62 +116,13 @@ int
- bozo_ReBozo(void)
- {
- #ifdef AFS_NT40_ENV
--    /* exit with restart code; SCM integrator process will restart bosserver */
--    int status = BOSEXIT_RESTART;
--
--    /* if noauth flag is set, pass "-noauth" to new bosserver */
--    if (afsconf_GetNoAuthFlag(bozo_confdir)) {
--	status |= BOSEXIT_NOAUTH_FLAG;
--    }
--    /* if logging is on, pass "-log" to new bosserver */
--    if (DoLogging) {
--	status |= BOSEXIT_LOGGING_FLAG;
--    }
--    /* if rxbind is set, pass "-rxbind" to new bosserver */
--    if (rxBind) {
--	status |= BOSEXIT_RXBIND_FLAG;
--    }
--    exit(status);
-+    /* exit with restart code; SCM integrator process will restart bosserver with
-+       the same arguments */
-+    exit(BOSEXIT_RESTART);
- #else
-     /* exec new bosserver process */
--    char *argv[4];
-     int i = 0;
- 
--    argv[i] = (char *)AFSDIR_SERVER_BOSVR_FILEPATH;
--    i++;
--
--    /* if noauth flag is set, pass "-noauth" to new bosserver */
--    if (afsconf_GetNoAuthFlag(bozo_confdir)) {
--	argv[i] = "-noauth";
--	i++;
--    }
--    /* if logging is on, pass "-log" to new bosserver */
--    if (DoLogging) {
--	argv[i] = "-log";
--	i++;
--    }
--    /* if rxbind is set, pass "-rxbind" to new bosserver */
--    if (rxBind) {
--	argv[i] = "-rxbind";
--	i++;
--    }
--#ifndef AFS_NT40_ENV
--    /* if syslog logging is on, pass "-syslog" to new bosserver */
--    if (DoSyslog) {
--	char *arg = (char *)malloc(40);	/* enough for -syslog=# */
--	if (DoSyslogFacility != LOG_DAEMON) {
--	    snprintf(arg, 40, "-syslog=%d", DoSyslogFacility);
--	} else {
--	    strcpy(arg, "-syslog");
--	}
--	argv[i] = arg;
--	i++;
--    }
--#endif
--
--    /* null-terminate argument list */
--    argv[i] = NULL;
--
-     /* close random fd's */
-     for (i = 3; i < 64; i++) {
- 	close(i);
-@@ -175,7 +130,7 @@ bozo_ReBozo(void)
- 
-     unlink(AFSDIR_SERVER_BOZRXBIND_FILEPATH);
- 
--    execv(argv[0], argv);	/* should not return */
-+    execv(bozo_argv[0], bozo_argv);	/* should not return */
-     _exit(1);
- #endif /* AFS_NT40_ENV */
- }
-@@ -923,8 +878,23 @@ main(int argc, char **argv, char **envp)
-     }
- #endif
- 
-+#ifndef AFS_NT40_ENV
-+    /* save args for restart */
-+    bozo_argc = argc;
-+    bozo_argv = malloc((argc+1) * sizeof(char*));
-+    if (!bozo_argv) {
-+	fprintf(stderr, "%s: Failed to allocate argument list.\n", argv[0]);
-+	exit(1);
-+    }
-+    bozo_argv[0] = (char*)AFSDIR_SERVER_BOSVR_FILEPATH; /* expected path */
-+    bozo_argv[bozo_argc] = NULL; /* null terminate list */
-+#endif	/* AFS_NT40_ENV */
-+
-     /* parse cmd line */
-     for (code = 1; code < argc; code++) {
-+#ifndef AFS_NT40_ENV
-+	bozo_argv[code] = argv[code];
-+#endif	/* AFS_NT40_ENV */
- 	if (strcmp(argv[code], "-noauth") == 0) {
- 	    /* set noauth flag */
- 	    noAuth = 1;
-diff --git a/src/bucoord/vol_sets.c b/src/bucoord/vol_sets.c
-index 047cec8..a184511 100644
---- a/src/bucoord/vol_sets.c
-+++ b/src/bucoord/vol_sets.c
-@@ -447,13 +447,11 @@ bc_ParseVolumeSet(void)
- 
-     udbClientTextP ctPtr;
-     FILE *stream;
--    struct bc_config *configPtr;
- 
-     extern struct bc_config *bc_globalConfig;
- 
-     ctPtr = &bc_globalConfig->configText[TB_VOLUMESET];
-     stream = ctPtr->textStream;
--    configPtr = bc_globalConfig;
- 
-     /*
-      * Open up the volume set configuration file, fail if it can't be done.
-@@ -601,13 +599,11 @@ bc_SaveVolumeSet(void)
- 
-     udbClientTextP ctPtr;
-     FILE *stream;
--    struct bc_config *configPtr;
- 
-     extern struct bc_config *bc_globalConfig;
- 
-     ctPtr = &bc_globalConfig->configText[TB_VOLUMESET];
-     stream = ctPtr->textStream;
--    configPtr = bc_globalConfig;
- 
-     /* must be locked */
-     if (ctPtr->lockHandle == 0)
-diff --git a/src/budb/database.h b/src/budb/database.h
-index 6a359a7..fdb3da5 100644
---- a/src/budb/database.h
-+++ b/src/budb/database.h
-@@ -12,6 +12,10 @@
- #include <lock.h>
- #include "budb.h"
- 
-+#if !defined(offsetof)
-+#include <stddef.h>             /* for definition of offsetof() */
-+#endif
-+
- typedef afs_uint32 dbadr;
- 
- struct hashTable {
-@@ -289,7 +293,7 @@ struct memoryDB {		/* in core copies of database structures */
- extern struct memoryDB db;
- 
- #define set_header_word(ut,field,value) \
--    dbwrite ((ut), ((char *)&(db.h.field) - (char *)&db.h), \
-+    dbwrite ((ut), (offsetof(struct dbHeader, field)), \
- 	     ((db.h.field = (value)), (char *)&(db.h.field)), \
- 	     sizeof(afs_int32))
- 
-diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4
-index f5e91b1..fc0149f 100644
---- a/src/cf/linux-test4.m4
-+++ b/src/cf/linux-test4.m4
-@@ -661,3 +661,97 @@ AC_DEFUN([LINUX_IOP_CREATE_TAKES_UMODE_T], [
- 			[define if inode.i_op->create takes a umode_t argument],
- 			[-Werror])
- ])
-+
-+
-+AC_DEFUN([LINUX_EXPORT_OP_ENCODE_FH_TAKES_INODES], [
-+  AC_CHECK_LINUX_BUILD([whether export operation encode_fh takes inode arguments],
-+			[ac_cv_linux_export_op_encode_fh__takes_inodes],
-+			[#include <linux/exportfs.h>],
-+			[struct export_operations _exp_ops;
-+			int _encode_fh(struct inode *i, __u32 *fh, int *len, struct inode *p)
-+				{return 0;};
-+			_exp_ops.encode_fh = _encode_fh;],
-+			[EXPORT_OP_ENCODE_FH_TAKES_INODES],
-+			[define if encode_fh export op takes inode arguments],
-+			[-Werror])
-+])
-+
-+
-+AC_DEFUN([LINUX_KMAP_ATOMIC_TAKES_NO_KM_TYPE], [
-+  AC_CHECK_LINUX_BUILD([whether kmap_atomic takes no km_type argument],
-+			[ac_cv_linux_kma_atomic_takes_no_km_type],
-+			[#include <linux/highmem.h>],
-+			[struct page *p = NULL;
-+			kmap_atomic(p);],
-+			[KMAP_ATOMIC_TAKES_NO_KM_TYPE],
-+			[define if kmap_atomic takes no km_type argument],
-+			[-Werror])
-+])
-+
-+
-+AC_DEFUN([LINUX_DENTRY_OPEN_TAKES_PATH], [
-+  AC_CHECK_LINUX_BUILD([whether dentry_open takes a path argument],
-+			[ac_cv_linux_dentry_open_takes_path],
-+			[#include <linux/fs.h>],
-+			[struct path p;
-+			dentry_open(&p, 0, NULL);],
-+			[DENTRY_OPEN_TAKES_PATH],
-+			[define if dentry_open takes a path argument],
-+			[-Werror])
-+])
-+
-+
-+AC_DEFUN([LINUX_D_ALIAS_IS_HLIST], [
-+  AC_CHECK_LINUX_BUILD([whether dentry->d_alias is an hlist],
-+			[ac_cv_linux_d_alias_is_hlist],
-+			[#include <linux/fs.h>],
-+			[struct dentry *d = NULL;
-+			struct hlist_node *hn = NULL;
-+			d->d_alias = *hn;],
-+			[D_ALIAS_IS_HLIST],
-+			[define if dentry->d_alias is an hlist],
-+			[])
-+])
-+
-+
-+AC_DEFUN([LINUX_IOP_I_CREATE_TAKES_BOOL], [
-+  AC_CHECK_LINUX_BUILD([whether inode_operations.create takes a bool],
-+			[ac_cv_linux_func_i_create_takes_bool],
-+			[#include <linux/fs.h>
-+			#include <linux/namei.h>],
-+			[struct inode _inode = {};
-+			struct dentry _dentry;
-+			bool b = true;
-+			(void)_inode.i_op->create(&_inode, &_dentry, 0, b);],
-+		       [IOP_CREATE_TAKES_BOOL],
-+		       [define if your iops.create takes a bool argument],
-+		       [-Werror])
-+])
-+
-+
-+AC_DEFUN([LINUX_DOP_D_REVALIDATE_TAKES_UNSIGNED], [
-+  AC_CHECK_LINUX_BUILD([whether dentry_operations.d_revalidate takes an unsigned int],
-+			[ac_cv_linux_func_d_revalidate_takes_unsigned],
-+			[#include <linux/fs.h>
-+			#include <linux/namei.h>],
-+			[struct dentry_operations dops;
-+			int reval(struct dentry *d, unsigned int i) { return 0; };
-+			dops.d_revalidate = reval;],
-+		       [DOP_REVALIDATE_TAKES_UNSIGNED],
-+		       [define if your dops.d_revalidate takes an unsigned int argument],
-+		       [-Werror])
-+])
-+
-+
-+AC_DEFUN([LINUX_IOP_LOOKUP_TAKES_UNSIGNED], [
-+  AC_CHECK_LINUX_BUILD([whether inode operation lookup takes an unsigned int],
-+			[ac_cv_linux_func_lookup_takes_unsigned],
-+			[#include <linux/fs.h>
-+			#include <linux/namei.h>],
-+			[struct inode_operations iops;
-+			struct dentry *look(struct inode *i, struct dentry *d, unsigned int j) { return NULL; };
-+			iops.lookup = look;],
-+		       [IOP_LOOKUP_TAKES_UNSIGNED],
-+		       [define if your iops.lookup takes an unsigned int argument],
-+		       [-Werror])
-+])
-diff --git a/src/config/afs_sysnames.h b/src/config/afs_sysnames.h
-index f3d8bdd..96dda28 100644
---- a/src/config/afs_sysnames.h
-+++ b/src/config/afs_sysnames.h
-@@ -202,7 +202,11 @@
- #define SYS_NAME_ID_i386_fbsd_80        2117
- #define SYS_NAME_ID_i386_fbsd_81        2118
- #define SYS_NAME_ID_i386_fbsd_82        2119
-+#define SYS_NAME_ID_i386_fbsd_83        2121
-+#define SYS_NAME_ID_i386_fbsd_84        2123
- #define SYS_NAME_ID_i386_fbsd_90        2120
-+#define SYS_NAME_ID_i386_fbsd_91        2122
-+#define SYS_NAME_ID_i386_fbsd_100      2130
- 
- #define SYS_NAME_ID_ia64_linux2		2200
- #define SYS_NAME_ID_ia64_linux22	2201
-@@ -294,7 +298,11 @@
- #define SYS_NAME_ID_amd64_fbsd_80       3011
- #define SYS_NAME_ID_amd64_fbsd_81       3012
- #define SYS_NAME_ID_amd64_fbsd_82       3013
-+#define SYS_NAME_ID_amd64_fbsd_83       3014
-+#define SYS_NAME_ID_amd64_fbsd_84       3015
- #define SYS_NAME_ID_amd64_fbsd_90       3020
-+#define SYS_NAME_ID_amd64_fbsd_91       3022
-+#define SYS_NAME_ID_amd64_fbsd_100     3030
- 
- #define SYS_NAME_ID_amd64_w2k           3400
- 
-diff --git a/src/config/param.amd64_fbsd_100.h b/src/config/param.amd64_fbsd_100.h
-new file mode 100644
-index 0000000..6fba1b4
---- /dev/null
-+++ b/src/config/param.amd64_fbsd_100.h
-@@ -0,0 +1,215 @@
-+#ifndef	AFS_PARAM_H
-+#define	AFS_PARAM_H
-+
-+/* Machine / Operating system information */
-+#define SYS_NAME	"amd64_fbsd_100"
-+#define SYS_NAME_ID	SYS_NAME_ID_amd64_fbsd_100
-+
-+#define AFSLITTLE_ENDIAN    1
-+#define AFS_HAVE_FFS        1	/* Use system's ffs. */
-+#define AFS_HAVE_STATVFS    1	/* System doesn't support statvfs */
-+#define AFS_VM_RDWR_ENV	    1	/* read/write implemented via VM */
-+
-+
-+#ifndef UKERNEL
-+/* This section for kernel libafs compiles only */
-+
-+#ifndef IGNORE_STDS_H
-+#include <sys/param.h>
-+#endif
-+
-+#define AFS_XBSD_ENV 1		/* {Free,Open,Net}BSD */
-+#define AFS_X86_XBSD_ENV 1
-+
-+#define AFS_NAMEI_ENV     1	/* User space interface to file system */
-+#define AFS_64BIT_ENV 1
-+#define AFS_64BIT_CLIENT 1
-+#define AFS_64BITPOINTER_ENV 1
-+#define AFS_64BITUSERPOINTER_ENV	1
-+#define AFS_64BIT_IOPS_ENV 1	/* Needed for NAMEI */
-+#define AFS_FBSD_ENV 1
-+#define AFS_FBSD50_ENV 1
-+#define AFS_FBSD51_ENV 1
-+#define AFS_FBSD52_ENV 1
-+#define AFS_FBSD53_ENV 1
-+#define AFS_FBSD60_ENV 1
-+#define AFS_FBSD61_ENV 1
-+#define AFS_FBSD62_ENV 1
-+#define AFS_FBSD70_ENV 1
-+#define AFS_FBSD71_ENV 1
-+#define AFS_FBSD80_ENV 1
-+#define AFS_FBSD81_ENV 1
-+#define AFS_FBSD90_ENV 1
-+#define AFS_FBSD91_ENV 1
-+#define AFS_FBSD100_ENV 1
-+#define AFS_X86_FBSD_ENV 1
-+#define AFS_X86_FBSD50_ENV 1
-+#define AFS_X86_FBSD60_ENV 1 /* added at 70--ie, some changes should port <-- */
-+#define AFS_X86_FBSD62_ENV 1
-+#define AFS_X86_FBSD70_ENV 1
-+#define AFS_X86_FBSD71_ENV 1
-+#define AFS_X86_FBSD80_ENV 1
-+#define AFS_X86_FBSD81_ENV 1
-+#define AFS_X86_FBSD90_ENV 1
-+#define AFS_X86_FBSD91_ENV 1
-+#define AFS_X86_FBSD100_ENV 1
-+#define AFS_X86_ENV 1
-+#undef  AFS_NONFSTRANS
-+#define AFS_NONFSTRANS 1
-+#define FTRUNC O_TRUNC
-+
-+#define IUPD 0x0010
-+#define IACC 0x0020
-+#define ICHG 0x0040
-+#define IMOD 0x0080
-+
-+#define IN_LOCK(ip)     lockmgr(&ip->i_lock, LK_EXCLUSIVE, \
-+                                NULL, curproc)
-+#define IN_UNLOCK(ip)   lockmgr(&ip->i_lock, LK_RELEASE, \
-+                                NULL, curproc)
-+
-+#include <afs/afs_sysnames.h>
-+
-+#define AFS_VFS_ENV	1
-+#define AFS_VFSINCL_ENV 1
-+#define AFS_GREEDY43_ENV	1
-+#define AFS_ENV  	1
-+
-+#define AFS_SYSCALL	339
-+#define AFS_MOUNT_AFS	"afs"
-+
-+#ifndef MOUNT_UFS
-+#define MOUNT_UFS "ufs"
-+#endif
-+
-+#ifndef	MOUNT_AFS
-+#define	MOUNT_AFS AFS_MOUNT_AFS
-+#endif
-+
-+#define RXK_LISTENER_ENV 1
-+#define AFS_GCPAGS	        0	/* if nonzero, garbage collect PAGs */
-+#define AFS_USE_GETTIMEOFDAY    1	/* use gettimeofday to implement rx clock */
-+
-+/* Extra kernel definitions (from kdefs file) */
-+#ifdef _KERNEL
-+#define AFS_GLOBAL_SUNLOCK        1
-+#define	AFS_VFS34	1	/* What is VFS34??? */
-+#define	AFS_SHORTGID	0	/* are group id's short? */
-+#define	afsio_iov	uio_iov
-+#define	afsio_iovcnt	uio_iovcnt
-+#define	afsio_offset	uio_offset
-+#define	afsio_seg	uio_segflg
-+#define	afsio_resid	uio_resid
-+#define	AFS_UIOSYS	UIO_SYSSPACE
-+#define	AFS_UIOUSER	UIO_USERSPACE
-+#define	AFS_CLBYTES	CLBYTES
-+#define	osi_GetTime(x)	microtime(x)
-+#define AFS_KALLOC(x)   osi_fbsd_alloc((x), 1)
-+#undef	AFS_KALLOC_NOSLEEP
-+#define	AFS_KALLOC_NOSLEEP(x) osi_fbsd_alloc((x), 0)
-+#define AFS_KFREE(x,y)  osi_fbsd_free((x))
-+#define	v_count		v_usecount
-+#define v_vfsp		v_mount
-+#define vfs_bsize	mnt_stat.f_bsize
-+#define vfs_fsid	mnt_stat.f_fsid
-+#define va_nodeid	va_fileid
-+#define vfs_vnodecovered mnt_vnodecovered
-+#define direct		dirent
-+#define vnode_t		struct vnode
-+
-+#ifndef MUTEX_DEFAULT
-+#define MUTEX_DEFAULT   0
-+#endif /* MUTEX_DEFAULT */
-+
-+#ifndef SSYS
-+#define SSYS            0x00002
-+#endif /* SSYS */
-+
-+#define p_rcred         p_ucred
-+
-+#if	!defined(ASSEMBLER) && !defined(__LANGUAGE_ASSEMBLY__)
-+enum vcexcl { NONEXCL, EXCL };
-+
-+#ifdef KERNEL
-+#ifndef MIN
-+#define MIN(A,B) ((A) < (B) ? (A) : (B))
-+#endif
-+#ifndef MAX
-+#define MAX(A,B) ((A) > (B) ? (A) : (B))
-+#endif
-+#endif /* KERNEL */
-+
-+#endif /* ! ASSEMBLER & ! __LANGUAGE_ASSEMBLY__ */
-+#endif /* _KERNEL */
-+
-+#else /* !defined(UKERNEL) */
-+
-+/* This section for user space compiles only */
-+
-+#define UKERNEL			1	/* user space kernel */
-+#define AFS_ENV			1
-+#define AFS_VFSINCL_ENV         1
-+#define AFS_USR_FBSD50_ENV	1
-+#define AFS_USR_FBSD51_ENV	1
-+#define AFS_USR_FBSD52_ENV	1
-+#define AFS_USR_FBSD53_ENV	1
-+#define AFS_USR_FBSD60_ENV	1
-+#define AFS_USR_FBSD61_ENV	1
-+#define AFS_USR_FBSD70_ENV	1
-+#define AFS_USR_FBSD71_ENV	1
-+#define AFS_USR_FBSD80_ENV	1
-+#define AFS_USR_FBSD81_ENV	1
-+#define AFS_USR_FBSD90_ENV	1
-+#define AFS_USR_FBSD91_ENV	1
-+#define AFS_USR_FBSD100_ENV	1
-+#define AFS_USR_FBSD_ENV	1
-+#undef  AFS_NONFSTRANS
-+#define AFS_NONFSTRANS 1
-+
-+#define AFS_MOUNT_AFS "afs"	/* The name of the filesystem type. */
-+#define AFS_SYSCALL 339
-+#define AFS_NAMEI_ENV         1	/* User space interface to file system */
-+#define AFS_64BIT_ENV         1
-+#define AFS_64BITPOINTER_ENV  1
-+#define AFS_64BIT_IOPS_ENV    1	/* Needed for NAMEI */
-+#define AFS_USERSPACE_IP_ADDR 1
-+#define RXK_LISTENER_ENV      1
-+#define AFS_GCPAGS	      0	/* if nonzero, garbage collect PAGs */
-+
-+#include <afs/afs_sysnames.h>
-+
-+#define	afsio_iov	uio_iov
-+#define	afsio_iovcnt	uio_iovcnt
-+#define	afsio_offset	uio_offset
-+#define	afsio_seg	uio_segflg
-+#define	afsio_fmode	uio_fmode
-+#define	afsio_resid	uio_resid
-+#define	AFS_UIOSYS	1
-+#define	AFS_UIOUSER	UIO_USERSPACE
-+#define	AFS_CLBYTES	MCLBYTES
-+#define	AFS_MINCHANGE	2
-+#define	VATTR_NULL	usr_vattr_null
-+
-+#define AFS_DIRENT
-+#ifndef CMSERVERPREF
-+#define CMSERVERPREF
-+#endif
-+
-+#include <sys/param.h>
-+#include <sys/types.h>
-+#include <sys/mount.h>
-+#include <sys/fcntl.h>
-+#include <sys/uio.h>
-+#include <sys/socket.h>
-+#include <netinet/in.h>
-+#include <limits.h>
-+
-+#endif /* !defined(UKERNEL) */
-+
-+/* general user-space compiles */
-+
-+#if defined(UKERNEL) || !defined(KERNEL)
-+#define STDLIB_HAS_MALLOC_PROTOS 1
-+#endif
-+
-+#endif /* AFS_PARAM_H */
-diff --git a/src/config/param.amd64_fbsd_83.h b/src/config/param.amd64_fbsd_83.h
-new file mode 100644
-index 0000000..f568173
---- /dev/null
-+++ b/src/config/param.amd64_fbsd_83.h
-@@ -0,0 +1,212 @@
-+#ifndef	AFS_PARAM_H
-+#define	AFS_PARAM_H
-+
-+/* Machine / Operating system information */
-+#define SYS_NAME	"amd64_fbsd_83"
-+#define SYS_NAME_ID	SYS_NAME_ID_amd64_fbsd_83
-+
-+#define AFSLITTLE_ENDIAN    1
-+#define AFS_HAVE_FFS        1	/* Use system's ffs. */
-+#define AFS_HAVE_STATVFS    1	/* System doesn't support statvfs */
-+#define AFS_VM_RDWR_ENV	    1	/* read/write implemented via VM */
-+
-+
-+#ifndef UKERNEL
-+/* This section for kernel libafs compiles only */
-+
-+#ifndef IGNORE_STDS_H
-+#include <sys/param.h>
-+#endif
-+
-+#define AFS_XBSD_ENV 1		/* {Free,Open,Net}BSD */
-+#define AFS_X86_XBSD_ENV 1
-+
-+#define AFS_NAMEI_ENV     1	/* User space interface to file system */
-+#define AFS_64BIT_ENV 1
-+#define AFS_64BIT_CLIENT 1
-+#define AFS_64BITPOINTER_ENV 1
-+#define AFS_64BITUSERPOINTER_ENV	1
-+#define AFS_64BIT_IOPS_ENV 1	/* Needed for NAMEI */
-+#define AFS_FBSD_ENV 1
-+#define AFS_FBSD50_ENV 1
-+#define AFS_FBSD51_ENV 1
-+#define AFS_FBSD52_ENV 1
-+#define AFS_FBSD53_ENV 1
-+#define AFS_FBSD60_ENV 1
-+#define AFS_FBSD61_ENV 1
-+#define AFS_FBSD62_ENV 1
-+#define AFS_FBSD70_ENV 1
-+#define AFS_FBSD71_ENV 1
-+#define AFS_FBSD80_ENV 1
-+#define AFS_FBSD81_ENV 1
-+#define AFS_FBSD82_ENV 1
-+#define AFS_FBSD83_ENV 1
-+#define AFS_X86_FBSD_ENV 1
-+#define AFS_X86_FBSD50_ENV 1
-+#define AFS_X86_FBSD60_ENV 1 /* added at 70--ie, some changes should port <-- */
-+#define AFS_X86_FBSD62_ENV 1
-+#define AFS_X86_FBSD70_ENV 1
-+#define AFS_X86_FBSD71_ENV 1
-+#define AFS_X86_FBSD80_ENV 1
-+#define AFS_X86_FBSD81_ENV 1
-+#define AFS_X86_FBSD82_ENV 1
-+#define AFS_X86_FBSD83_ENV 1
-+#define AFS_X86_ENV 1
-+#undef  AFS_NONFSTRANS
-+#define AFS_NONFSTRANS 1
-+#define FTRUNC O_TRUNC
-+
-+#define IUPD 0x0010
-+#define IACC 0x0020
-+#define ICHG 0x0040
-+#define IMOD 0x0080
-+
-+#define IN_LOCK(ip)     lockmgr(&ip->i_lock, LK_EXCLUSIVE, \
-+                                NULL, curproc)
-+#define IN_UNLOCK(ip)   lockmgr(&ip->i_lock, LK_RELEASE, \
-+                                NULL, curproc)
-+
-+#include <afs/afs_sysnames.h>
-+
-+#define AFS_VFS_ENV	1
-+#define AFS_VFSINCL_ENV 1
-+#define AFS_GREEDY43_ENV	1
-+#define AFS_ENV  	1
-+
-+#define AFS_SYSCALL	339
-+#define AFS_MOUNT_AFS	"afs"
-+
-+#ifndef MOUNT_UFS
-+#define MOUNT_UFS "ufs"
-+#endif
-+
-+#ifndef	MOUNT_AFS
-+#define	MOUNT_AFS AFS_MOUNT_AFS
-+#endif
-+
-+#define RXK_LISTENER_ENV 1
-+#define AFS_GCPAGS	        0	/* if nonzero, garbage collect PAGs */
-+#define AFS_USE_GETTIMEOFDAY    1	/* use gettimeofday to implement rx clock */
-+
-+/* Extra kernel definitions (from kdefs file) */
-+#ifdef _KERNEL
-+#define AFS_GLOBAL_SUNLOCK        1
-+#define	AFS_VFS34	1	/* What is VFS34??? */
-+#define	AFS_SHORTGID	0	/* are group id's short? */
-+#define	afsio_iov	uio_iov
-+#define	afsio_iovcnt	uio_iovcnt
-+#define	afsio_offset	uio_offset
-+#define	afsio_seg	uio_segflg
-+#define	afsio_resid	uio_resid
-+#define	AFS_UIOSYS	UIO_SYSSPACE
-+#define	AFS_UIOUSER	UIO_USERSPACE
-+#define	AFS_CLBYTES	CLBYTES
-+#define	osi_GetTime(x)	microtime(x)
-+#define AFS_KALLOC(x)   osi_fbsd_alloc((x), 1)
-+#undef	AFS_KALLOC_NOSLEEP
-+#define	AFS_KALLOC_NOSLEEP(x) osi_fbsd_alloc((x), 0)
-+#define AFS_KFREE(x,y)  osi_fbsd_free((x))
-+#define	v_count		v_usecount
-+#define v_vfsp		v_mount
-+#define vfs_bsize	mnt_stat.f_bsize
-+#define vfs_fsid	mnt_stat.f_fsid
-+#define va_nodeid	va_fileid
-+#define vfs_vnodecovered mnt_vnodecovered
-+#define direct		dirent
-+#define vnode_t		struct vnode
-+
-+#ifndef MUTEX_DEFAULT
-+#define MUTEX_DEFAULT   0
-+#endif /* MUTEX_DEFAULT */
-+
-+#ifndef SSYS
-+#define SSYS            0x00002
-+#endif /* SSYS */
-+
-+#define p_rcred         p_ucred
-+
-+#if	!defined(ASSEMBLER) && !defined(__LANGUAGE_ASSEMBLY__)
-+enum vcexcl { NONEXCL, EXCL };
-+
-+#ifdef KERNEL
-+#ifndef MIN
-+#define MIN(A,B) ((A) < (B) ? (A) : (B))
-+#endif
-+#ifndef MAX
-+#define MAX(A,B) ((A) > (B) ? (A) : (B))
-+#endif
-+#endif /* KERNEL */
-+
-+#endif /* ! ASSEMBLER & ! __LANGUAGE_ASSEMBLY__ */
-+#endif /* _KERNEL */
-+
-+#else /* !defined(UKERNEL) */
-+
-+/* This section for user space compiles only */
-+
-+#define UKERNEL			1	/* user space kernel */
-+#define AFS_ENV			1
-+#define AFS_VFSINCL_ENV         1
-+#define AFS_USR_FBSD50_ENV	1
-+#define AFS_USR_FBSD51_ENV	1
-+#define AFS_USR_FBSD52_ENV	1
-+#define AFS_USR_FBSD53_ENV	1
-+#define AFS_USR_FBSD60_ENV	1
-+#define AFS_USR_FBSD61_ENV	1
-+#define AFS_USR_FBSD70_ENV	1
-+#define AFS_USR_FBSD71_ENV	1
-+#define AFS_USR_FBSD80_ENV	1
-+#define AFS_USR_FBSD81_ENV	1
-+#define AFS_USR_FBSD82_ENV	1
-+#define AFS_USR_FBSD83_ENV	1
-+#define AFS_USR_FBSD_ENV	1
-+#undef  AFS_NONFSTRANS
-+#define AFS_NONFSTRANS 1
-+
-+#define AFS_MOUNT_AFS "afs"	/* The name of the filesystem type. */
-+#define AFS_SYSCALL 339
-+#define AFS_NAMEI_ENV         1	/* User space interface to file system */
-+#define AFS_64BIT_ENV         1
-+#define AFS_64BITPOINTER_ENV  1
-+#define AFS_64BIT_IOPS_ENV    1	/* Needed for NAMEI */
-+#define AFS_USERSPACE_IP_ADDR 1
-+#define RXK_LISTENER_ENV      1
-+#define AFS_GCPAGS	      0	/* if nonzero, garbage collect PAGs */
-+
-+#include <afs/afs_sysnames.h>
-+
-+#define	afsio_iov	uio_iov
-+#define	afsio_iovcnt	uio_iovcnt
-+#define	afsio_offset	uio_offset
-+#define	afsio_seg	uio_segflg
-+#define	afsio_fmode	uio_fmode
-+#define	afsio_resid	uio_resid
-+#define	AFS_UIOSYS	1
-+#define	AFS_UIOUSER	UIO_USERSPACE
-+#define	AFS_CLBYTES	MCLBYTES
-+#define	AFS_MINCHANGE	2
-+#define	VATTR_NULL	usr_vattr_null
-+
-+#define AFS_DIRENT
-+#ifndef CMSERVERPREF
-+#define CMSERVERPREF
-+#endif
-+
-+#include <sys/param.h>
-+#include <sys/types.h>
-+#include <sys/mount.h>
-+#include <sys/fcntl.h>
-+#include <sys/uio.h>
-+#include <sys/socket.h>
-+#include <netinet/in.h>
-+#include <limits.h>
-+
-+#endif /* !defined(UKERNEL) */
-+
-+/* general user-space compiles */
-+
-+#if defined(UKERNEL) || !defined(KERNEL)
-+#define STDLIB_HAS_MALLOC_PROTOS 1
-+#endif
-+
-+#endif /* AFS_PARAM_H */
-diff --git a/src/config/param.amd64_fbsd_84.h b/src/config/param.amd64_fbsd_84.h
-new file mode 100644
-index 0000000..4a99dbe
---- /dev/null
-+++ b/src/config/param.amd64_fbsd_84.h
-@@ -0,0 +1,215 @@
-+#ifndef	AFS_PARAM_H
-+#define	AFS_PARAM_H
-+
-+/* Machine / Operating system information */
-+#define SYS_NAME	"amd64_fbsd_84"
-+#define SYS_NAME_ID	SYS_NAME_ID_amd64_fbsd_84
-+
-+#define AFSLITTLE_ENDIAN    1
-+#define AFS_HAVE_FFS        1	/* Use system's ffs. */
-+#define AFS_HAVE_STATVFS    1	/* System doesn't support statvfs */
-+#define AFS_VM_RDWR_ENV	    1	/* read/write implemented via VM */
-+
-+
-+#ifndef UKERNEL
-+/* This section for kernel libafs compiles only */
-+
-+#ifndef IGNORE_STDS_H
-+#include <sys/param.h>
-+#endif
-+
-+#define AFS_XBSD_ENV 1		/* {Free,Open,Net}BSD */
-+#define AFS_X86_XBSD_ENV 1
-+
-+#define AFS_NAMEI_ENV     1	/* User space interface to file system */
-+#define AFS_64BIT_ENV 1
-+#define AFS_64BIT_CLIENT 1
-+#define AFS_64BITPOINTER_ENV 1
-+#define AFS_64BITUSERPOINTER_ENV	1
-+#define AFS_64BIT_IOPS_ENV 1	/* Needed for NAMEI */
-+#define AFS_FBSD_ENV 1
-+#define AFS_FBSD50_ENV 1
-+#define AFS_FBSD51_ENV 1
-+#define AFS_FBSD52_ENV 1
-+#define AFS_FBSD53_ENV 1
-+#define AFS_FBSD60_ENV 1
-+#define AFS_FBSD61_ENV 1
-+#define AFS_FBSD62_ENV 1
-+#define AFS_FBSD70_ENV 1
-+#define AFS_FBSD71_ENV 1
-+#define AFS_FBSD80_ENV 1
-+#define AFS_FBSD81_ENV 1
-+#define AFS_FBSD82_ENV 1
-+#define AFS_FBSD83_ENV 1
-+#define AFS_FBSD84_ENV 1
-+#define AFS_X86_FBSD_ENV 1
-+#define AFS_X86_FBSD50_ENV 1
-+#define AFS_X86_FBSD60_ENV 1 /* added at 70--ie, some changes should port <-- */
-+#define AFS_X86_FBSD62_ENV 1
-+#define AFS_X86_FBSD70_ENV 1
-+#define AFS_X86_FBSD71_ENV 1
-+#define AFS_X86_FBSD80_ENV 1
-+#define AFS_X86_FBSD81_ENV 1
-+#define AFS_X86_FBSD82_ENV 1
-+#define AFS_X86_FBSD83_ENV 1
-+#define AFS_X86_FBSD84_ENV 1
-+#define AFS_X86_ENV 1
-+#undef  AFS_NONFSTRANS
-+#define AFS_NONFSTRANS 1
-+#define FTRUNC O_TRUNC
-+
-+#define IUPD 0x0010
-+#define IACC 0x0020
-+#define ICHG 0x0040
-+#define IMOD 0x0080
-+
-+#define IN_LOCK(ip)     lockmgr(&ip->i_lock, LK_EXCLUSIVE, \
-+                                NULL, curproc)
-+#define IN_UNLOCK(ip)   lockmgr(&ip->i_lock, LK_RELEASE, \
-+                                NULL, curproc)
-+
-+#include <afs/afs_sysnames.h>
-+
-+#define AFS_VFS_ENV	1
-+#define AFS_VFSINCL_ENV 1
-+#define AFS_GREEDY43_ENV	1
-+#define AFS_ENV  	1
-+
-+#define AFS_SYSCALL	339
-+#define AFS_MOUNT_AFS	"afs"
-+
-+#ifndef MOUNT_UFS
-+#define MOUNT_UFS "ufs"
-+#endif
-+
-+#ifndef	MOUNT_AFS
-+#define	MOUNT_AFS AFS_MOUNT_AFS
-+#endif
-+
-+#define RXK_LISTENER_ENV 1
-+#define AFS_GCPAGS	        0	/* if nonzero, garbage collect PAGs */
-+#define AFS_USE_GETTIMEOFDAY    1	/* use gettimeofday to implement rx clock */
-+
-+/* Extra kernel definitions (from kdefs file) */
-+#ifdef _KERNEL
-+#define AFS_GLOBAL_SUNLOCK        1
-+#define	AFS_VFS34	1	/* What is VFS34??? */
-+#define	AFS_SHORTGID	0	/* are group id's short? */
-+#define	afsio_iov	uio_iov
-+#define	afsio_iovcnt	uio_iovcnt
-+#define	afsio_offset	uio_offset
-+#define	afsio_seg	uio_segflg
-+#define	afsio_resid	uio_resid
-+#define	AFS_UIOSYS	UIO_SYSSPACE
-+#define	AFS_UIOUSER	UIO_USERSPACE
-+#define	AFS_CLBYTES	CLBYTES
-+#define	osi_GetTime(x)	microtime(x)
-+#define AFS_KALLOC(x)   osi_fbsd_alloc((x), 1)
-+#undef	AFS_KALLOC_NOSLEEP
-+#define	AFS_KALLOC_NOSLEEP(x) osi_fbsd_alloc((x), 0)
-+#define AFS_KFREE(x,y)  osi_fbsd_free((x))
-+#define	v_count		v_usecount
-+#define v_vfsp		v_mount
-+#define vfs_bsize	mnt_stat.f_bsize
-+#define vfs_fsid	mnt_stat.f_fsid
-+#define va_nodeid	va_fileid
-+#define vfs_vnodecovered mnt_vnodecovered
-+#define direct		dirent
-+#define vnode_t		struct vnode
-+
-+#ifndef MUTEX_DEFAULT
-+#define MUTEX_DEFAULT   0
-+#endif /* MUTEX_DEFAULT */
-+
-+#ifndef SSYS
-+#define SSYS            0x00002
-+#endif /* SSYS */
-+
-+#define p_rcred         p_ucred
-+
-+#if	!defined(ASSEMBLER) && !defined(__LANGUAGE_ASSEMBLY__)
-+enum vcexcl { NONEXCL, EXCL };
-+
-+#ifdef KERNEL
-+#ifndef MIN
-+#define MIN(A,B) ((A) < (B) ? (A) : (B))
-+#endif
-+#ifndef MAX
-+#define MAX(A,B) ((A) > (B) ? (A) : (B))
-+#endif
-+#endif /* KERNEL */
-+
-+#endif /* ! ASSEMBLER & ! __LANGUAGE_ASSEMBLY__ */
-+#endif /* _KERNEL */
-+
-+#else /* !defined(UKERNEL) */
-+
-+/* This section for user space compiles only */
-+
-+#define UKERNEL			1	/* user space kernel */
-+#define AFS_ENV			1
-+#define AFS_VFSINCL_ENV         1
-+#define AFS_USR_FBSD50_ENV	1
-+#define AFS_USR_FBSD51_ENV	1
-+#define AFS_USR_FBSD52_ENV	1
-+#define AFS_USR_FBSD53_ENV	1
-+#define AFS_USR_FBSD60_ENV	1
-+#define AFS_USR_FBSD61_ENV	1
-+#define AFS_USR_FBSD70_ENV	1
-+#define AFS_USR_FBSD71_ENV	1
-+#define AFS_USR_FBSD80_ENV	1
-+#define AFS_USR_FBSD81_ENV	1
-+#define AFS_USR_FBSD82_ENV	1
-+#define AFS_USR_FBSD83_ENV	1
-+#define AFS_USR_FBSD84_ENV	1
-+#define AFS_USR_FBSD_ENV	1
-+#undef  AFS_NONFSTRANS
-+#define AFS_NONFSTRANS 1
-+
-+#define AFS_MOUNT_AFS "afs"	/* The name of the filesystem type. */
-+#define AFS_SYSCALL 339
-+#define AFS_NAMEI_ENV         1	/* User space interface to file system */
-+#define AFS_64BIT_ENV         1
-+#define AFS_64BITPOINTER_ENV  1
-+#define AFS_64BIT_IOPS_ENV    1	/* Needed for NAMEI */
-+#define AFS_USERSPACE_IP_ADDR 1
-+#define RXK_LISTENER_ENV      1
-+#define AFS_GCPAGS	      0	/* if nonzero, garbage collect PAGs */
-+
-+#include <afs/afs_sysnames.h>
-+
-+#define	afsio_iov	uio_iov
-+#define	afsio_iovcnt	uio_iovcnt
-+#define	afsio_offset	uio_offset
-+#define	afsio_seg	uio_segflg
-+#define	afsio_fmode	uio_fmode
-+#define	afsio_resid	uio_resid
-+#define	AFS_UIOSYS	1
-+#define	AFS_UIOUSER	UIO_USERSPACE
-+#define	AFS_CLBYTES	MCLBYTES
-+#define	AFS_MINCHANGE	2
-+#define	VATTR_NULL	usr_vattr_null
-+
-+#define AFS_DIRENT
-+#ifndef CMSERVERPREF
-+#define CMSERVERPREF
-+#endif
-+
-+#include <sys/param.h>
-+#include <sys/types.h>
-+#include <sys/mount.h>
-+#include <sys/fcntl.h>
-+#include <sys/uio.h>
-+#include <sys/socket.h>
-+#include <netinet/in.h>
-+#include <limits.h>
-+
-+#endif /* !defined(UKERNEL) */
-+
-+/* general user-space compiles */
-+
-+#if defined(UKERNEL) || !defined(KERNEL)
-+#define STDLIB_HAS_MALLOC_PROTOS 1
-+#endif
-+
-+#endif /* AFS_PARAM_H */
-diff --git a/src/config/param.amd64_fbsd_91.h b/src/config/param.amd64_fbsd_91.h
-new file mode 100644
-index 0000000..3f329b4
---- /dev/null
-+++ b/src/config/param.amd64_fbsd_91.h
-@@ -0,0 +1,212 @@
-+#ifndef	AFS_PARAM_H
-+#define	AFS_PARAM_H
-+
-+/* Machine / Operating system information */
-+#define SYS_NAME	"amd64_fbsd_91"
-+#define SYS_NAME_ID	SYS_NAME_ID_amd64_fbsd_91
-+
-+#define AFSLITTLE_ENDIAN    1
-+#define AFS_HAVE_FFS        1	/* Use system's ffs. */
-+#define AFS_HAVE_STATVFS    1	/* System doesn't support statvfs */
-+#define AFS_VM_RDWR_ENV	    1	/* read/write implemented via VM */
-+
-+
-+#ifndef UKERNEL
-+/* This section for kernel libafs compiles only */
-+
-+#ifndef IGNORE_STDS_H
-+#include <sys/param.h>
-+#endif
-+
-+#define AFS_XBSD_ENV 1		/* {Free,Open,Net}BSD */
-+#define AFS_X86_XBSD_ENV 1
-+
-+#define AFS_NAMEI_ENV     1	/* User space interface to file system */
-+#define AFS_64BIT_ENV 1
-+#define AFS_64BIT_CLIENT 1
-+#define AFS_64BITPOINTER_ENV 1
-+#define AFS_64BITUSERPOINTER_ENV	1
-+#define AFS_64BIT_IOPS_ENV 1	/* Needed for NAMEI */
-+#define AFS_FBSD_ENV 1
-+#define AFS_FBSD50_ENV 1
-+#define AFS_FBSD51_ENV 1
-+#define AFS_FBSD52_ENV 1
-+#define AFS_FBSD53_ENV 1
-+#define AFS_FBSD60_ENV 1
-+#define AFS_FBSD61_ENV 1
-+#define AFS_FBSD62_ENV 1
-+#define AFS_FBSD70_ENV 1
-+#define AFS_FBSD71_ENV 1
-+#define AFS_FBSD80_ENV 1
-+#define AFS_FBSD81_ENV 1
-+#define AFS_FBSD90_ENV 1
-+#define AFS_FBSD91_ENV 1
-+#define AFS_X86_FBSD_ENV 1
-+#define AFS_X86_FBSD50_ENV 1
-+#define AFS_X86_FBSD60_ENV 1 /* added at 70--ie, some changes should port <-- */
-+#define AFS_X86_FBSD62_ENV 1
-+#define AFS_X86_FBSD70_ENV 1
-+#define AFS_X86_FBSD71_ENV 1
-+#define AFS_X86_FBSD80_ENV 1
-+#define AFS_X86_FBSD81_ENV 1
-+#define AFS_X86_FBSD90_ENV 1
-+#define AFS_X86_FBSD91_ENV 1
-+#define AFS_X86_ENV 1
-+#undef  AFS_NONFSTRANS
-+#define AFS_NONFSTRANS 1
-+#define FTRUNC O_TRUNC
-+
-+#define IUPD 0x0010
-+#define IACC 0x0020
-+#define ICHG 0x0040
-+#define IMOD 0x0080
-+
-+#define IN_LOCK(ip)     lockmgr(&ip->i_lock, LK_EXCLUSIVE, \
-+                                NULL, curproc)
-+#define IN_UNLOCK(ip)   lockmgr(&ip->i_lock, LK_RELEASE, \
-+                                NULL, curproc)
-+
-+#include <afs/afs_sysnames.h>
-+
-+#define AFS_VFS_ENV	1
-+#define AFS_VFSINCL_ENV 1
-+#define AFS_GREEDY43_ENV	1
-+#define AFS_ENV  	1
-+
-+#define AFS_SYSCALL	339
-+#define AFS_MOUNT_AFS	"afs"
-+
-+#ifndef MOUNT_UFS
-+#define MOUNT_UFS "ufs"
-+#endif
-+
-+#ifndef	MOUNT_AFS
-+#define	MOUNT_AFS AFS_MOUNT_AFS
-+#endif
-+
-+#define RXK_LISTENER_ENV 1
-+#define AFS_GCPAGS	        0	/* if nonzero, garbage collect PAGs */
-+#define AFS_USE_GETTIMEOFDAY    1	/* use gettimeofday to implement rx clock */
-+
-+/* Extra kernel definitions (from kdefs file) */
-+#ifdef _KERNEL
-+#define AFS_GLOBAL_SUNLOCK        1
-+#define	AFS_VFS34	1	/* What is VFS34??? */
-+#define	AFS_SHORTGID	0	/* are group id's short? */
-+#define	afsio_iov	uio_iov
-+#define	afsio_iovcnt	uio_iovcnt
-+#define	afsio_offset	uio_offset
-+#define	afsio_seg	uio_segflg
-+#define	afsio_resid	uio_resid
-+#define	AFS_UIOSYS	UIO_SYSSPACE
-+#define	AFS_UIOUSER	UIO_USERSPACE
-+#define	AFS_CLBYTES	CLBYTES
-+#define	osi_GetTime(x)	microtime(x)
-+#define AFS_KALLOC(x)   osi_fbsd_alloc((x), 1)
-+#undef	AFS_KALLOC_NOSLEEP
-+#define	AFS_KALLOC_NOSLEEP(x) osi_fbsd_alloc((x), 0)
-+#define AFS_KFREE(x,y)  osi_fbsd_free((x))
-+#define	v_count		v_usecount
-+#define v_vfsp		v_mount
-+#define vfs_bsize	mnt_stat.f_bsize
-+#define vfs_fsid	mnt_stat.f_fsid
-+#define va_nodeid	va_fileid
-+#define vfs_vnodecovered mnt_vnodecovered
-+#define direct		dirent
-+#define vnode_t		struct vnode
-+
-+#ifndef MUTEX_DEFAULT
-+#define MUTEX_DEFAULT   0
-+#endif /* MUTEX_DEFAULT */
-+
-+#ifndef SSYS
-+#define SSYS            0x00002
-+#endif /* SSYS */
-+
-+#define p_rcred         p_ucred
-+
-+#if	!defined(ASSEMBLER) && !defined(__LANGUAGE_ASSEMBLY__)
-+enum vcexcl { NONEXCL, EXCL };
-+
-+#ifdef KERNEL
-+#ifndef MIN
-+#define MIN(A,B) ((A) < (B) ? (A) : (B))
-+#endif
-+#ifndef MAX
-+#define MAX(A,B) ((A) > (B) ? (A) : (B))
-+#endif
-+#endif /* KERNEL */
-+
-+#endif /* ! ASSEMBLER & ! __LANGUAGE_ASSEMBLY__ */
-+#endif /* _KERNEL */
-+
-+#else /* !defined(UKERNEL) */
-+
-+/* This section for user space compiles only */
-+
-+#define UKERNEL			1	/* user space kernel */
-+#define AFS_ENV			1
-+#define AFS_VFSINCL_ENV         1
-+#define AFS_USR_FBSD50_ENV	1
-+#define AFS_USR_FBSD51_ENV	1
-+#define AFS_USR_FBSD52_ENV	1
-+#define AFS_USR_FBSD53_ENV	1
-+#define AFS_USR_FBSD60_ENV	1
-+#define AFS_USR_FBSD61_ENV	1
-+#define AFS_USR_FBSD70_ENV	1
-+#define AFS_USR_FBSD71_ENV	1
-+#define AFS_USR_FBSD80_ENV	1
-+#define AFS_USR_FBSD81_ENV	1
-+#define AFS_USR_FBSD90_ENV	1
-+#define AFS_USR_FBSD91_ENV	1
-+#define AFS_USR_FBSD_ENV	1
-+#undef  AFS_NONFSTRANS
-+#define AFS_NONFSTRANS 1
-+
-+#define AFS_MOUNT_AFS "afs"	/* The name of the filesystem type. */
-+#define AFS_SYSCALL 339
-+#define AFS_NAMEI_ENV         1	/* User space interface to file system */
-+#define AFS_64BIT_ENV         1
-+#define AFS_64BITPOINTER_ENV  1
-+#define AFS_64BIT_IOPS_ENV    1	/* Needed for NAMEI */
-+#define AFS_USERSPACE_IP_ADDR 1
-+#define RXK_LISTENER_ENV      1
-+#define AFS_GCPAGS	      0	/* if nonzero, garbage collect PAGs */
-+
-+#include <afs/afs_sysnames.h>
-+
-+#define	afsio_iov	uio_iov
-+#define	afsio_iovcnt	uio_iovcnt
-+#define	afsio_offset	uio_offset
-+#define	afsio_seg	uio_segflg
-+#define	afsio_fmode	uio_fmode
-+#define	afsio_resid	uio_resid
-+#define	AFS_UIOSYS	1
-+#define	AFS_UIOUSER	UIO_USERSPACE
-+#define	AFS_CLBYTES	MCLBYTES
-+#define	AFS_MINCHANGE	2
-+#define	VATTR_NULL	usr_vattr_null
-+
-+#define AFS_DIRENT
-+#ifndef CMSERVERPREF
-+#define CMSERVERPREF
-+#endif
-+
-+#include <sys/param.h>
-+#include <sys/types.h>
-+#include <sys/mount.h>
-+#include <sys/fcntl.h>
-+#include <sys/uio.h>
-+#include <sys/socket.h>
-+#include <netinet/in.h>
-+#include <limits.h>
-+
-+#endif /* !defined(UKERNEL) */
-+
-+/* general user-space compiles */
-+
-+#if defined(UKERNEL) || !defined(KERNEL)
-+#define STDLIB_HAS_MALLOC_PROTOS 1
-+#endif
-+
-+#endif /* AFS_PARAM_H */
-diff --git a/src/config/param.i386_fbsd_100.h b/src/config/param.i386_fbsd_100.h
-new file mode 100644
-index 0000000..3e33b57
---- /dev/null
-+++ b/src/config/param.i386_fbsd_100.h
-@@ -0,0 +1,213 @@
-+#ifndef	AFS_PARAM_H
-+#define	AFS_PARAM_H
-+
-+/* Machine / Operating system information */
-+#define SYS_NAME	"i386_fbsd_100"
-+#define SYS_NAME_ID	SYS_NAME_ID_i386_fbsd_100
-+
-+#define AFSLITTLE_ENDIAN    1
-+#define AFS_HAVE_FFS        1	/* Use system's ffs. */
-+#define AFS_HAVE_STATVFS    1	/* System doesn't support statvfs */
-+#define AFS_VM_RDWR_ENV	    1	/* read/write implemented via VM */
-+#define AFS_FAKEOPEN_ENV    1   /* call afs_FakeOpen as if !AFS_VM_RDWR */
-+
-+
-+#ifndef UKERNEL
-+/* This section for kernel libafs compiles only */
-+
-+#ifndef IGNORE_STDS_H
-+#include <sys/param.h>
-+#endif
-+
-+#define AFS_XBSD_ENV 1		/* {Free,Open,Net}BSD */
-+#define AFS_X86_XBSD_ENV 1
-+
-+#define AFS_NAMEI_ENV     1	/* User space interface to file system */
-+#define AFS_64BIT_ENV 1
-+#define AFS_64BIT_CLIENT 1
-+#define AFS_64BIT_IOPS_ENV 1	/* Needed for NAMEI */
-+#define AFS_FBSD_ENV 1
-+#define AFS_FBSD50_ENV 1
-+#define AFS_FBSD51_ENV 1
-+#define AFS_FBSD52_ENV 1
-+#define AFS_FBSD53_ENV 1
-+#define AFS_FBSD60_ENV 1
-+#define AFS_FBSD61_ENV 1
-+#define AFS_FBSD62_ENV 1
-+#define AFS_FBSD70_ENV 1
-+#define AFS_FBSD71_ENV 1
-+#define AFS_FBSD80_ENV 1
-+#define AFS_FBSD81_ENV 1
-+#define AFS_FBSD90_ENV 1
-+#define AFS_FBSD91_ENV 1
-+#define AFS_FBSD100_ENV 1
-+#define AFS_X86_FBSD_ENV 1
-+#define AFS_X86_FBSD50_ENV 1
-+#define AFS_X86_FBSD60_ENV 1 /* added at 70--ie, some changes should port <-- */
-+#define AFS_X86_FBSD62_ENV 1
-+#define AFS_X86_FBSD70_ENV 1
-+#define AFS_X86_FBSD71_ENV 1
-+#define AFS_X86_FBSD80_ENV 1
-+#define AFS_X86_FBSD81_ENV 1
-+#define AFS_X86_FBSD90_ENV 1
-+#define AFS_X86_FBSD91_ENV 1
-+#define AFS_X86_FBSD100_ENV 1
-+#define AFS_X86_ENV 1
-+#undef  AFS_NONFSTRANS
-+#define AFS_NONFSTRANS 1
-+#define FTRUNC O_TRUNC
-+
-+#define IUPD 0x0010
-+#define IACC 0x0020
-+#define ICHG 0x0040
-+#define IMOD 0x0080
-+
-+#define IN_LOCK(ip)     lockmgr(&ip->i_lock, LK_EXCLUSIVE, \
-+                                NULL, curproc)
-+#define IN_UNLOCK(ip)   lockmgr(&ip->i_lock, LK_RELEASE, \
-+                                NULL, curproc)
-+
-+#include <afs/afs_sysnames.h>
-+
-+#define AFS_VFS_ENV	1
-+#define AFS_VFSINCL_ENV 1
-+#define AFS_GREEDY43_ENV	1
-+#define AFS_ENV  	1
-+
-+#define AFS_SYSCALL	339
-+#define AFS_MOUNT_AFS	"afs"
-+
-+#ifndef MOUNT_UFS
-+#define MOUNT_UFS "ufs"
-+#endif
-+
-+#ifndef	MOUNT_AFS
-+#define	MOUNT_AFS AFS_MOUNT_AFS
-+#endif
-+
-+#define RXK_LISTENER_ENV 1
-+#define AFS_GCPAGS	        0	/* if nonzero, garbage collect PAGs */
-+#define AFS_USE_GETTIMEOFDAY    1	/* use gettimeofday to implement rx clock */
-+
-+/* Extra kernel definitions (from kdefs file) */
-+#ifdef _KERNEL
-+#define AFS_GLOBAL_SUNLOCK        1
-+#define	AFS_VFS34	1	/* What is VFS34??? */
-+#define	AFS_SHORTGID	0	/* are group id's short? */
-+#define	afsio_iov	uio_iov
-+#define	afsio_iovcnt	uio_iovcnt
-+#define	afsio_offset	uio_offset
-+#define	afsio_seg	uio_segflg
-+#define	afsio_resid	uio_resid
-+#define	AFS_UIOSYS	UIO_SYSSPACE
-+#define	AFS_UIOUSER	UIO_USERSPACE
-+#define	AFS_CLBYTES	CLBYTES
-+#define	osi_GetTime(x)	microtime(x)
-+#define AFS_KALLOC(x)   osi_fbsd_alloc((x), 1)
-+#undef	AFS_KALLOC_NOSLEEP
-+#define	AFS_KALLOC_NOSLEEP(x) osi_fbsd_alloc((x), 0)
-+#define AFS_KFREE(x,y)  osi_fbsd_free((x))
-+#define	v_count		v_usecount
-+#define v_vfsp		v_mount
-+#define vfs_bsize	mnt_stat.f_bsize
-+#define vfs_fsid	mnt_stat.f_fsid
-+#define va_nodeid	va_fileid
-+#define vfs_vnodecovered mnt_vnodecovered
-+#define direct		dirent
-+#define vnode_t		struct vnode
-+
-+#ifndef MUTEX_DEFAULT
-+#define MUTEX_DEFAULT   0
-+#endif /* MUTEX_DEFAULT */
-+
-+#ifndef SSYS
-+#define SSYS            0x00002
-+#endif /* SSYS */
-+
-+#define p_rcred         p_ucred
-+
-+#if	!defined(ASSEMBLER) && !defined(__LANGUAGE_ASSEMBLY__)
-+enum vcexcl { NONEXCL, EXCL };
-+
-+#ifdef KERNEL
-+#ifndef MIN
-+#define MIN(A,B) ((A) < (B) ? (A) : (B))
-+#endif
-+#ifndef MAX
-+#define MAX(A,B) ((A) > (B) ? (A) : (B))
-+#endif
-+#endif /* KERNEL */
-+
-+#endif /* ! ASSEMBLER & ! __LANGUAGE_ASSEMBLY__ */
-+#endif /* _KERNEL */
-+
-+#else /* !defined(UKERNEL) */
-+
-+/* This section for user space compiles only */
-+
-+#define UKERNEL			1	/* user space kernel */
-+#define AFS_ENV			1
-+#define AFS_VFSINCL_ENV         1
-+#define AFS_USR_FBSD50_ENV	1
-+#define AFS_USR_FBSD51_ENV	1
-+#define AFS_USR_FBSD52_ENV	1
-+#define AFS_USR_FBSD53_ENV	1
-+#define AFS_USR_FBSD60_ENV	1
-+#define AFS_USR_FBSD61_ENV	1
-+#define AFS_USR_FBSD70_ENV	1
-+#define AFS_USR_FBSD71_ENV	1
-+#define AFS_USR_FBSD80_ENV	1
-+#define AFS_USR_FBSD81_ENV	1
-+#define AFS_USR_FBSD90_ENV	1
-+#define AFS_USR_FBSD91_ENV	1
-+#define AFS_USR_FBSD100_ENV	1
-+#define AFS_USR_FBSD_ENV	1
-+#undef  AFS_NONFSTRANS
-+#define AFS_NONFSTRANS 1
-+
-+#define AFS_MOUNT_AFS "afs"	/* The name of the filesystem type. */
-+#define AFS_SYSCALL 339
-+#define AFS_NAMEI_ENV         1	/* User space interface to file system */
-+#define AFS_64BIT_ENV         1
-+#define AFS_64BIT_IOPS_ENV    1	/* Needed for NAMEI */
-+#define AFS_USERSPACE_IP_ADDR 1
-+#define RXK_LISTENER_ENV      1
-+#define AFS_GCPAGS	      0	/* if nonzero, garbage collect PAGs */
-+
-+#include <afs/afs_sysnames.h>
-+
-+#define	afsio_iov	uio_iov
-+#define	afsio_iovcnt	uio_iovcnt
-+#define	afsio_offset	uio_offset
-+#define	afsio_seg	uio_segflg
-+#define	afsio_fmode	uio_fmode
-+#define	afsio_resid	uio_resid
-+#define	AFS_UIOSYS	1
-+#define	AFS_UIOUSER	UIO_USERSPACE
-+#define	AFS_CLBYTES	MCLBYTES
-+#define	AFS_MINCHANGE	2
-+#define	VATTR_NULL	usr_vattr_null
-+
-+#define AFS_DIRENT
-+#ifndef CMSERVERPREF
-+#define CMSERVERPREF
-+#endif
-+
-+#include <sys/param.h>
-+#include <sys/types.h>
-+#include <sys/mount.h>
-+#include <sys/fcntl.h>
-+#include <sys/uio.h>
-+#include <sys/socket.h>
-+#include <netinet/in.h>
-+#include <limits.h>
-+
-+#endif /* !defined(UKERNEL) */
-+
-+/* general user-space compiles */
-+
-+#if defined(UKERNEL) || !defined(KERNEL)
-+#define STDLIB_HAS_MALLOC_PROTOS 1
-+#endif
-+
-+#endif /* AFS_PARAM_H */
-diff --git a/src/config/param.i386_fbsd_83.h b/src/config/param.i386_fbsd_83.h
-new file mode 100644
-index 0000000..0078f32
---- /dev/null
-+++ b/src/config/param.i386_fbsd_83.h
-@@ -0,0 +1,210 @@
-+#ifndef	AFS_PARAM_H
-+#define	AFS_PARAM_H
-+
-+/* Machine / Operating system information */
-+#define SYS_NAME	"i386_fbsd_83"
-+#define SYS_NAME_ID	SYS_NAME_ID_i386_fbsd_83
-+
-+#define AFSLITTLE_ENDIAN    1
-+#define AFS_HAVE_FFS        1	/* Use system's ffs. */
-+#define AFS_HAVE_STATVFS    1	/* System doesn't support statvfs */
-+#define AFS_VM_RDWR_ENV	    1	/* read/write implemented via VM */
-+#define AFS_FAKEOPEN_ENV    1   /* call afs_FakeOpen as if !AFS_VM_RDWR */
-+
-+
-+#ifndef UKERNEL
-+/* This section for kernel libafs compiles only */
-+
-+#ifndef IGNORE_STDS_H
-+#include <sys/param.h>
-+#endif
-+
-+#define AFS_XBSD_ENV 1		/* {Free,Open,Net}BSD */
-+#define AFS_X86_XBSD_ENV 1
-+
-+#define AFS_NAMEI_ENV     1	/* User space interface to file system */
-+#define AFS_64BIT_ENV 1
-+#define AFS_64BIT_CLIENT 1
-+#define AFS_64BIT_IOPS_ENV 1	/* Needed for NAMEI */
-+#define AFS_FBSD_ENV 1
-+#define AFS_FBSD50_ENV 1
-+#define AFS_FBSD51_ENV 1
-+#define AFS_FBSD52_ENV 1
-+#define AFS_FBSD53_ENV 1
-+#define AFS_FBSD60_ENV 1
-+#define AFS_FBSD61_ENV 1
-+#define AFS_FBSD62_ENV 1
-+#define AFS_FBSD70_ENV 1
-+#define AFS_FBSD71_ENV 1
-+#define AFS_FBSD80_ENV 1
-+#define AFS_FBSD81_ENV 1
-+#define AFS_FBSD82_ENV 1
-+#define AFS_FBSD83_ENV 1
-+#define AFS_X86_FBSD_ENV 1
-+#define AFS_X86_FBSD50_ENV 1
-+#define AFS_X86_FBSD60_ENV 1 /* added at 70--ie, some changes should port <-- */
-+#define AFS_X86_FBSD62_ENV 1
-+#define AFS_X86_FBSD70_ENV 1
-+#define AFS_X86_FBSD71_ENV 1
-+#define AFS_X86_FBSD80_ENV 1
-+#define AFS_X86_FBSD81_ENV 1
-+#define AFS_X86_FBSD82_ENV 1
-+#define AFS_X86_FBSD83_ENV 1
-+#define AFS_X86_ENV 1
-+#undef  AFS_NONFSTRANS
-+#define AFS_NONFSTRANS 1
-+#define FTRUNC O_TRUNC
-+
-+#define IUPD 0x0010
-+#define IACC 0x0020
-+#define ICHG 0x0040
-+#define IMOD 0x0080
-+
-+#define IN_LOCK(ip)     lockmgr(&ip->i_lock, LK_EXCLUSIVE, \
-+                                NULL, curproc)
-+#define IN_UNLOCK(ip)   lockmgr(&ip->i_lock, LK_RELEASE, \
-+                                NULL, curproc)
-+
-+#include <afs/afs_sysnames.h>
-+
-+#define AFS_VFS_ENV	1
-+#define AFS_VFSINCL_ENV 1
-+#define AFS_GREEDY43_ENV	1
-+#define AFS_ENV  	1
-+
-+#define AFS_SYSCALL	339
-+#define AFS_MOUNT_AFS	"afs"
-+
-+#ifndef MOUNT_UFS
-+#define MOUNT_UFS "ufs"
-+#endif
-+
-+#ifndef	MOUNT_AFS
-+#define	MOUNT_AFS AFS_MOUNT_AFS
-+#endif
-+
-+#define RXK_LISTENER_ENV 1
-+#define AFS_GCPAGS	        0	/* if nonzero, garbage collect PAGs */
-+#define AFS_USE_GETTIMEOFDAY    1	/* use gettimeofday to implement rx clock */
-+
-+/* Extra kernel definitions (from kdefs file) */
-+#ifdef _KERNEL
-+#define AFS_GLOBAL_SUNLOCK        1
-+#define	AFS_VFS34	1	/* What is VFS34??? */
-+#define	AFS_SHORTGID	0	/* are group id's short? */
-+#define	afsio_iov	uio_iov
-+#define	afsio_iovcnt	uio_iovcnt
-+#define	afsio_offset	uio_offset
-+#define	afsio_seg	uio_segflg
-+#define	afsio_resid	uio_resid
-+#define	AFS_UIOSYS	UIO_SYSSPACE
-+#define	AFS_UIOUSER	UIO_USERSPACE
-+#define	AFS_CLBYTES	CLBYTES
-+#define	osi_GetTime(x)	microtime(x)
-+#define AFS_KALLOC(x)   osi_fbsd_alloc((x), 1)
-+#undef	AFS_KALLOC_NOSLEEP
-+#define	AFS_KALLOC_NOSLEEP(x) osi_fbsd_alloc((x), 0)
-+#define AFS_KFREE(x,y)  osi_fbsd_free((x))
-+#define	v_count		v_usecount
-+#define v_vfsp		v_mount
-+#define vfs_bsize	mnt_stat.f_bsize
-+#define vfs_fsid	mnt_stat.f_fsid
-+#define va_nodeid	va_fileid
-+#define vfs_vnodecovered mnt_vnodecovered
-+#define direct		dirent
-+#define vnode_t		struct vnode
-+
-+#ifndef MUTEX_DEFAULT
-+#define MUTEX_DEFAULT   0
-+#endif /* MUTEX_DEFAULT */
-+
-+#ifndef SSYS
-+#define SSYS            0x00002
-+#endif /* SSYS */
-+
-+#define p_rcred         p_ucred
-+
-+#if	!defined(ASSEMBLER) && !defined(__LANGUAGE_ASSEMBLY__)
-+enum vcexcl { NONEXCL, EXCL };
-+
-+#ifdef KERNEL
-+#ifndef MIN
-+#define MIN(A,B) ((A) < (B) ? (A) : (B))
-+#endif
-+#ifndef MAX
-+#define MAX(A,B) ((A) > (B) ? (A) : (B))
-+#endif
-+#endif /* KERNEL */
-+
-+#endif /* ! ASSEMBLER & ! __LANGUAGE_ASSEMBLY__ */
-+#endif /* _KERNEL */
-+
-+#else /* !defined(UKERNEL) */
-+
-+/* This section for user space compiles only */
-+
-+#define UKERNEL			1	/* user space kernel */
-+#define AFS_ENV			1
-+#define AFS_VFSINCL_ENV         1
-+#define AFS_USR_FBSD50_ENV	1
-+#define AFS_USR_FBSD51_ENV	1
-+#define AFS_USR_FBSD52_ENV	1
-+#define AFS_USR_FBSD53_ENV	1
-+#define AFS_USR_FBSD60_ENV	1
-+#define AFS_USR_FBSD61_ENV	1
-+#define AFS_USR_FBSD70_ENV	1
-+#define AFS_USR_FBSD71_ENV	1
-+#define AFS_USR_FBSD80_ENV	1
-+#define AFS_USR_FBSD81_ENV	1
-+#define AFS_USR_FBSD82_ENV	1
-+#define AFS_USR_FBSD83_ENV	1
-+#define AFS_USR_FBSD_ENV	1
-+#undef  AFS_NONFSTRANS
-+#define AFS_NONFSTRANS 1
-+
-+#define AFS_MOUNT_AFS "afs"	/* The name of the filesystem type. */
-+#define AFS_SYSCALL 339
-+#define AFS_NAMEI_ENV         1	/* User space interface to file system */
-+#define AFS_64BIT_ENV         1
-+#define AFS_64BIT_IOPS_ENV    1	/* Needed for NAMEI */
-+#define AFS_USERSPACE_IP_ADDR 1
-+#define RXK_LISTENER_ENV      1
-+#define AFS_GCPAGS	      0	/* if nonzero, garbage collect PAGs */
-+
-+#include <afs/afs_sysnames.h>
-+
-+#define	afsio_iov	uio_iov
-+#define	afsio_iovcnt	uio_iovcnt
-+#define	afsio_offset	uio_offset
-+#define	afsio_seg	uio_segflg
-+#define	afsio_fmode	uio_fmode
-+#define	afsio_resid	uio_resid
-+#define	AFS_UIOSYS	1
-+#define	AFS_UIOUSER	UIO_USERSPACE
-+#define	AFS_CLBYTES	MCLBYTES
-+#define	AFS_MINCHANGE	2
-+#define	VATTR_NULL	usr_vattr_null
-+
-+#define AFS_DIRENT
-+#ifndef CMSERVERPREF
-+#define CMSERVERPREF
-+#endif
-+
-+#include <sys/param.h>
-+#include <sys/types.h>
-+#include <sys/mount.h>
-+#include <sys/fcntl.h>
-+#include <sys/uio.h>
-+#include <sys/socket.h>
-+#include <netinet/in.h>
-+#include <limits.h>
-+
-+#endif /* !defined(UKERNEL) */
-+
-+/* general user-space compiles */
-+
-+#if defined(UKERNEL) || !defined(KERNEL)
-+#define STDLIB_HAS_MALLOC_PROTOS 1
-+#endif
-+
-+#endif /* AFS_PARAM_H */
-diff --git a/src/config/param.i386_fbsd_84.h b/src/config/param.i386_fbsd_84.h
-new file mode 100644
-index 0000000..014c72d
---- /dev/null
-+++ b/src/config/param.i386_fbsd_84.h
-@@ -0,0 +1,213 @@
-+#ifndef	AFS_PARAM_H
-+#define	AFS_PARAM_H
-+
-+/* Machine / Operating system information */
-+#define SYS_NAME	"i386_fbsd_84"
-+#define SYS_NAME_ID	SYS_NAME_ID_i386_fbsd_84
-+
-+#define AFSLITTLE_ENDIAN    1
-+#define AFS_HAVE_FFS        1	/* Use system's ffs. */
-+#define AFS_HAVE_STATVFS    1	/* System doesn't support statvfs */
-+#define AFS_VM_RDWR_ENV	    1	/* read/write implemented via VM */
-+#define AFS_FAKEOPEN_ENV    1   /* call afs_FakeOpen as if !AFS_VM_RDWR */
-+
-+
-+#ifndef UKERNEL
-+/* This section for kernel libafs compiles only */
-+
-+#ifndef IGNORE_STDS_H
-+#include <sys/param.h>
-+#endif
-+
-+#define AFS_XBSD_ENV 1		/* {Free,Open,Net}BSD */
-+#define AFS_X86_XBSD_ENV 1
-+
-+#define AFS_NAMEI_ENV     1	/* User space interface to file system */
-+#define AFS_64BIT_ENV 1
-+#define AFS_64BIT_CLIENT 1
-+#define AFS_64BIT_IOPS_ENV 1	/* Needed for NAMEI */
-+#define AFS_FBSD_ENV 1
-+#define AFS_FBSD50_ENV 1
-+#define AFS_FBSD51_ENV 1
-+#define AFS_FBSD52_ENV 1
-+#define AFS_FBSD53_ENV 1
-+#define AFS_FBSD60_ENV 1
-+#define AFS_FBSD61_ENV 1
-+#define AFS_FBSD62_ENV 1
-+#define AFS_FBSD70_ENV 1
-+#define AFS_FBSD71_ENV 1
-+#define AFS_FBSD80_ENV 1
-+#define AFS_FBSD81_ENV 1
-+#define AFS_FBSD82_ENV 1
-+#define AFS_FBSD83_ENV 1
-+#define AFS_FBSD84_ENV 1
-+#define AFS_X86_FBSD_ENV 1
-+#define AFS_X86_FBSD50_ENV 1
-+#define AFS_X86_FBSD60_ENV 1 /* added at 70--ie, some changes should port <-- */
-+#define AFS_X86_FBSD62_ENV 1
-+#define AFS_X86_FBSD70_ENV 1
-+#define AFS_X86_FBSD71_ENV 1
-+#define AFS_X86_FBSD80_ENV 1
-+#define AFS_X86_FBSD81_ENV 1
-+#define AFS_X86_FBSD82_ENV 1
-+#define AFS_X86_FBSD83_ENV 1
-+#define AFS_X86_FBSD84_ENV 1
-+#define AFS_X86_ENV 1
-+#undef  AFS_NONFSTRANS
-+#define AFS_NONFSTRANS 1
-+#define FTRUNC O_TRUNC
-+
-+#define IUPD 0x0010
-+#define IACC 0x0020
-+#define ICHG 0x0040
-+#define IMOD 0x0080
-+
-+#define IN_LOCK(ip)     lockmgr(&ip->i_lock, LK_EXCLUSIVE, \
-+                                NULL, curproc)
-+#define IN_UNLOCK(ip)   lockmgr(&ip->i_lock, LK_RELEASE, \
-+                                NULL, curproc)
-+
-+#include <afs/afs_sysnames.h>
-+
-+#define AFS_VFS_ENV	1
-+#define AFS_VFSINCL_ENV 1
-+#define AFS_GREEDY43_ENV	1
-+#define AFS_ENV  	1
-+
-+#define AFS_SYSCALL	339
-+#define AFS_MOUNT_AFS	"afs"
-+
-+#ifndef MOUNT_UFS
-+#define MOUNT_UFS "ufs"
-+#endif
-+
-+#ifndef	MOUNT_AFS
-+#define	MOUNT_AFS AFS_MOUNT_AFS
-+#endif
-+
-+#define RXK_LISTENER_ENV 1
-+#define AFS_GCPAGS	        0	/* if nonzero, garbage collect PAGs */
-+#define AFS_USE_GETTIMEOFDAY    1	/* use gettimeofday to implement rx clock */
-+
-+/* Extra kernel definitions (from kdefs file) */
-+#ifdef _KERNEL
-+#define AFS_GLOBAL_SUNLOCK        1
-+#define	AFS_VFS34	1	/* What is VFS34??? */
-+#define	AFS_SHORTGID	0	/* are group id's short? */
-+#define	afsio_iov	uio_iov
-+#define	afsio_iovcnt	uio_iovcnt
-+#define	afsio_offset	uio_offset
-+#define	afsio_seg	uio_segflg
-+#define	afsio_resid	uio_resid
-+#define	AFS_UIOSYS	UIO_SYSSPACE
-+#define	AFS_UIOUSER	UIO_USERSPACE
-+#define	AFS_CLBYTES	CLBYTES
-+#define	osi_GetTime(x)	microtime(x)
-+#define AFS_KALLOC(x)   osi_fbsd_alloc((x), 1)
-+#undef	AFS_KALLOC_NOSLEEP
-+#define	AFS_KALLOC_NOSLEEP(x) osi_fbsd_alloc((x), 0)
-+#define AFS_KFREE(x,y)  osi_fbsd_free((x))
-+#define	v_count		v_usecount
-+#define v_vfsp		v_mount
-+#define vfs_bsize	mnt_stat.f_bsize
-+#define vfs_fsid	mnt_stat.f_fsid
-+#define va_nodeid	va_fileid
-+#define vfs_vnodecovered mnt_vnodecovered
-+#define direct		dirent
-+#define vnode_t		struct vnode
-+
-+#ifndef MUTEX_DEFAULT
-+#define MUTEX_DEFAULT   0
-+#endif /* MUTEX_DEFAULT */
-+
-+#ifndef SSYS
-+#define SSYS            0x00002
-+#endif /* SSYS */
-+
-+#define p_rcred         p_ucred
-+
-+#if	!defined(ASSEMBLER) && !defined(__LANGUAGE_ASSEMBLY__)
-+enum vcexcl { NONEXCL, EXCL };
-+
-+#ifdef KERNEL
-+#ifndef MIN
-+#define MIN(A,B) ((A) < (B) ? (A) : (B))
-+#endif
-+#ifndef MAX
-+#define MAX(A,B) ((A) > (B) ? (A) : (B))
-+#endif
-+#endif /* KERNEL */
-+
-+#endif /* ! ASSEMBLER & ! __LANGUAGE_ASSEMBLY__ */
-+#endif /* _KERNEL */
-+
-+#else /* !defined(UKERNEL) */
-+
-+/* This section for user space compiles only */
-+
-+#define UKERNEL			1	/* user space kernel */
-+#define AFS_ENV			1
-+#define AFS_VFSINCL_ENV         1
-+#define AFS_USR_FBSD50_ENV	1
-+#define AFS_USR_FBSD51_ENV	1
-+#define AFS_USR_FBSD52_ENV	1
-+#define AFS_USR_FBSD53_ENV	1
-+#define AFS_USR_FBSD60_ENV	1
-+#define AFS_USR_FBSD61_ENV	1
-+#define AFS_USR_FBSD70_ENV	1
-+#define AFS_USR_FBSD71_ENV	1
-+#define AFS_USR_FBSD80_ENV	1
-+#define AFS_USR_FBSD81_ENV	1
-+#define AFS_USR_FBSD82_ENV	1
-+#define AFS_USR_FBSD83_ENV	1
-+#define AFS_USR_FBSD84_ENV	1
-+#define AFS_USR_FBSD_ENV	1
-+#undef  AFS_NONFSTRANS
-+#define AFS_NONFSTRANS 1
-+
-+#define AFS_MOUNT_AFS "afs"	/* The name of the filesystem type. */
-+#define AFS_SYSCALL 339
-+#define AFS_NAMEI_ENV         1	/* User space interface to file system */
-+#define AFS_64BIT_ENV         1
-+#define AFS_64BIT_IOPS_ENV    1	/* Needed for NAMEI */
-+#define AFS_USERSPACE_IP_ADDR 1
-+#define RXK_LISTENER_ENV      1
-+#define AFS_GCPAGS	      0	/* if nonzero, garbage collect PAGs */
-+
-+#include <afs/afs_sysnames.h>
-+
-+#define	afsio_iov	uio_iov
-+#define	afsio_iovcnt	uio_iovcnt
-+#define	afsio_offset	uio_offset
-+#define	afsio_seg	uio_segflg
-+#define	afsio_fmode	uio_fmode
-+#define	afsio_resid	uio_resid
-+#define	AFS_UIOSYS	1
-+#define	AFS_UIOUSER	UIO_USERSPACE
-+#define	AFS_CLBYTES	MCLBYTES
-+#define	AFS_MINCHANGE	2
-+#define	VATTR_NULL	usr_vattr_null
-+
-+#define AFS_DIRENT
-+#ifndef CMSERVERPREF
-+#define CMSERVERPREF
-+#endif
-+
-+#include <sys/param.h>
-+#include <sys/types.h>
-+#include <sys/mount.h>
-+#include <sys/fcntl.h>
-+#include <sys/uio.h>
-+#include <sys/socket.h>
-+#include <netinet/in.h>
-+#include <limits.h>
-+
-+#endif /* !defined(UKERNEL) */
-+
-+/* general user-space compiles */
-+
-+#if defined(UKERNEL) || !defined(KERNEL)
-+#define STDLIB_HAS_MALLOC_PROTOS 1
-+#endif
-+
-+#endif /* AFS_PARAM_H */
-diff --git a/src/config/param.i386_fbsd_91.h b/src/config/param.i386_fbsd_91.h
-new file mode 100644
-index 0000000..739f8a1
---- /dev/null
-+++ b/src/config/param.i386_fbsd_91.h
-@@ -0,0 +1,210 @@
-+#ifndef	AFS_PARAM_H
-+#define	AFS_PARAM_H
-+
-+/* Machine / Operating system information */
-+#define SYS_NAME	"i386_fbsd_91"
-+#define SYS_NAME_ID	SYS_NAME_ID_i386_fbsd_91
-+
-+#define AFSLITTLE_ENDIAN    1
-+#define AFS_HAVE_FFS        1	/* Use system's ffs. */
-+#define AFS_HAVE_STATVFS    1	/* System doesn't support statvfs */
-+#define AFS_VM_RDWR_ENV	    1	/* read/write implemented via VM */
-+#define AFS_FAKEOPEN_ENV    1   /* call afs_FakeOpen as if !AFS_VM_RDWR */
-+
-+
-+#ifndef UKERNEL
-+/* This section for kernel libafs compiles only */
-+
-+#ifndef IGNORE_STDS_H
-+#include <sys/param.h>
-+#endif
-+
-+#define AFS_XBSD_ENV 1		/* {Free,Open,Net}BSD */
-+#define AFS_X86_XBSD_ENV 1
-+
-+#define AFS_NAMEI_ENV     1	/* User space interface to file system */
-+#define AFS_64BIT_ENV 1
-+#define AFS_64BIT_CLIENT 1
-+#define AFS_64BIT_IOPS_ENV 1	/* Needed for NAMEI */
-+#define AFS_FBSD_ENV 1
-+#define AFS_FBSD50_ENV 1
-+#define AFS_FBSD51_ENV 1
-+#define AFS_FBSD52_ENV 1
-+#define AFS_FBSD53_ENV 1
-+#define AFS_FBSD60_ENV 1
-+#define AFS_FBSD61_ENV 1
-+#define AFS_FBSD62_ENV 1
-+#define AFS_FBSD70_ENV 1
-+#define AFS_FBSD71_ENV 1
-+#define AFS_FBSD80_ENV 1
-+#define AFS_FBSD81_ENV 1
-+#define AFS_FBSD90_ENV 1
-+#define AFS_FBSD91_ENV 1
-+#define AFS_X86_FBSD_ENV 1
-+#define AFS_X86_FBSD50_ENV 1
-+#define AFS_X86_FBSD60_ENV 1 /* added at 70--ie, some changes should port <-- */
-+#define AFS_X86_FBSD62_ENV 1
-+#define AFS_X86_FBSD70_ENV 1
-+#define AFS_X86_FBSD71_ENV 1
-+#define AFS_X86_FBSD80_ENV 1
-+#define AFS_X86_FBSD81_ENV 1
-+#define AFS_X86_FBSD90_ENV 1
-+#define AFS_X86_FBSD91_ENV 1
-+#define AFS_X86_ENV 1
-+#undef  AFS_NONFSTRANS
-+#define AFS_NONFSTRANS 1
-+#define FTRUNC O_TRUNC
-+
-+#define IUPD 0x0010
-+#define IACC 0x0020
-+#define ICHG 0x0040
-+#define IMOD 0x0080
-+
-+#define IN_LOCK(ip)     lockmgr(&ip->i_lock, LK_EXCLUSIVE, \
-+                                NULL, curproc)
-+#define IN_UNLOCK(ip)   lockmgr(&ip->i_lock, LK_RELEASE, \
-+                                NULL, curproc)
-+
-+#include <afs/afs_sysnames.h>
-+
-+#define AFS_VFS_ENV	1
-+#define AFS_VFSINCL_ENV 1
-+#define AFS_GREEDY43_ENV	1
-+#define AFS_ENV  	1
-+
-+#define AFS_SYSCALL	339
-+#define AFS_MOUNT_AFS	"afs"
-+
-+#ifndef MOUNT_UFS
-+#define MOUNT_UFS "ufs"
-+#endif
-+
-+#ifndef	MOUNT_AFS
-+#define	MOUNT_AFS AFS_MOUNT_AFS
-+#endif
-+
-+#define RXK_LISTENER_ENV 1
-+#define AFS_GCPAGS	        0	/* if nonzero, garbage collect PAGs */
-+#define AFS_USE_GETTIMEOFDAY    1	/* use gettimeofday to implement rx clock */
-+
-+/* Extra kernel definitions (from kdefs file) */
-+#ifdef _KERNEL
-+#define AFS_GLOBAL_SUNLOCK        1
-+#define	AFS_VFS34	1	/* What is VFS34??? */
-+#define	AFS_SHORTGID	0	/* are group id's short? */
-+#define	afsio_iov	uio_iov
-+#define	afsio_iovcnt	uio_iovcnt
-+#define	afsio_offset	uio_offset
-+#define	afsio_seg	uio_segflg
-+#define	afsio_resid	uio_resid
-+#define	AFS_UIOSYS	UIO_SYSSPACE
-+#define	AFS_UIOUSER	UIO_USERSPACE
-+#define	AFS_CLBYTES	CLBYTES
-+#define	osi_GetTime(x)	microtime(x)
-+#define AFS_KALLOC(x)   osi_fbsd_alloc((x), 1)
-+#undef	AFS_KALLOC_NOSLEEP
-+#define	AFS_KALLOC_NOSLEEP(x) osi_fbsd_alloc((x), 0)
-+#define AFS_KFREE(x,y)  osi_fbsd_free((x))
-+#define	v_count		v_usecount
-+#define v_vfsp		v_mount
-+#define vfs_bsize	mnt_stat.f_bsize
-+#define vfs_fsid	mnt_stat.f_fsid
-+#define va_nodeid	va_fileid
-+#define vfs_vnodecovered mnt_vnodecovered
-+#define direct		dirent
-+#define vnode_t		struct vnode
-+
-+#ifndef MUTEX_DEFAULT
-+#define MUTEX_DEFAULT   0
-+#endif /* MUTEX_DEFAULT */
-+
-+#ifndef SSYS
-+#define SSYS            0x00002
-+#endif /* SSYS */
-+
-+#define p_rcred         p_ucred
-+
-+#if	!defined(ASSEMBLER) && !defined(__LANGUAGE_ASSEMBLY__)
-+enum vcexcl { NONEXCL, EXCL };
-+
-+#ifdef KERNEL
-+#ifndef MIN
-+#define MIN(A,B) ((A) < (B) ? (A) : (B))
-+#endif
-+#ifndef MAX
-+#define MAX(A,B) ((A) > (B) ? (A) : (B))
-+#endif
-+#endif /* KERNEL */
-+
-+#endif /* ! ASSEMBLER & ! __LANGUAGE_ASSEMBLY__ */
-+#endif /* _KERNEL */
-+
-+#else /* !defined(UKERNEL) */
-+
-+/* This section for user space compiles only */
-+
-+#define UKERNEL			1	/* user space kernel */
-+#define AFS_ENV			1
-+#define AFS_VFSINCL_ENV         1
-+#define AFS_USR_FBSD50_ENV	1
-+#define AFS_USR_FBSD51_ENV	1
-+#define AFS_USR_FBSD52_ENV	1
-+#define AFS_USR_FBSD53_ENV	1
-+#define AFS_USR_FBSD60_ENV	1
-+#define AFS_USR_FBSD61_ENV	1
-+#define AFS_USR_FBSD70_ENV	1
-+#define AFS_USR_FBSD71_ENV	1
-+#define AFS_USR_FBSD80_ENV	1
-+#define AFS_USR_FBSD81_ENV	1
-+#define AFS_USR_FBSD90_ENV	1
-+#define AFS_USR_FBSD91_ENV	1
-+#define AFS_USR_FBSD_ENV	1
-+#undef  AFS_NONFSTRANS
-+#define AFS_NONFSTRANS 1
-+
-+#define AFS_MOUNT_AFS "afs"	/* The name of the filesystem type. */
-+#define AFS_SYSCALL 339
-+#define AFS_NAMEI_ENV         1	/* User space interface to file system */
-+#define AFS_64BIT_ENV         1
-+#define AFS_64BIT_IOPS_ENV    1	/* Needed for NAMEI */
-+#define AFS_USERSPACE_IP_ADDR 1
-+#define RXK_LISTENER_ENV      1
-+#define AFS_GCPAGS	      0	/* if nonzero, garbage collect PAGs */
-+
-+#include <afs/afs_sysnames.h>
-+
-+#define	afsio_iov	uio_iov
-+#define	afsio_iovcnt	uio_iovcnt
-+#define	afsio_offset	uio_offset
-+#define	afsio_seg	uio_segflg
-+#define	afsio_fmode	uio_fmode
-+#define	afsio_resid	uio_resid
-+#define	AFS_UIOSYS	1
-+#define	AFS_UIOUSER	UIO_USERSPACE
-+#define	AFS_CLBYTES	MCLBYTES
-+#define	AFS_MINCHANGE	2
-+#define	VATTR_NULL	usr_vattr_null
-+
-+#define AFS_DIRENT
-+#ifndef CMSERVERPREF
-+#define CMSERVERPREF
-+#endif
-+
-+#include <sys/param.h>
-+#include <sys/types.h>
-+#include <sys/mount.h>
-+#include <sys/fcntl.h>
-+#include <sys/uio.h>
-+#include <sys/socket.h>
-+#include <netinet/in.h>
-+#include <limits.h>
-+
-+#endif /* !defined(UKERNEL) */
-+
-+/* general user-space compiles */
-+
-+#if defined(UKERNEL) || !defined(KERNEL)
-+#define STDLIB_HAS_MALLOC_PROTOS 1
-+#endif
-+
-+#endif /* AFS_PARAM_H */
-diff --git a/src/config/param.linux26.h b/src/config/param.linux26.h
-index 8f6382b..3e69ee3 100644
---- a/src/config/param.linux26.h
-+++ b/src/config/param.linux26.h
-@@ -64,6 +64,7 @@
- #define AFS_USR_LINUX26_ENV	1
- 
- #define AFS_ENV			1
-+#define AFS_64BIT_CLIENT	1
- #undef  AFS_NONFSTRANS
- #define AFS_NONFSTRANS 		1
- #define AFS_MOUNT_AFS 		"afs"	/* The name of the filesystem type. */
-diff --git a/src/des/key_sched.c b/src/des/key_sched.c
-index d856914..c6654f3 100644
---- a/src/des/key_sched.c
-+++ b/src/des/key_sched.c
-@@ -55,17 +55,13 @@ des_key_sched(des_cblock k, des_key_schedule schedule)
- {
-     /* better pass 8 bytes, length not checked here */
- 
--    int i, j, n;	/* i = r10, j = r9, n = r8 */
-+    int i, j;
-     unsigned int temp;	/*  r7 */
-     char *p_char;	/* r6 */
-     key k_char;
-     i = 8;
--    n = 0;
-     p_char = k_char;
- 
--#ifdef lint
--    n = n;			/* fool it in case of VAXASM */
--#endif
- #ifdef DEBUG
-     if (des_debug)
- 	fprintf(stderr, "\n\ninput key, left to right = ");
-diff --git a/src/kauth/authclient.c b/src/kauth/authclient.c
-index 2831a12..0d57771 100644
---- a/src/kauth/authclient.c
-+++ b/src/kauth/authclient.c
-@@ -352,12 +352,10 @@ CheckTicketAnswer(ka_BBS * oanswer, afs_int32 challenge,
- 		  afs_int32 * pwexpires)
- {
-     struct ka_ticketAnswer *answer;
--    afs_uint32 cksum;
-     unsigned char tempc;
- 
-     answer = (struct ka_ticketAnswer *)oanswer->SeqBody;
- 
--    cksum = ntohl(answer->cksum);
-     if (challenge != ntohl(answer->challenge))
- 	return KABADPROTOCOL;
-     memcpy(&token->sessionKey, &answer->sessionKey,
-diff --git a/src/kauth/kadatabase.c b/src/kauth/kadatabase.c
-index b204225..0a9fe9c 100644
---- a/src/kauth/kadatabase.c
-+++ b/src/kauth/kadatabase.c
-@@ -26,11 +26,15 @@
- #include "kautils.h"
- #include "kaserver.h"
- 
-+#if !defined(offsetof)
-+#include <stddef.h>             /* for definition of offsetof() */
-+#endif
-+
- extern Date cheaderReadTime;	/* time cheader last read in */
- 
--#define set_header_word(tt,field,value) kawrite ((tt), ((char *)&(cheader.field) - (char *)&cheader), ((cheader.field = (value)), (char *)&(cheader.field)), sizeof(afs_int32))
-+#define set_header_word(tt,field,value) kawrite ((tt), (offsetof(struct kaheader, field)), ((cheader.field = (value)), (char *)&(cheader.field)), sizeof(afs_int32))
- 
--#define inc_header_word(tt,field) kawrite ((tt), ((char *)&(cheader.field) - (char *)&cheader), ((cheader.field = (htonl(ntohl(cheader.field)+1))), (char *)&(cheader.field)), sizeof(afs_int32))
-+#define inc_header_word(tt,field) kawrite ((tt), (offsetof(struct kaheader, field)), ((cheader.field = (htonl(ntohl(cheader.field)+1))), (char *)&(cheader.field)), sizeof(afs_int32))
- 
- static int index_OK(afs_int32);
- 
-@@ -411,7 +415,11 @@ ka_NewKey(struct ubik_trans *tt, afs_int32 tentryaddr,
-     Date now = time(0);
-     afs_int32 newkeyver;	/* new key version number */
-     afs_int32 newtotalkeyentries = 0, oldtotalkeyentries = 0, keyentries;
--    int foundcurrentkey = 0, addednewkey = 0, modified;
-+    int addednewkey = 0, modified;
-+#ifdef AUTH_DBM_LOG
-+    int foundcurrentkey = 0;
-+#endif
-+
- 
-     es_Report("Newkey for %s.%s\n", tentry->userID.name,
- 	      tentry->userID.instance);
-@@ -460,8 +468,8 @@ ka_NewKey(struct ubik_trans *tt, afs_int32 tentryaddr,
- 			    ("Warning: Entry %s.%s contains more than one valid key: fixing\n",
- 			     tentry->userID.name, tentry->userID.instance));
- 		}
--#endif
- 		foundcurrentkey = 1;
-+#endif
- 	    }
- 
- 	    /* If we find an oldkey of the same version or
-diff --git a/src/kauth/kkids.c b/src/kauth/kkids.c
-index d004028..1d75527 100644
---- a/src/kauth/kkids.c
-+++ b/src/kauth/kkids.c
-@@ -51,11 +51,8 @@ static FILE *childin, *childout;	/* file pointers on pipe to kpwvalid */
- static int
- simplify_name(char *orig_name, char *true_name)
- {
--    int thru_symlink;
-     struct stat statbuff;
- 
--    thru_symlink = 0;
--
- #ifdef AFS_NT40_ENV
-     if (stat(orig_name, &statbuff) < 0) {
- 	*true_name = '\0';
-@@ -80,7 +77,6 @@ simplify_name(char *orig_name, char *true_name)
- 	 * the contents of the link for the file name.
- 	 */
- 	if ((statbuff.st_mode & S_IFMT) == S_IFLNK) {
--	    thru_symlink = 1;
- 	    link_chars_read = readlink(orig_name, true_name, 1024);
- 	    if (link_chars_read <= 0) {
- 		*true_name = '\0';
-diff --git a/src/kauth/kpasswd.c b/src/kauth/kpasswd.c
-index c40640a..d81cbef 100644
---- a/src/kauth/kpasswd.c
-+++ b/src/kauth/kpasswd.c
-@@ -218,7 +218,6 @@ CommandProc(struct cmd_syndesc *as, void *arock)
-     struct passwd pwent;
-     struct passwd *pw = &pwent;
- 
--    int insist;			/* insist on good password quality */
-     int lexplicit = 0;		/* servers specified explicitly */
-     int local;			/* explicit cell is same a local cell */
-     int foundPassword = 0;	/*Not yet, anyway */
-@@ -410,7 +409,6 @@ CommandProc(struct cmd_syndesc *as, void *arock)
-     give_to_child(passwd);
- 
-     /* Get new password if it wasn't provided. */
--    insist = 0;
-     if (!foundNewPassword) {
- 	if (Pipe)
- 	    getpipepass(npasswd, sizeof(npasswd));
-diff --git a/src/libadmin/test/pts.c b/src/libadmin/test/pts.c
-index d4381b4..7d7a202 100644
---- a/src/libadmin/test/pts.c
-+++ b/src/libadmin/test/pts.c
-@@ -421,7 +421,6 @@ DoPtsUserModify(struct cmd_syndesc *as, void *arock)
-     afs_status_t st = 0;
-     const char *user = as->parms[USER].items->data;
-     pts_UserUpdateEntry_t entry;
--    int have_quota = 0;
-     int have_list_status_perm = 0;
-     int have_list_groups_owned_perm = 0;
-     int have_list_membership_perm = 0;
-@@ -432,7 +431,6 @@ DoPtsUserModify(struct cmd_syndesc *as, void *arock)
- 	entry.groupCreationQuota =
- 	    GetIntFromString(as->parms[GROUPQUOTA].items->data, "bad quota");
- 	entry.flag = PTS_USER_UPDATE_GROUP_CREATE_QUOTA;
--	have_quota = 1;
-     }
- 
-     if (as->parms[LISTSTATUS].items) {
-diff --git a/src/libadmin/vos/vsprocs.c b/src/libadmin/vos/vsprocs.c
-index f313f41..f314e01 100644
---- a/src/libadmin/vos/vsprocs.c
-+++ b/src/libadmin/vos/vsprocs.c
-@@ -398,8 +398,7 @@ UV_MoveVolume(afs_cell_handle_p cellHandle, afs_uint32 afromvol,
-     struct destServer destination;
- 
-     struct nvldbentry entry;
--    int islocked, pntg;
--    afs_int32 error;
-+    int islocked;
-     int same;
-     afs_int32 store_flags;
- 
-@@ -414,9 +413,7 @@ UV_MoveVolume(afs_cell_handle_p cellHandle, afs_uint32 afromvol,
-     fromtid = 0;
-     totid = 0;
-     clonetid = 0;
--    error = 0;
-     volid = 0;
--    pntg = 0;
-     backupId = 0;
-     newVol = 0;
- 
-@@ -464,7 +461,6 @@ UV_MoveVolume(afs_cell_handle_p cellHandle, afs_uint32 afromvol,
- 	 */
- 	fromconn = UV_Bind(cellHandle, afromserver, AFSCONF_VOLUMEPORT);
- 	fromtid = 0;
--	pntg = 1;
- 
- 	tst =
- 	    AFSVolTransCreate(fromconn, afromvol, afrompart, ITOffline,
-@@ -519,7 +515,6 @@ UV_MoveVolume(afs_cell_handle_p cellHandle, afs_uint32 afromvol,
- 	}
- 
- 	fromtid = 0;
--	error = 0;
- 	goto fail_UV_MoveVolume;
-     }
- 
-@@ -538,7 +533,6 @@ UV_MoveVolume(afs_cell_handle_p cellHandle, afs_uint32 afromvol,
- 	}
-     }
- 
--    pntg = 1;
-     toconn = UV_Bind(cellHandle, atoserver, AFSCONF_VOLUMEPORT);	/* get connections to the servers */
-     fromconn = UV_Bind(cellHandle, afromserver, AFSCONF_VOLUMEPORT);
-     fromtid = totid = 0;	/* initialize to uncreated */
-@@ -2099,11 +2093,9 @@ UV_DumpVolume(afs_cell_handle_p cellHandle, afs_uint32 afromvol,
-     afs_int32 rcode;
- 
-     struct nvldbentry entry;
--    afs_int32 error;
-     int islocked;
- 
-     islocked = 0;
--    error = 0;
-     rxError = 0;
-     fromcall = (struct rx_call *)0;
-     fromconn = (struct rx_connection *)0;
-@@ -2300,7 +2292,6 @@ UV_RestoreVolume(afs_cell_handle_p cellHandle, afs_int32 toserver,
-     afs_int32 temptid;
-     int success;
-     struct nvldbentry entry;
--    afs_int32 error;
-     int islocked;
-     struct restoreCookie cookie;
-     int reuseID;
-@@ -2311,7 +2302,6 @@ UV_RestoreVolume(afs_cell_handle_p cellHandle, afs_int32 toserver,
-     memset(&cookie, 0, sizeof(cookie));
-     islocked = 0;
-     success = 0;
--    error = 0;
-     reuseID = 1;
-     tocall = (struct rx_call *)0;
-     toconn = (struct rx_connection *)0;
-@@ -3519,7 +3509,6 @@ CheckVldb(afs_cell_handle_p cellHandle, struct nvldbentry *entry,
-     int islocked = 0;
-     int pass = 0;
-     afs_int32 modentry = 0;
--    afs_int32 delentry = 0;
- 
-     if (modified) {
- 	*modified = 0;
-@@ -3583,7 +3572,6 @@ CheckVldb(afs_cell_handle_p cellHandle, struct nvldbentry *entry,
- 	    if (tst) {
- 		goto fail_CheckVldb;
- 	    }
--	    delentry = 1;
- 	} else {
- 	    /* Replace old entry with our new one */
- 	    if (!VLDB_ReplaceEntry
-@@ -3626,7 +3614,6 @@ UV_SyncServer(afs_cell_handle_p cellHandle, struct rx_connection *server,
- {
-     int rc = 0;
-     afs_status_t tst = 0;
--    afs_int32 code, vcode;
-     int noError;
-     afs_int32 nentries, tentries = 0;
-     struct VldbListByAttributes attributes;
-@@ -3637,8 +3624,6 @@ UV_SyncServer(afs_cell_handle_p cellHandle, struct rx_connection *server,
-     afs_int32 si, nsi;
-     afs_int32 modified = 0;
- 
--    code = 0;
--    vcode = 0;
-     noError = 1;
-     arrayEntries.nbulkentries_val = 0;
- 
-@@ -3701,14 +3686,13 @@ UV_RenameVolume(afs_cell_handle_p cellHandle, struct nvldbentry *entry,
-     int rc = 0;
-     afs_status_t tst = 0;
-     afs_status_t etst = 0;
--    afs_int32 rcode, error;
-+    afs_int32 rcode;
-     int i, index;
-     char nameBuffer[256];
-     afs_int32 tid;
-     struct rx_connection *aconn;
-     int islocked;
- 
--    error = 0;
-     aconn = (struct rx_connection *)0;
-     tid = 0;
-     islocked = 0;
-@@ -4065,12 +4049,10 @@ int
- UV_VolumeZap(afs_cell_handle_p cellHandle, struct rx_connection *server,
- 	     unsigned int partition, afs_uint32 volumeId, afs_status_p st)
- {
--    afs_int32 rcode, ttid, error, code;
-+    afs_int32 rcode, ttid;
-     int rc = 0;
-     afs_status_t tst = 0;
- 
--    code = 0;
--    error = 0;
-     ttid = 0;
- 
-     tst = AFSVolTransCreate(server, volumeId, partition, ITOffline, &ttid);
-diff --git a/src/packaging/MacOS/buildpkg.sh.in b/src/packaging/MacOS/buildpkg.sh.in
-index 59bdfb1..9190d8b 100644
---- a/src/packaging/MacOS/buildpkg.sh.in
-+++ b/src/packaging/MacOS/buildpkg.sh.in
-@@ -1,4 +1,4 @@
--#!/bin/sh
-+#!/bin/bash
- # Portions Copyright (c) 2003, 2006 Apple Computer, Inc.  All rights reserved.
- 
- if [ -z "$1" ]; then
-@@ -45,27 +45,19 @@ PKGROOT=$CURDIR/pkgroot
- PKGRES=$CURDIR/pkgres
- DPKGROOT=$CURDIR/dpkgroot
- DPKGRES=$CURDIR/dpkgres
--if [ $majorvers -ge 7 ]; then
--    SEP=:
--    package=/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
--    if [ ! -x $package ]; then
--       echo "PackageMaker does not exist. Please run this script on a MacOS X system"
--      echo "with the DeveloperTools package installed"
--      exit 1
--    fi
-+PACKAGEMAKER=""
-+if [ -e "/Developer/usr/bin/packagemaker" ]; then
-+    PACKAGEMAKER="/Developer/usr/bin/packagemaker"
- else
--    SEP=.
--    package=/usr/bin/package
--    if [ ! -f $package ]; then
--       echo "$package does not exist. Please run this script on a MacOS X system"
--      echo "with the BSD subsystem installed"
--      exit 1
--    fi
--    if grep -q 'set resDir = ""' $package ; then
--       echo $package is buggy.
--       echo remove the line \''set resDir = ""'\' from $package and try again
--       exit 1
--    fi
-+    while IFS= read -d $'\0' -r file ; do
-+        if [ -e "$file/Contents/MacOS/PackageMaker" ]; then
-+            PACKAGEMAKER="$file/Contents/MacOS/PackageMaker"
-+        fi
-+    done < <(mdfind -0 "(kMDItemCFBundleIdentifier == 'com.apple.PackageMaker')")
-+fi
-+if [ -z "$PACKAGEMAKER" ]; then
-+    echo "packagemaker not found"
-+    exit 1
- fi
- 
- if [ $firstpass = yes ]; then
-@@ -107,6 +99,8 @@ if [ $firstpass = yes ]; then
-        exit 1
-     fi
- 
-+    SEP=:
-+
-     rm -rf $PKGROOT
-     mkdir $PKGROOT
- 
-@@ -223,9 +217,9 @@ if [ $secondpass = yes ]; then
- 	cp background.jpg $DPKGRES/background.jpg
- 	chown -R root${SEP}wheel $DPKGRES
- 	rm -rf $CURDIR/OpenAFS-debug-extension.pkg
--	echo $package -build -p $CURDIR/OpenAFS-debug-extension.pkg -f $DPKGROOT -r $DPKGRES \
-+	echo $PACKAGEMAKER -build -p $CURDIR/OpenAFS-debug-extension.pkg -f $DPKGROOT -r $DPKGRES \
- 	    -i OpenAFS-debug.Info.plist -d OpenAFS-debug.Description.plist
--	$package -build -p $CURDIR/OpenAFS-debug-extension.pkg -f $DPKGROOT -r $DPKGRES \
-+	"$PACKAGEMAKER" -build -p $CURDIR/OpenAFS-debug-extension.pkg -f $DPKGROOT -r $DPKGRES \
- 	    -i OpenAFS-debug.Info.plist -d OpenAFS-debug.Description.plist
-     fi
- 
-@@ -255,13 +249,13 @@ if [ $secondpass = yes ]; then
-     chown -R root${SEP}wheel $PKGRES
-     rm -rf $CURDIR/OpenAFS.pkg
-     if [ $majorvers -ge 7 ]; then
--	echo $package -build -p $CURDIR/OpenAFS.pkg -f $PKGROOT -r $PKGRES \
-+	echo $PACKAGEMAKER -build -p $CURDIR/OpenAFS.pkg -f $PKGROOT -r $PKGRES \
- 	    -i OpenAFS.Info.plist -d OpenAFS.Description.plist
--	$package -build -p $CURDIR/OpenAFS.pkg -f $PKGROOT -r $PKGRES \
-+	"$PACKAGEMAKER" -build -p $CURDIR/OpenAFS.pkg -f $PKGROOT -r $PKGRES \
- 	    -i OpenAFS.Info.plist -d OpenAFS.Description.plist
-     else
--	echo $package $PKGROOT $RESSRC/OpenAFS.info -r $PKGRES
--	(cd $CURDIR && $package $PKGROOT $RESSRC/OpenAFS.info -r $PKGRES)
-+	echo $PACKAGEMAKER $PKGROOT $RESSRC/OpenAFS.info -r $PKGRES
-+	(cd $CURDIR && "$PACKAGEMAKER" $PKGROOT $RESSRC/OpenAFS.info -r $PKGRES)
- 	#old versions of package didn't handle this properly
- 	if [ ! -r $CURDIR/OpenAFS.pkg/Contents ]; then
- 		mkdir -p $CURDIR/OpenAFS.pkg/Contents/Resources
-diff --git a/src/packaging/RedHat/openafs-client.service b/src/packaging/RedHat/openafs-client.service
-index bc95057..936762e 100644
---- a/src/packaging/RedHat/openafs-client.service
-+++ b/src/packaging/RedHat/openafs-client.service
-@@ -15,4 +15,4 @@ ExecStop=/sbin/rmmod openafs
- KillMode=none
- 
- [Install]
--WantedBy=multi-user.target
-+WantedBy=multi-user.target remote-fs.target
-diff --git a/src/packaging/RedHat/openafs.spec.in b/src/packaging/RedHat/openafs.spec.in
-index b38d3a6..fc099db 100644
---- a/src/packaging/RedHat/openafs.spec.in
-+++ b/src/packaging/RedHat/openafs.spec.in
-@@ -1055,43 +1055,22 @@ install -p -m 644 src/packaging/RedHat/openafs-cacheinfo $uve/cacheinfo
- install -d -m 755 $RPM_BUILD_ROOT%{_prefix}/src
- cp -a libafs_tree $RPM_BUILD_ROOT%{_prefix}/src/%{name}-%{dkms_version}
- 
--%if 0%{?fedora}
--
--cat > $RPM_BUILD_ROOT%{_prefix}/src/%{name}-%{dkms_version}/dkms.conf <<EOF
--
--PACKAGE_VERSION="%{dkms_version}"
--
--# Items below here should not have to change with each driver version
--PACKAGE_NAME="%{name}"
--MAKE[0]="KMODNAME=openafs.ko; DSTKMOD=\\".\\"; [ \\"\\\`echo \\"\${kernelver_array[0]}\${kernelver[0]}\\" | sed -e 's/^\\([0-9]*\\.[0-9]*\\)\\..*/\\1/'\\\`\\" = \\"2.4\\" ] && KMODNAME=\\"libafs-*\\" && DSTKMOD=openafs.o; ./configure --with-linux-kernel-headers=\${kernel_source_dir} --with-linux-kernel-packaging; make; mv src/libafs/MODLOAD-*/\\\\\\\$KMODNAME \\\\\\\$DSTKMOD"
--CLEAN="make -C src/libafs clean"
--
--BUILT_MODULE_NAME[0]="\$PACKAGE_NAME"
--DEST_MODULE_LOCATION[0]="/kernel/3rdparty/\$PACKAGE_NAME/"
--STRIP[0]=no
--AUTOINSTALL=yes
--
--EOF
--
--%else
--cat > $RPM_BUILD_ROOT%{_prefix}/src/%{name}-%{dkms_version}/dkms.conf <<EOF
-+cat > $RPM_BUILD_ROOT%{_prefix}/src/%{name}-%{dkms_version}/dkms.conf <<"EOF"
- 
- PACKAGE_VERSION="%{dkms_version}"
- 
- # Items below here should not have to change with each driver version
- PACKAGE_NAME="%{name}"
--MAKE[0]="KMODNAME=openafs.ko; DSTKMOD=\\".\\"; [ \\"\\\`echo \\"\${kernelver_array[0]}\${kernelver[0]}\\" | sed -e 's/^\\([0-9]*\\.[0-9]*\\)\\..*/\\1/'\\\`\\" = \\"2.4\\" ] && KMODNAME=\\"libafs-*\\" && DSTKMOD=openafs.o; ./configure --with-linux-kernel-headers=\${kernel_source_dir} --with-linux-kernel-packaging; make; mv src/libafs/MODLOAD-*/\\\$KMODNAME \\\$DSTKMOD"
-+MAKE[0]='./configure --with-linux-kernel-headers=${kernel_source_dir} --with-linux-kernel-packaging && make && case "${kernelver_array[0]}${kernelver[0]}" in 2.4.*) mv src/libafs/MODLOAD-*/libafs-* openafs.o ;; *) mv src/libafs/MODLOAD-*/openafs.ko . ;; esac'
- CLEAN="make -C src/libafs clean"
- 
--BUILT_MODULE_NAME[0]="\$PACKAGE_NAME"
--DEST_MODULE_LOCATION[0]="/kernel/3rdparty/\$PACKAGE_NAME/"
-+BUILT_MODULE_NAME[0]="$PACKAGE_NAME"
-+DEST_MODULE_LOCATION[0]="/kernel/3rdparty/$PACKAGE_NAME/"
- STRIP[0]=no
- AUTOINSTALL=yes
- 
- EOF
- 
--%endif
--
- #
- # install kernel-source
- #
-diff --git a/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSBackgrounderDelegate.h b/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSBackgrounderDelegate.h
-index c4799c6..371ac82 100644
---- a/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSBackgrounderDelegate.h
-+++ b/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSBackgrounderDelegate.h
-@@ -65,7 +65,6 @@
- - (NSImage*)getImageFromBundle:(NSString*)fileName fileExt:(NSString*)ext;
- - (NSImage*)imageToRender;
- - (void)menuNeedsUpdate:(NSMenu *)menu;
--- (void)repairHelperTool;
- - (void) afsVolumeMountChange:(NSNotification *)notification;
- - (void) updateLinkModeStatusWithpreferenceStatus:(BOOL)status;
- -(NSStatusItem*)statusItem;
-diff --git a/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSBackgrounderDelegate.m b/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSBackgrounderDelegate.m
-index 94bef26..d2d81fa 100644
---- a/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSBackgrounderDelegate.m
-+++ b/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSBackgrounderDelegate.m
-@@ -335,22 +335,26 @@
- - (void)startStopAfs:(id)sender
- {
- 	@try {
--		BOOL currentAfsState = NO;
-+	    BOOL currentAfsState = NO;
-+	    OSErr status = [[AuthUtil shared] autorize];
-+	    if(status == noErr){
- 		currentAfsState = [afsMngr checkAfsStatus];
- 		// make the parameter to call the root helper app
- 		if(currentAfsState){
--			//shutdown afs
--			NSLog(@"Shutting down afs");
--			[afsMngr shutdown];
-+		    //shutdown afs
-+		    NSLog(@"Shutting down afs");
-+		    [afsMngr shutdown];
- 		} else {
--			//Start afs
--			NSLog(@"Starting up afs");
--			[afsMngr startup];
-+		    //Start afs
-+		    NSLog(@"Starting up afs");
-+		    [afsMngr startup];
- 		}
-+	    }
- 	}@catch (NSException * e) {
- 		NSLog(@"error %@", [e reason]);
- 	}@finally {
- 		[self updateAfsStatus:nil];
-+		[[AuthUtil shared] deautorize];
- 		//Send notification to preferencepane
- 		[[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAfsCommanderID object:kMenuExtraEventOccured];
- 	}
-@@ -525,53 +529,6 @@
- 	else return NSOffState;
- }
- 
--// -------------------------------------------------------------------------------
--//  repairHelperTool:
--// -------------------------------------------------------------------------------
--- (void) repairHelperTool
--{
--	struct stat st;
--    int fdTool;
--	int status = 0; 
--	NSString *afshlpPath = [[NSBundle mainBundle] pathForResource:@"afshlp" ofType:nil];
--	
--	
--    
--    // Open tool exclusively, so nobody can change it while we bless it.
--    fdTool = open([afshlpPath UTF8String], O_NONBLOCK | O_RDONLY | O_EXLOCK, 0);
--    
--    if(fdTool == -1)
--    {
--        NSLog(@"Exclusive open while repairing tool failed: %d.", errno);
--        exit(-1);
--    }
--    
--    if(fstat(fdTool, &st))
--    {
--        NSLog(@"fstat failed.");
--        exit(-1);
--    }
--    
--    if(st.st_uid != 0)
--    {
--		status = [[AuthUtil shared] autorize];
--		if(status == noErr){
--			fchown(fdTool, 0, st.st_gid);
--			
--			// Disable group and world writability and make setuid root.
--			fchmod(fdTool, (st.st_mode & (~(S_IWGRP | S_IWOTH)))/* | S_ISUID*/);
--			const char *args[] = {"root", [afshlpPath UTF8String],0L};
--			[[AuthUtil shared] execUnixCommand:"/usr/sbin/chown" 
--										  args:args
--										output:nil];
--			[[AuthUtil shared] deautorize];
--		}
--    } else  NSLog(@"st_uid = 0");
--    close(fdTool);
--    NSLog(@"Self-repair done.");
--	
--}
--
- #pragma mark accessor
- // -------------------------------------------------------------------------------
- //  statusItem
-diff --git a/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSMenuExtra.h b/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSMenuExtra.h
-index 1c41e24..54487b3 100644
---- a/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSMenuExtra.h
-+++ b/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSMenuExtra.h
-@@ -52,6 +52,5 @@
- - (NSImage*)getImageFromBundle:(NSString*)fileName fileExt:(NSString*)ext;
- - (NSImage*)imageToRender;
- - (void)updateMenu;
--- (void)repairHelperTool;
- - (void) afsVolumeMountChange:(NSNotification *)notification;
- @end
-diff --git a/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSMenuExtra.m b/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSMenuExtra.m
-index 0073a31..3816862 100644
---- a/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSMenuExtra.m
-+++ b/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSMenuExtra.m
-@@ -177,62 +177,6 @@
- }
- 
- // -------------------------------------------------------------------------------
--//  -(void) readPreferenceFile
--// -------------------------------------------------------------------------------
--- (void)startStopAfs:(id)sender
--{
--	if(!afsSysPath) return;
--	
--	OSStatus status = noErr;
--	NSString *afsdPath = [TaskUtil searchExecutablePath:@"afsd"];
--	NSString *rootHelperApp = nil;
--	BOOL currentAfsState = NO;
--	
--	@try {
--		if(afsdPath == nil) return;
--		AFSPropertyManager *afsMngr = [[AFSPropertyManager alloc] initWithAfsPath:afsSysPath];
--		currentAfsState = [afsMngr checkAfsStatus];
--		[afsMngr release];
--		
--		rootHelperApp = [[self bundle] pathForResource:@"afshlp" ofType:@""];
--
--		//Check helper app
--		[self repairHelperTool];
--		
--		// make the parameter to call the root helper app
--		status = [[AuthUtil shared] autorize];
--		if(status == noErr){
--			if(currentAfsState){
--				//shutdown afs
--				NSMutableString *afsKextPath = [[NSMutableString alloc] initWithCapacity:256];
--				[afsKextPath setString:afsSysPath];
--				[afsKextPath appendString:@"/etc/afs.kext"];
--				
--				const char *stopAfsArgs[] = {"stop_afs", [afsKextPath  UTF8String], [afsdPath UTF8String], 0L};
--				[[AuthUtil shared] execUnixCommand:[rootHelperApp UTF8String] 
--											  args:stopAfsArgs
--											output:nil];
--			} else {
--				const char *startAfsArgs[] = {[[[self bundle] pathForResource:@"start_afs" ofType:@"sh"]  UTF8String], [afsSysPath UTF8String], [afsdPath UTF8String], 0L};
--				[[AuthUtil shared] execUnixCommand:[rootHelperApp UTF8String] 
--											  args:startAfsArgs
--											output:nil];
--			}
--		}
--	}
--	@catch (NSException * e) {
--		NSLog([e reason]);
--	}
--	@finally {
--		[[AuthUtil shared] deautorize];
--		[self updateAfsStatus:nil];
--		//Send notification to preferencepane
--		[[NSDistributedNotificationCenter defaultCenter] postNotificationName:afsCommanderID object:kMenuExtraEventOccured];
--	}
--	
--}
--
--// -------------------------------------------------------------------------------
- //  -(void) getToken
- // -------------------------------------------------------------------------------
- - (void)getToken:(id)sender
-@@ -368,53 +312,4 @@
- 	if(useAklogPrefValue) return [useAklogPrefValue intValue] == NSOnState; 
- 	else return NSOffState;
- }
--
--// -------------------------------------------------------------------------------
--//  repairHelperTool:
--// -------------------------------------------------------------------------------
--- (void) repairHelperTool
--{
--	struct stat st;
--    int fdTool;
--	int status = 0; 
--	NSString *afshlpPath = [[self bundle] pathForResource:@"afshlp" ofType:nil];
--	
--	
--    
--    // Open tool exclusively, so nobody can change it while we bless it.
--    fdTool = open([afshlpPath UTF8String], O_NONBLOCK | O_RDONLY | O_EXLOCK, 0);
--    
--    if(fdTool == -1)
--    {
--        NSLog(@"Exclusive open while repairing tool failed: %d.", errno);
--        exit(-1);
--    }
--    
--    if(fstat(fdTool, &st))
--    {
--        NSLog(@"fstat failed.");
--        exit(-1);
--    }
--    
--    if(st.st_uid != 0)
--    {
--		status = [[AuthUtil shared] autorize];
--		if(status == noErr){
--			fchown(fdTool, 0, st.st_gid);
--			
--			// Disable group and world writability and make setuid root.
--			fchmod(fdTool, (st.st_mode & (~(S_IWGRP | S_IWOTH)))/* | S_ISUID*/);
--			const char *args[] = {"root", [afshlpPath UTF8String],0L};
--			[[AuthUtil shared] execUnixCommand:"/usr/sbin/chown" 
--										  args:args
--										output:nil];
--			[[AuthUtil shared] deautorize];
--		}
--    } else  NSLog(@"st_uid = 0");
--    
--	
--    
--    close(fdTool);
--    NSLog(@"Self-repair done.");
--	
--}@end
-+@end
-diff --git a/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSMenuExtraView.h b/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSMenuExtraView.h
-index 915dc2f..6d1ce18 100644
---- a/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSMenuExtraView.h
-+++ b/src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSMenuExtraView.h
-@@ -9,7 +9,7 @@
- #import <Cocoa/Cocoa.h>
- #import "AFSBackgrounderDelegate.h"
- 
--@interface AFSMenuExtraView : NSView {
-+@interface AFSMenuExtraView : NSView <NSMenuDelegate> {
- 	AFSBackgrounderDelegate 	*backgrounderDelegator;
- 	NSStatusItem 	*statusItem;
- 	NSMenu	*statusItemMenu;
-diff --git a/src/platform/DARWIN/AFSPreference/AFSCommanderPref.h b/src/platform/DARWIN/AFSPreference/AFSCommanderPref.h
-index a9f1cad..7666255 100644
---- a/src/platform/DARWIN/AFSPreference/AFSCommanderPref.h
-+++ b/src/platform/DARWIN/AFSPreference/AFSCommanderPref.h
-@@ -7,6 +7,7 @@
- //
- 
- #import <PreferencePanes/PreferencePanes.h>
-+#import <SecurityInterface/SFAuthorizationView.h>
- #import "AFSPropertyManager.h"
- #import "global.h"
- #import "ViewUtility.h"
-@@ -20,12 +21,13 @@ int CoreMenuExtraRemoveMenuExtra(void *menuExtra, int whoCares);
- 
- 
- 
--@interface AFSCommanderPref : NSPreferencePane 
-+@interface AFSCommanderPref : NSPreferencePane <NSTableViewDataSource, NSTableViewDelegate>
- {
- 	//for check system version
- 	int prefStartUp;
- 	// Main View
- 	BOOL startAFSAtLogin;
-+    IBOutlet SFAuthorizationView *authView;
- 	IBOutlet NSView *afsCommanderView;
- 	IBOutlet NSSearchField *textSearchField;
- 	IBOutlet NSTextField *afsDefaultCellLabel;
-@@ -104,6 +106,7 @@ int CoreMenuExtraRemoveMenuExtra(void *menuExtra, int whoCares);
- 	NSLock *tokensLock;
- }
- 
-+- (BOOL)isUnlocked;
- - (void) mainViewDidLoad;
- - (void) willUnselect;
- - (void) didSelect;
-@@ -144,11 +147,8 @@ int CoreMenuExtraRemoveMenuExtra(void *menuExtra, int whoCares);
- - (void) modifyCell:(DBCellElement*) cellElement;
- - (void) modifyCellByIDX:(int) idx;
- - (void) showMessage:(NSString*) message;
--- (void) tableViewCellmanageButtonState:(int) rowSelected;
--- (void) tableViewLinkmanageButtonState:(NSIndexSet *) rowsSelectedIndex;
- - (void) setAfsStatus;
- - (void) refreshTokens:(NSTimer*)theTimer;
--- (void) repairHelperTool;
- - (void) writePreferenceFile;
- - (void) readPreferenceFile;
- - (void) refreshGui:(NSNotification *)notification;
-@@ -157,8 +157,13 @@ int CoreMenuExtraRemoveMenuExtra(void *menuExtra, int whoCares);
- - (void)tabView:(NSTabView *)tabView willSelectTabViewItem: (NSTabViewItem *)tabViewItem;
- @end
- 
-+@interface AFSCommanderPref (TableDelegate)
-+- (void) tableViewCellmanageButtonState:(int) rowSelected;
-+- (void) tableViewLinkmanageButtonState:(NSIndexSet *) rowsSelectedIndex;
-+@end;
-+
- @interface AFSCommanderPref (NSTableDataSource)
- - (id) getTableTokensListValue:(int) colId row:(int)row;
- - (id) getTableCelListValue:(int) colId row:(int)row;
- - (id) getTableLinkValue:(int) colId row:(int)row;
--@end;
-\ No newline at end of file
-+@end;
-diff --git a/src/platform/DARWIN/AFSPreference/AFSCommanderPref.m b/src/platform/DARWIN/AFSPreference/AFSCommanderPref.m
-index dcc7344..dd6d9bf 100644
---- a/src/platform/DARWIN/AFSPreference/AFSCommanderPref.m
-+++ b/src/platform/DARWIN/AFSPreference/AFSCommanderPref.m
-@@ -58,7 +58,7 @@
- {
-     if ( ( self = [super initWithBundle:bundle] ) != nil ) {
-         //appID = kAfsCommanderID;
--		prefStartUp = 1;
-+	prefStartUp = 1;
-     }
-     return self;
- }
-@@ -67,16 +67,16 @@
- //  mainView:
- // -------------------------------------------------------------------------------
- - (NSView *) mainView {
--	if (prefStartUp == 1){
--		SInt32 osxMJVers = 0;
--		SInt32 osxMnVers = 0;
--		if (Gestalt(gestaltSystemVersionMajor, &osxMJVers) == noErr && Gestalt(gestaltSystemVersionMinor, &osxMnVers) == noErr) {
--			if (osxMJVers == 10 && osxMnVers>= 5) {
--				[afsCommanderView  setFrameSize:NSMakeSize(668, [afsCommanderView frame].size.height)];
-+    if (prefStartUp == 1){
-+	SInt32 osxMJVers = 0;
-+	SInt32 osxMnVers = 0;
-+	if (Gestalt(gestaltSystemVersionMajor, &osxMJVers) == noErr && Gestalt(gestaltSystemVersionMinor, &osxMnVers) == noErr) {
-+	    if (osxMJVers == 10 && osxMnVers>= 5) {
-+		[afsCommanderView  setFrameSize:NSMakeSize(668, [afsCommanderView frame].size.height)];
-                 prefStartUp = 0;
--			}
--		}
-+	    }
- 	}
-+    }
- 	
-     return afsCommanderView;
- }
-@@ -86,12 +86,17 @@
- // -------------------------------------------------------------------------------
- - (void) mainViewDidLoad
- {
--	//CellServDB Table
--	[((NSTableView*)cellList) setDelegate:self];
--	[((NSTableView*)cellList) setTarget:self];
--	[((NSTableView*)cellList) setDoubleAction:@selector(tableDoubleAction:)];
--	
--	
-+    //CellServDB Table
-+    [cellList setDelegate:self];
-+    [cellList setTarget:self];
-+    [cellList setDoubleAction:@selector(tableDoubleAction:)];
-+
-+    // Setup security.
-+    AuthorizationItem items = {kAuthorizationRightExecute, 0, NULL, 0};
-+    AuthorizationRights rights = {1, &items};
-+    [authView setAuthorizationRights:&rights];
-+    authView.delegate = self;
-+    [authView updateStatus:nil];
- }
- 
- // -------------------------------------------------------------------------------
-@@ -99,102 +104,102 @@
- // -------------------------------------------------------------------------------
- - (void) didSelect
- {
--	//try to install the launchd file for backgrounder
--	//Remove launchd ctrl file
--	@try {
--		[PListManager installBackgrounderLaunchdFile:YES 
--										resourcePath:[[self bundle] resourcePath]];
--	}
--	@catch (NSException * e) {
--		NSDictionary *excecptDic = [e userInfo];
--		NSNumber *keyNum = [excecptDic objectForKey:@"agent_folder_error"];
--		if(keyNum && [keyNum boolValue]) {
--			// the dir HOME_LAUNCHD_AGENT_FOLDER (PListManager.h) must be created
--			NSBeginAlertSheet([[NSString stringWithString:kDoYouWantCreateTheDirectory] stringByAppendingString:HOME_LAUNCHD_AGENT_FOLDER],
--							  @"Create", @"Cancel", nil,										
--							  [[self mainView] window],	self, @selector(credentialAtLoginTimeEventCreationLaunchAgentDir:returnCode:contextInfo:), NULL, 
--							  nil, @"", nil);
--		}
--	}
--	@finally {
--		
-+    //try to install the launchd file for backgrounder
-+    //Remove launchd ctrl file
-+    @try {
-+	[PListManager installBackgrounderLaunchdFile:YES
-+		      resourcePath:[[self bundle] resourcePath]];
-+    }
-+    @catch (NSException * e) {
-+	NSDictionary *excecptDic = [e userInfo];
-+	NSNumber *keyNum = [excecptDic objectForKey:@"agent_folder_error"];
-+	if(keyNum && [keyNum boolValue]) {
-+	    // the dir HOME_LAUNCHD_AGENT_FOLDER (PListManager.h) must be created
-+	    NSBeginAlertSheet([[NSString stringWithString:kDoYouWantCreateTheDirectory] stringByAppendingString:HOME_LAUNCHD_AGENT_FOLDER],
-+			      @"Create", @"Cancel", nil,
-+			      [[self mainView] window],	self, @selector(credentialAtLoginTimeEventCreationLaunchAgentDir:returnCode:contextInfo:), NULL,
-+			      nil, @"", nil);
- 	}
-+    }
-+    @finally {
- 	
--	
--	// Set Developer info
--	[textFieldDevInfoLabel setStringValue:kDevelopInfo];
--	// creating the lock
--	tokensLock = [[NSLock alloc] init];
--	
--	//Initialization cellservdb and token list
--	filteredCellDB = nil;
--	tokenList = nil;
--	
--	[self readPreferenceFile];
--			
--	// alloc the afs property mananger
--	afsProperty = [[AFSPropertyManager alloc] init];
--	
--	// register preference pane to detect menuextra killed by user
--	[[NSDistributedNotificationCenter defaultCenter] addObserver:self
--														selector:@selector(refreshTokensNotify:)
--															name:kAfsCommanderID
--														  object:kMExtraTokenOperation];
--	 
--	[[NSDistributedNotificationCenter defaultCenter] addObserver:self 
--														selector:@selector(refreshGui:) 
--															name:kAfsCommanderID 
--														  object:kMenuExtraEventOccured];
--	
--	//Register for mount/unmount afs volume
--	[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self 
--														   selector:@selector(afsVolumeMountChange:) 
--															   name:NSWorkspaceDidMountNotification object:nil];
--	
--	[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self 
--														   selector:@selector(afsVolumeMountChange:) 
--															   name:NSWorkspaceDidUnmountNotification object:nil];
--	
--	// set self as table data source
--	[cellList setDataSource:self];
--	[tokensTable setDataSource:self];
--	//[tableViewLink setDataSource:self];
--	//check the afs state
--	[self setAfsStatus];
--	
--	// let show the configuration after prefpane is open
--	[self refreshConfiguration:nil];
--	
--	// refresh the token list
--	//[self refreshTokens:nil];
--	
--	//refresh table to reflect the NSSearchField contained text
--	[self searchCellTextEvent:nil];
-+    }
-+
-+
-+    // Set Developer info
-+    [textFieldDevInfoLabel setStringValue:kDevelopInfo];
-+    // creating the lock
-+    tokensLock = [[NSLock alloc] init];
-+
-+    //Initialization cellservdb and token list
-+    filteredCellDB = nil;
-+    tokenList = nil;
-+
-+    [self readPreferenceFile];
-+
-+    // alloc the afs property mananger
-+    afsProperty = [[AFSPropertyManager alloc] init];
-+
-+    // register preference pane to detect menuextra killed by user
-+    [[NSDistributedNotificationCenter defaultCenter] addObserver:self
-+						     selector:@selector(refreshTokensNotify:)
-+						     name:kAfsCommanderID
-+						     object:kMExtraTokenOperation];
-+
-+    [[NSDistributedNotificationCenter defaultCenter] addObserver:self
-+						     selector:@selector(refreshGui:)
-+						     name:kAfsCommanderID
-+						     object:kMenuExtraEventOccured];
-+
-+    //Register for mount/unmount afs volume
-+    [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
-+							selector:@selector(afsVolumeMountChange:)
-+							name:NSWorkspaceDidMountNotification object:nil];
-+
-+    [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
-+							selector:@selector(afsVolumeMountChange:)
-+							name:NSWorkspaceDidUnmountNotification object:nil];
-+
-+    // set self as table data source
-+    [cellList setDataSource:self];
-+    [tokensTable setDataSource:self];
-+    //[tableViewLink setDataSource:self];
-+    //check the afs state
-+    [self setAfsStatus];
-+
-+    // let show the configuration after prefpane is open
-+    [self refreshConfiguration:nil];
-+
-+    // refresh the token list
-+    //[self refreshTokens:nil];
-+
-+    //refresh table to reflect the NSSearchField contained text
-+    [self searchCellTextEvent:nil];
- }
- 
- // -------------------------------------------------------------------------------
- //  credentialAtLoginTimeEventCreationLaunchAgentDir:
- // -------------------------------------------------------------------------------
- - (void) credentialAtLoginTimeEventCreationLaunchAgentDir:(NSWindow*)alert returnCode:(int)returnCode contextInfo:(void *)contextInfo {
--	[alert close];
--	switch (returnCode) {
--		case  1:
--			if([[NSFileManager defaultManager] createDirectoryAtPath:[HOME_LAUNCHD_AGENT_FOLDER stringByExpandingTildeInPath] 
--										 withIntermediateDirectories:NO
--														  attributes:nil
--															   error:nil]) {
--				
--				//Create the file
--				[PListManager installBackgrounderLaunchdFile:YES
--												resourcePath:[[self bundle] resourcePath]];
--				[self showMessage:kDirectoryCreated];
--			} else {
--				[self showMessage:kErrorCreatingDirectory];
--			}
--			break;
--		case 0:
--			break;
-+    [alert close];
-+    switch (returnCode) {
-+    case  1:
-+	if([[NSFileManager defaultManager] createDirectoryAtPath:[HOME_LAUNCHD_AGENT_FOLDER stringByExpandingTildeInPath]
-+					   withIntermediateDirectories:NO
-+					   attributes:nil
-+					   error:nil]) {
-+
-+	    //Create the file
-+	    [PListManager installBackgrounderLaunchdFile:YES
-+			  resourcePath:[[self bundle] resourcePath]];
-+	    [self showMessage:kDirectoryCreated];
-+	} else {
-+	    [self showMessage:kErrorCreatingDirectory];
- 	}
-+	break;
-+    case 0:
-+	break;
-+    }
- }
- 
- 
-@@ -203,36 +208,36 @@
- // -------------------------------------------------------------------------------
- - (void)willUnselect
- {
--	// remove self as datasource
--	[((NSTableView*)cellList) setDataSource:nil];
--	[((NSTableView*)tokensTable) setDataSource:nil];
--
--	//release the afs property manager
--	if(afsProperty) [afsProperty release];
--	//release tokens list
--	if(tokenList) [tokenList release];	
--	//Remove the cell temp array
--	if(filteredCellDB) [filteredCellDB release];
--	
--	[self writePreferenceFile];
--	
--	// unregister preference pane to detect menuextra killed by user
--	[[NSDistributedNotificationCenter defaultCenter] removeObserver:self
--															   name:kAfsCommanderID
--															 object:kMExtraClosedNotification];
--	[[NSDistributedNotificationCenter defaultCenter] removeObserver:self
--															   name:kAfsCommanderID
--															 object:kMExtraTokenOperation];
--	[[NSDistributedNotificationCenter defaultCenter] removeObserver:self
--															   name:kAfsCommanderID
--															 object:kMenuExtraEventOccured];
--	[[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self 
--																  name:NSWorkspaceDidMountNotification object:nil];
--	[[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self 
--																  name:NSWorkspaceDidUnmountNotification object:nil];
--	
--	[self stopTimer];
--	[tokensLock release];
-+    // remove self as datasource
-+    [cellList setDataSource:nil];
-+    [tokensTable setDataSource:nil];
-+
-+    //release the afs property manager
-+    if(afsProperty) [afsProperty release];
-+    //release tokens list
-+    if(tokenList) [tokenList release];
-+    //Remove the cell temp array
-+    if(filteredCellDB) [filteredCellDB release];
-+
-+    [self writePreferenceFile];
-+
-+    // unregister preference pane to detect menuextra killed by user
-+    [[NSDistributedNotificationCenter defaultCenter] removeObserver:self
-+						     name:kAfsCommanderID
-+						     object:kMExtraClosedNotification];
-+    [[NSDistributedNotificationCenter defaultCenter] removeObserver:self
-+						     name:kAfsCommanderID
-+						     object:kMExtraTokenOperation];
-+    [[NSDistributedNotificationCenter defaultCenter] removeObserver:self
-+						     name:kAfsCommanderID
-+						     object:kMenuExtraEventOccured];
-+    [[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self
-+							name:NSWorkspaceDidMountNotification object:nil];
-+    [[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self
-+							name:NSWorkspaceDidUnmountNotification object:nil];
-+
-+    [self stopTimer];
-+    [tokensLock release];
- }
- 
- 
-@@ -240,23 +245,23 @@
- //  startTimer:
- // -------------------------------------------------------------------------------
- - (void)startTimer{
--	//start the time for check tokens validity
--	if(timerForCheckTokensList) return;
--	timerForCheckTokensList = [NSTimer scheduledTimerWithTimeInterval:TOKENS_REFRESH_TIME_IN_SEC 
--															   target:self 
--															 selector:@selector(refreshTokens:) 
--															 userInfo:nil 
--															  repeats:YES];
--	[timerForCheckTokensList fire];	
-+    //start the time for check tokens validity
-+    if(timerForCheckTokensList) return;
-+    timerForCheckTokensList = [NSTimer scheduledTimerWithTimeInterval:TOKENS_REFRESH_TIME_IN_SEC
-+				       target:self
-+				       selector:@selector(refreshTokens:)
-+				       userInfo:nil
-+				       repeats:YES];
-+    [timerForCheckTokensList fire];
- }
- 
- // -------------------------------------------------------------------------------
- //  stopTimer:
- // -------------------------------------------------------------------------------
- - (void)stopTimer{
--	if(!timerForCheckTokensList) return;
--	[timerForCheckTokensList invalidate];	
--	timerForCheckTokensList = nil;
-+    if(!timerForCheckTokensList) return;
-+    [timerForCheckTokensList invalidate];
-+    timerForCheckTokensList = nil;
- }
- 
- 
-@@ -265,73 +270,72 @@
- // -------------------------------------------------------------------------------
- - (void) readPreferenceFile
- {
--	// read the preference for aklog use
--	NSNumber *useAklogPrefValue = (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_USE_AKLOG, (CFStringRef)kAfsCommanderID,  
--																	kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--	NSNumber *aklogTokenAtLogin = (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_AKLOG_TOKEN_AT_LOGIN, (CFStringRef)kAfsCommanderID,  
--																	kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--	[useAklogCheck setState:[useAklogPrefValue intValue]];
--	[aklogCredentialAtLoginTime setEnabled:useAklogPrefValue && [useAklogPrefValue boolValue]];
--	[aklogCredentialAtLoginTime setState:aklogTokenAtLogin && [aklogTokenAtLogin boolValue]];
--
--	//check krb5 at login time
--	[installKRB5AuthAtLoginButton setState:[PListManager checkKrb5AtLoginTimeLaunchdEnable]];
--
--	//check for AFS enable at startup
--	NSNumber *afsEnableStartupTime = (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_START_AFS_AT_STARTUP,
--																	   (CFStringRef)kAfsCommanderID,  kCFPreferencesAnyUser, kCFPreferencesAnyHost);
--	if(afsEnableStartupTime)
--		startAFSAtLogin = [afsEnableStartupTime boolValue];
--	else 
--		startAFSAtLogin = false;
--	//set the check button state
--	[checkButtonAfsAtBootTime setState:startAFSAtLogin];
--	
--	NSNumber *showStatusMenu =  (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_SHOW_STATUS_MENU,  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--	[(NSButton*)afsMenucheckBox setState: [showStatusMenu boolValue]];
--	
--	//backgrounder state
--	[backgrounderActivationCheck setState:[PListManager launchdJobState:BACKGROUNDER_P_FILE]];
--	
--	//link enabled status
--	NSNumber *linkEnabledStatus =  (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_USE_LINK,  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--	[checkEnableLink setState:[linkEnabledStatus boolValue]];
--	
--	//check the user preference for manage the renew
--	NSNumber *checkRenew =  (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_KRB5_CHECK_ENABLE,  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--	if(checkRenew)[nsButtonEnableDisableKrb5RenewCheck setState:[checkRenew intValue]];
--
--	NSNumber *renewTime = (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_KRB5_RENEW_TIME,  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--	if(!renewTime) renewTime = [NSNumber numberWithInt:PREFERENCE_KRB5_RENEW_TIME_DEFAULT_VALUE];
--
--		//update gui
--	NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
--	NSDateComponents *weekdayComponents = [gregorian components:(NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) 
--													   fromDate:[NSDate dateWithTimeIntervalSince1970:[renewTime intValue]]];
--	[nsTextFieldKrb5RenewTimeD setIntValue:[weekdayComponents day]-1];
--	[nsTextFieldKrb5RenewTimeH setIntValue:[weekdayComponents hour]-1];
--	[nsTextFieldKrb5RenewTimeM setIntValue:[weekdayComponents minute]];
--	[nsTextFieldKrb5RenewTimeS setIntValue:[weekdayComponents second]];
--	[nsStepperKrb5RenewTimeD setIntValue:[weekdayComponents day]-1];
--	[nsStepperKrb5RenewTimeH setIntValue:[weekdayComponents hour]-1];
--	[nsStepperKrb5RenewTimeM setIntValue:[weekdayComponents minute]];
--	[nsStepperKrb5RenewTimeS setIntValue:[weekdayComponents second]];
--
--	NSNumber *renewCheckTimeInterval = (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_KRB5_RENEW_CHECK_TIME_INTERVALL,  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--	if(renewCheckTimeInterval && [renewCheckTimeInterval intValue])[nsTextFieldKrb5RenewCheckIntervall setIntValue:[renewCheckTimeInterval intValue]];
--	else [nsTextFieldKrb5RenewCheckIntervall setIntValue:PREFERENCE_KRB5_RENEW_CHECK_TIME_INTERVALL_DEFAULT_VALUE];
--
--	NSNumber *expireTimeForRenew = (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_KRB5_SEC_TO_EXPIRE_TIME_FOR_RENEW,  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--	if(expireTimeForRenew && [expireTimeForRenew intValue])[nsTextFieldKrb5SecToExpireDateForRenew setIntValue:[expireTimeForRenew intValue]];
--	else [nsTextFieldKrb5SecToExpireDateForRenew setIntValue:PREFERENCE_KRB5_SEC_TO_EXPIRE_TIME_FOR_RENEW_DEFAULT_VALUE];
--
--	//link configuration
--	NSData *prefData = (NSData*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_LINK_CONFIGURATION,  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--	linkConfiguration = (NSMutableDictionary*)[NSPropertyListSerialization propertyListFromData:prefData
--																			   mutabilityOption:NSPropertyListMutableContainers
--																						 format:nil
--																			   errorDescription:nil];
--	
-+    // read the preference for aklog use
-+    NSNumber *useAklogPrefValue = (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_USE_AKLOG, (CFStringRef)kAfsCommanderID,
-+								    kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+    NSNumber *aklogTokenAtLogin = (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_AKLOG_TOKEN_AT_LOGIN, (CFStringRef)kAfsCommanderID,
-+								    kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+    [useAklogCheck setState:[useAklogPrefValue intValue]];
-+    [aklogCredentialAtLoginTime setEnabled:useAklogPrefValue && [useAklogPrefValue boolValue]];
-+    [aklogCredentialAtLoginTime setState:aklogTokenAtLogin && [aklogTokenAtLogin boolValue]];
-+
-+    //check krb5 at login time
-+    [installKRB5AuthAtLoginButton setState:[PListManager checkKrb5AtLoginTimeLaunchdEnable]];
-+
-+    //check for AFS enable at startup
-+    NSNumber *afsEnableStartupTime = (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_START_AFS_AT_STARTUP,
-+								       (CFStringRef)kAfsCommanderID,  kCFPreferencesAnyUser, kCFPreferencesAnyHost);
-+    if(afsEnableStartupTime)
-+	startAFSAtLogin = [afsEnableStartupTime boolValue];
-+    else
-+	startAFSAtLogin = false;
-+    //set the check button state
-+    [checkButtonAfsAtBootTime setState:startAFSAtLogin];
-+
-+    NSNumber *showStatusMenu =  (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_SHOW_STATUS_MENU,  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+    [(NSButton*)afsMenucheckBox setState: [showStatusMenu boolValue]];
-+
-+    //backgrounder state
-+    [backgrounderActivationCheck setState:[PListManager launchdJobState:BACKGROUNDER_P_FILE]];
-+
-+    //link enabled status
-+    NSNumber *linkEnabledStatus =  (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_USE_LINK,  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+    [checkEnableLink setState:[linkEnabledStatus boolValue]];
-+
-+    //check the user preference for manage the renew
-+    NSNumber *checkRenew =  (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_KRB5_CHECK_ENABLE,  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+    if(checkRenew)[nsButtonEnableDisableKrb5RenewCheck setState:[checkRenew intValue]];
-+
-+    NSNumber *renewTime = (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_KRB5_RENEW_TIME,  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+    if(!renewTime) renewTime = [NSNumber numberWithInt:PREFERENCE_KRB5_RENEW_TIME_DEFAULT_VALUE];
-+
-+    //update gui
-+    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
-+    NSDateComponents *weekdayComponents = [gregorian components:(NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit)
-+						     fromDate:[NSDate dateWithTimeIntervalSince1970:[renewTime intValue]]];
-+    [nsTextFieldKrb5RenewTimeD setIntValue:[weekdayComponents day]-1];
-+    [nsTextFieldKrb5RenewTimeH setIntValue:[weekdayComponents hour]-1];
-+    [nsTextFieldKrb5RenewTimeM setIntValue:[weekdayComponents minute]];
-+    [nsTextFieldKrb5RenewTimeS setIntValue:[weekdayComponents second]];
-+    [nsStepperKrb5RenewTimeD setIntValue:[weekdayComponents day]-1];
-+    [nsStepperKrb5RenewTimeH setIntValue:[weekdayComponents hour]-1];
-+    [nsStepperKrb5RenewTimeM setIntValue:[weekdayComponents minute]];
-+    [nsStepperKrb5RenewTimeS setIntValue:[weekdayComponents second]];
-+
-+    NSNumber *renewCheckTimeInterval = (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_KRB5_RENEW_CHECK_TIME_INTERVALL,  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+    if(renewCheckTimeInterval && [renewCheckTimeInterval intValue])[nsTextFieldKrb5RenewCheckIntervall setIntValue:[renewCheckTimeInterval intValue]];
-+    else [nsTextFieldKrb5RenewCheckIntervall setIntValue:PREFERENCE_KRB5_RENEW_CHECK_TIME_INTERVALL_DEFAULT_VALUE];
-+
-+    NSNumber *expireTimeForRenew = (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_KRB5_SEC_TO_EXPIRE_TIME_FOR_RENEW,  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+    if(expireTimeForRenew && [expireTimeForRenew intValue])[nsTextFieldKrb5SecToExpireDateForRenew setIntValue:[expireTimeForRenew intValue]];
-+    else [nsTextFieldKrb5SecToExpireDateForRenew setIntValue:PREFERENCE_KRB5_SEC_TO_EXPIRE_TIME_FOR_RENEW_DEFAULT_VALUE];
-+
-+    //link configuration
-+    NSData *prefData = (NSData*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_LINK_CONFIGURATION,  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+    linkConfiguration = (NSMutableDictionary*)[NSPropertyListSerialization propertyListFromData:prefData
-+									   mutabilityOption:NSPropertyListMutableContainers
-+									   format:nil
-+									   errorDescription:nil];
- }
- 
- // -------------------------------------------------------------------------------
-@@ -339,56 +343,56 @@
- // -------------------------------------------------------------------------------
- - (void) writePreferenceFile
- {
--	//Set the preference for afs path
--	//Set the preference for aklog use
--	CFPreferencesSetValue((CFStringRef)PREFERENCE_USE_AKLOG, 
--						  (CFNumberRef)[NSNumber numberWithInt:[useAklogCheck state]], 
--						  (CFStringRef)kAfsCommanderID, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--
--	//set AFS enable state at startup
--	CFPreferencesSetValue((CFStringRef)PREFERENCE_START_AFS_AT_STARTUP, 
--						  (CFNumberRef)[NSNumber numberWithBool:startAFSAtLogin], 
--						  (CFStringRef)kAfsCommanderID, kCFPreferencesAnyUser, kCFPreferencesAnyHost);
--	
--	//set aklog at login
--	CFPreferencesSetValue((CFStringRef)PREFERENCE_AKLOG_TOKEN_AT_LOGIN, 
--						  (CFNumberRef)[NSNumber numberWithBool:[aklogCredentialAtLoginTime state]], 
--						  (CFStringRef)kAfsCommanderID, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--	
--	//set aklog at login
--	CFPreferencesSetValue((CFStringRef)PREFERENCE_SHOW_STATUS_MENU, 
--						  (CFNumberRef)[NSNumber numberWithBool:[(NSButton*)afsMenucheckBox state]],
--						  (CFStringRef)kAfsCommanderID, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--	
--	//preference for link
--	CFPreferencesSetValue((CFStringRef)PREFERENCE_USE_LINK,
--						  (CFNumberRef)[NSNumber numberWithBool:[checkEnableLink state]], 
--						  (CFStringRef)kAfsCommanderID, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--	
--		//preference for renew time
--	NSLog(@"%d %d %d %d", [nsTextFieldKrb5RenewTimeD intValue],[nsTextFieldKrb5RenewTimeH intValue],[nsTextFieldKrb5RenewTimeM intValue],[nsTextFieldKrb5RenewTimeS intValue]);
--	NSInteger totalSeconds =	([nsTextFieldKrb5RenewTimeD intValue]*24*60*60)+
--								([nsTextFieldKrb5RenewTimeH intValue]*60*60)+
--								([nsTextFieldKrb5RenewTimeM intValue]*60)+
--								[nsTextFieldKrb5RenewTimeS intValue];
--
--	CFPreferencesSetValue((CFStringRef)PREFERENCE_KRB5_RENEW_TIME,
--						  (CFNumberRef)[NSNumber numberWithInt:totalSeconds],
--						  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--
--		//expire time for renew
--	CFPreferencesSetValue((CFStringRef)PREFERENCE_KRB5_SEC_TO_EXPIRE_TIME_FOR_RENEW,
--						  (CFNumberRef)[NSNumber numberWithInt:[nsTextFieldKrb5SecToExpireDateForRenew intValue]],
--						  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--
--		//sec to expiretime for renew job
--	CFPreferencesSetValue((CFStringRef)PREFERENCE_KRB5_RENEW_CHECK_TIME_INTERVALL,
--						  (CFNumberRef)[NSNumber numberWithInt:[nsTextFieldKrb5RenewCheckIntervall intValue]],
--						  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--
--	CFPreferencesSynchronize((CFStringRef)kAfsCommanderID,  kCFPreferencesAnyUser, kCFPreferencesAnyHost);
--	CFPreferencesSynchronize((CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--	[[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAFSMenuExtraID object:kPrefChangeNotification];
-+    //Set the preference for afs path
-+    //Set the preference for aklog use
-+    CFPreferencesSetValue((CFStringRef)PREFERENCE_USE_AKLOG,
-+			  (CFNumberRef)[NSNumber numberWithInt:[useAklogCheck state]],
-+			  (CFStringRef)kAfsCommanderID, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+
-+    //set AFS enable state at startup
-+    CFPreferencesSetValue((CFStringRef)PREFERENCE_START_AFS_AT_STARTUP,
-+			  (CFNumberRef)[NSNumber numberWithBool:startAFSAtLogin],
-+			  (CFStringRef)kAfsCommanderID, kCFPreferencesAnyUser, kCFPreferencesAnyHost);
-+
-+    //set aklog at login
-+    CFPreferencesSetValue((CFStringRef)PREFERENCE_AKLOG_TOKEN_AT_LOGIN,
-+			  (CFNumberRef)[NSNumber numberWithBool:[aklogCredentialAtLoginTime state]],
-+			  (CFStringRef)kAfsCommanderID, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+
-+    //set aklog at login
-+    CFPreferencesSetValue((CFStringRef)PREFERENCE_SHOW_STATUS_MENU,
-+			  (CFNumberRef)[NSNumber numberWithBool:[(NSButton*)afsMenucheckBox state]],
-+			  (CFStringRef)kAfsCommanderID, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+
-+    //preference for link
-+    CFPreferencesSetValue((CFStringRef)PREFERENCE_USE_LINK,
-+			  (CFNumberRef)[NSNumber numberWithBool:[checkEnableLink state]],
-+			  (CFStringRef)kAfsCommanderID, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+
-+    //preference for renew time
-+    //NSLog(@"%d %d %d %d", [nsTextFieldKrb5RenewTimeD intValue],[nsTextFieldKrb5RenewTimeH intValue],[nsTextFieldKrb5RenewTimeM intValue],[nsTextFieldKrb5RenewTimeS intValue]);
-+    NSInteger totalSeconds =	([nsTextFieldKrb5RenewTimeD intValue]*24*60*60)+
-+	([nsTextFieldKrb5RenewTimeH intValue]*60*60)+
-+	([nsTextFieldKrb5RenewTimeM intValue]*60)+
-+	[nsTextFieldKrb5RenewTimeS intValue];
-+
-+    CFPreferencesSetValue((CFStringRef)PREFERENCE_KRB5_RENEW_TIME,
-+			  (CFNumberRef)[NSNumber numberWithInt:totalSeconds],
-+			  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+
-+    //expire time for renew
-+    CFPreferencesSetValue((CFStringRef)PREFERENCE_KRB5_SEC_TO_EXPIRE_TIME_FOR_RENEW,
-+			  (CFNumberRef)[NSNumber numberWithInt:[nsTextFieldKrb5SecToExpireDateForRenew intValue]],
-+			  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+
-+    //sec to expiretime for renew job
-+    CFPreferencesSetValue((CFStringRef)PREFERENCE_KRB5_RENEW_CHECK_TIME_INTERVALL,
-+			  (CFNumberRef)[NSNumber numberWithInt:[nsTextFieldKrb5RenewCheckIntervall intValue]],
-+			  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+
-+    CFPreferencesSynchronize((CFStringRef)kAfsCommanderID,  kCFPreferencesAnyUser, kCFPreferencesAnyHost);
-+    CFPreferencesSynchronize((CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+    [[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAFSMenuExtraID object:kPrefChangeNotification];
- }
- 
- // -------------------------------------------------------------------------------
-@@ -396,29 +400,25 @@
- // -------------------------------------------------------------------------------
- - (IBAction) saveConfiguration:(id) sender
- {
--	@try{
--		
--		//[afsProperty setCellName:[cellNameTextEdit stringValue]];
--		[afsProperty setCellName:[afsProperty getDefaultCellName]];
--		
--		//save configurations
--		[afsProperty saveConfigurationFiles:YES];
--		
--		
--		//Reload all configuration
--		[self refreshConfiguration:nil];
--		
--		//refresh table to reflect the NSSearchField contained text
--		[self searchCellTextEvent:nil];
-+    @try{
-+	[afsProperty setCellName:[afsProperty getDefaultCellName]];
-+
-+	//save configurations
-+	[afsProperty saveConfigurationFiles:YES];
- 		
--		//Show dialog for notifity al saving process ar gone ell
--		[self showMessage:kConfigurationSaved];
--	}@catch(NSException *e){
--		[self showMessage:[e reason]];
--	} @finally {
--		[((NSTableView*)cellList) reloadData];
--	}
-+	//Reload all configuration
-+	[self refreshConfiguration:nil];
-+
-+	//refresh table to reflect the NSSearchField contained text
-+	[self searchCellTextEvent:nil];
- 	
-+	//Show dialog for notifity al saving process ar gone ell
-+	[self showMessage:kConfigurationSaved];
-+    }@catch(NSException *e){
-+	[self showMessage:[e reason]];
-+    } @finally {
-+	[cellList reloadData];
-+    }
- }
- 
- // -------------------------------------------------------------------------------
-@@ -426,16 +426,16 @@
- // -------------------------------------------------------------------------------
- - (IBAction) saveCacheManagerParam:(id) sender
- {
--	@try{
--		//Update the value form view to afs property manager class
--		[self updateCacheParamFromView];
--		[afsProperty saveCacheConfigurationFiles:YES];
--		[self showMessage:kSavedCacheConfiguration];
--	}@catch(NSException *e){
--		[self showMessage:[e reason]];
--	} @finally {
--		[((NSTableView*)cellList) reloadData];
--	}
-+    @try{
-+	//Update the value form view to afs property manager class
-+	[self updateCacheParamFromView];
-+	[afsProperty saveCacheConfigurationFiles:YES];
-+	[self showMessage:kSavedCacheConfiguration];
-+    }@catch(NSException *e){
-+	[self showMessage:[e reason]];
-+    } @finally {
-+	[cellList reloadData];
-+    }
- }
- 
- // -------------------------------------------------------------------------------
-@@ -443,31 +443,31 @@
- // -------------------------------------------------------------------------------
- - (IBAction) refreshConfiguration:(id) sender
- {
--	NSString *afsBasePath = PREFERENCE_AFS_SYS_PAT_STATIC;
--	@try{
--		// set the afs path
--		[afsProperty setPath:afsBasePath];
--		
--		// load configuration
--		[afsProperty loadConfiguration];
--		
--		//set the afs version label
--		[afsVersionLabel setStringValue:[afsProperty getAfsVersion]];
--		
--		//set the current default cell
--		[afsDefaultCellLabel setStringValue:[afsProperty getDefaultCellName]];
--		
--		// Update cache view
--		[self fillCacheParamView];
--		
--		//Filter the cellServDb and allocate filtered array
--		[self filterCellServDB:nil];
--		
--	}@catch(NSException *e){
--		[self showMessage:[e reason]];
--	} @finally {
--		[((NSTableView*)cellList) reloadData];
--	}
-+    NSString *afsBasePath = PREFERENCE_AFS_SYS_PAT_STATIC;
-+    @try{
-+	// set the afs path
-+	[afsProperty setPath:afsBasePath];
-+
-+	// load configuration
-+	[afsProperty loadConfiguration];
-+
-+	//set the afs version label
-+	[afsVersionLabel setStringValue:[afsProperty getAfsVersion]];
-+
-+	//set the current default cell
-+	[afsDefaultCellLabel setStringValue:[afsProperty getDefaultCellName]];
-+
-+	// Update cache view
-+	[self fillCacheParamView];
-+
-+	//Filter the cellServDb and allocate filtered array
-+	[self filterCellServDB:nil];
-+
-+    }@catch(NSException *e){
-+	[self showMessage:[e reason]];
-+    } @finally {
-+	[cellList reloadData];
-+    }
- }
- 
- // -------------------------------------------------------------------------------
-@@ -475,19 +475,19 @@
- // -------------------------------------------------------------------------------
- -(void) fillCacheParamView
- {
--	[dynRoot setState:[afsProperty dynRoot]?NSOnState:NSOffState];
--	[afsDB setState:[afsProperty afsDB]?NSOnState:NSOffState];
--	[statCacheEntry setIntValue:[afsProperty statCacheEntry]];
--	[dCacheDim setIntValue:[afsProperty dCacheDim]];
--	[cacheDimension setIntValue:[afsProperty cacheDimension]];
--	[daemonNumber setIntValue:[afsProperty daemonNumber]];
--	[afsRootMountPoint setStringValue:[afsProperty afsRootMountPoint]];
--	[nVolEntry setIntValue:[afsProperty nVolEntry]];
--	
--	//new version property
--	//[verbose setEnabled:[afsProperty useAfsdConfConfigFile]];
--	[verbose setState:[afsProperty verbose]?NSOnState:NSOffState];
--	
-+    [dynRoot setState:[afsProperty dynRoot]?NSOnState:NSOffState];
-+    [afsDB setState:[afsProperty afsDB]?NSOnState:NSOffState];
-+    [statCacheEntry setIntValue:[afsProperty statCacheEntry]];
-+    [dCacheDim setIntValue:[afsProperty dCacheDim]];
-+    [cacheDimension setIntValue:[afsProperty cacheDimension]];
-+    [daemonNumber setIntValue:[afsProperty daemonNumber]];
-+    [afsRootMountPoint setStringValue:[afsProperty afsRootMountPoint]];
-+    [nVolEntry setIntValue:[afsProperty nVolEntry]];
-+
-+    //new version property
-+    //[verbose setEnabled:[afsProperty useAfsdConfConfigFile]];
-+    [verbose setState:[afsProperty verbose]?NSOnState:NSOffState];
-+
- }
- 
- // -------------------------------------------------------------------------------
-@@ -495,22 +495,21 @@
- // -------------------------------------------------------------------------------
- -(void) updateCacheParamFromView
- {
--	NSString *tmpAfsPath = [afsRootMountPoint stringValue];
--	if(!tmpAfsPath || ([tmpAfsPath length] == 0) || ([tmpAfsPath characterAtIndex:0] != '/')) 
--		@throw [NSException exceptionWithName:@"updateCacheParamFromView" 
--									   reason:kBadAfsRootMountPoint
--									 userInfo:nil];
-+    NSString *tmpAfsPath = [afsRootMountPoint stringValue];
-+    if(!tmpAfsPath || ([tmpAfsPath length] == 0) || ([tmpAfsPath characterAtIndex:0] != '/'))
-+	@throw [NSException exceptionWithName:@"updateCacheParamFromView"
-+			    reason:kBadAfsRootMountPoint
-+			    userInfo:nil];
- 
--	
--	[afsProperty setDynRoot:[dynRoot state]==NSOnState];
--	[afsProperty setAfsDB:[afsDB state]==NSOnState];
--	[afsProperty setStatCacheEntry:[statCacheEntry intValue]];
--	[afsProperty setDCacheDim:[dCacheDim intValue]]; 
--	[afsProperty setCacheDimension:[cacheDimension intValue]]; 
--	[afsProperty setDaemonNumber:[daemonNumber intValue]];
--	[afsProperty setAfsRootMountPoint:tmpAfsPath];
--	[afsProperty setNVolEntry:[nVolEntry intValue]];
--	[afsProperty setVerbose:[verbose state]==NSOnState];
-+    [afsProperty setDynRoot:[dynRoot state]==NSOnState];
-+    [afsProperty setAfsDB:[afsDB state]==NSOnState];
-+    [afsProperty setStatCacheEntry:[statCacheEntry intValue]];
-+    [afsProperty setDCacheDim:[dCacheDim intValue]];
-+    [afsProperty setCacheDimension:[cacheDimension intValue]];
-+    [afsProperty setDaemonNumber:[daemonNumber intValue]];
-+    [afsProperty setAfsRootMountPoint:tmpAfsPath];
-+    [afsProperty setNVolEntry:[nVolEntry intValue]];
-+    [afsProperty setVerbose:[verbose state]==NSOnState];
- }
- 
- 
-@@ -519,8 +518,8 @@
- // -------------------------------------------------------------------------------
- - (IBAction) showCellIP:(id) sender
- {
--	int rowSelected = [((NSTableView *) cellList) selectedRow];
--	[self modifyCellByIDX:rowSelected];
-+    int rowSelected = [((NSTableView *) cellList) selectedRow];
-+    [self modifyCellByIDX:rowSelected];
- }
- 
- // -------------------------------------------------------------------------------
-@@ -528,7 +527,7 @@
- // -------------------------------------------------------------------------------
- -(void) modifyCellByIDX:(int) idx
- {
--	[self modifyCell:[self getCellByIDX:idx]];
-+    [self modifyCell:[self getCellByIDX:idx]];
- }
- 
- // -------------------------------------------------------------------------------
-@@ -536,13 +535,13 @@
- // -------------------------------------------------------------------------------
- -(void) modifyCell:(DBCellElement*) cellElement
- {
--	[NSBundle loadNibNamed:@"IpPanel" owner:self];
--	[((IpConfiguratorCommander*) ipConfControllerCommander) setWorkCell:cellElement];
--	[NSApp beginSheet: ipConfigurationSheet
-+    [NSBundle loadNibNamed:@"IpPanel" owner:self];
-+    [((IpConfiguratorCommander*) ipConfControllerCommander) setWorkCell:cellElement];
-+    [NSApp beginSheet: ipConfigurationSheet
- 	   modalForWindow: [[self mainView] window]
--		modalDelegate: self
-+	   modalDelegate: self
- 	   didEndSelector: @selector(didEndSheet:returnCode:contextInfo:)
--		  contextInfo: nil];
-+	   contextInfo: nil];
- }
- 
- // -------------------------------------------------------------------------------
-@@ -550,132 +549,78 @@
- // -------------------------------------------------------------------------------
- - (IBAction) addRemoveCell:(id) sender
- {
--	switch([((NSControl*) sender) tag]){
--		case ADD_CELL_CONTROL_TAG:
--		{
--			DBCellElement *newCell = [[DBCellElement alloc] init];
--			if(!newCell) break;
--			
--			[newCell setCellName:kNewCellName];
--			[newCell setCellComment:kNewCellComment];
--			//cellArray = ;
--			[[afsProperty getCellList] addObject:newCell];
--			[newCell release];
--			
--			//Modify new cell
--			[self modifyCell:newCell];
--		}
--		break;
--			
--		case REMOVE_CELL_CONTROL_TAG:
--		{
--			int index = 0;
--			NSIndexSet *selectedIndex = [(NSTableView*)cellList selectedRowIndexes];
--			if( [selectedIndex count] > 0) {
--				index = [selectedIndex firstIndex]; 
--				do {
--					DBCellElement *cellElement =  (DBCellElement*)[filteredCellDB objectAtIndex:index];
--					[[afsProperty getCellList] removeObject:cellElement];
--				} while ((index = [selectedIndex indexGreaterThanIndex:index]) != NSNotFound);
--			}
--		}
--		break;
--	}
--	//Filter the cellServDb and allocate filtered array
--	[self searchCellTextEvent:nil];
--	[(NSTableView*)cellList deselectAll:nil];
--	[(NSTableView*)cellList reloadData];
--}
--
--// -------------------------------------------------------------------------------
--//  repairHelperTool:
--// -------------------------------------------------------------------------------
--- (void) repairHelperTool
--{
--	struct stat st;
--    int fdTool;
--	int status = 0;
--	NSLog(@"repairHelperTool"); 
--	NSString *afshlpPath = [[self bundle] pathForResource:@"afshlp" ofType:nil];
-+    switch([((NSControl*) sender) tag]){
-+    case ADD_CELL_CONTROL_TAG:
-+    {
-+	DBCellElement *newCell = [[DBCellElement alloc] init];
-+	if(!newCell) break;
- 	
-+	[newCell setCellName:kNewCellName];
-+	[newCell setCellComment:kNewCellComment];
-+	//cellArray = ;
-+	[[afsProperty getCellList] addObject:newCell];
-+	[newCell release];
- 	
--    
--    // Open tool exclusively, so nobody can change it while we bless it.
--    fdTool = open([afshlpPath UTF8String], O_NONBLOCK | O_RDONLY | O_EXLOCK, 0);
--    
--    if(fdTool == -1)
--    {
--        NSLog(@"Exclusive open while repairing tool failed: %d.", errno);
--        exit(-1);
-+	//Modify new cell
-+	[self modifyCell:newCell];
-     }
-+    break;
-     
--    if(fstat(fdTool, &st))
-+    case REMOVE_CELL_CONTROL_TAG:
-     {
--        NSLog(@"fstat failed.");
--        exit(-1);
-+	int index = 0;
-+	NSIndexSet *selectedIndex = [(NSTableView*)cellList selectedRowIndexes];
-+	if( [selectedIndex count] > 0) {
-+	    index = [selectedIndex firstIndex];
-+	    do {
-+		DBCellElement *cellElement =  (DBCellElement*)[filteredCellDB objectAtIndex:index];
-+		[[afsProperty getCellList] removeObject:cellElement];
-+	    } while ((index = [selectedIndex indexGreaterThanIndex:index]) != NSNotFound);
-+	}
-     }
--    
--    if(st.st_uid != 0)
--    {
--		status = [[AuthUtil shared] autorize];
--		if(status == noErr){
--			fchown(fdTool, 0, st.st_gid);
--			
--			// Disable group and world writability and make setuid root.
--			fchmod(fdTool, (st.st_mode & (~(S_IWGRP | S_IWOTH)))/* | S_ISUID*/);
--			const char *args[] = {"root", [afshlpPath UTF8String],0L};
--			[[AuthUtil shared] execUnixCommand:"/usr/sbin/chown" 
--										  args:args
--										output:nil];
--			[[AuthUtil shared] deautorize];
--		}
--    } else  NSLog(@"st_uid = 0");
--    
--	
--    
--    close(fdTool);
--    
--    NSLog(@"Self-repair done.");
--	
-+    break;
-+    }
-+    //Filter the cellServDb and allocate filtered array
-+    [self searchCellTextEvent:nil];
-+    [cellList deselectAll:nil];
-+    [cellList reloadData];
- }
- 
--
- // -------------------------------------------------------------------------------
- //  startStopAfs:
- // -------------------------------------------------------------------------------
- - (IBAction) startStopAfs:(id) sender
- {
--	BOOL currentAfsState = NO;
--	@try {
--		currentAfsState = [afsProperty checkAfsStatus];
--		// make the parameter to call the root helper app
--		if(currentAfsState){
--			//shutdown afs
--			NSLog(@"Shutting down afs");
--			[afsProperty shutdown];
--		} else {
--			//Start afs
--			NSLog(@"Starting up afs");
--			[afsProperty startup];
--		}
--		[self refreshGui:nil];
--	}
--	@catch (NSException * e) {
--		[self showMessage:[e reason]];
--	}
--	@finally {
--		[[AuthUtil shared] deautorize];
-+    BOOL currentAfsState = NO;
-+    @try {
-+	currentAfsState = [afsProperty checkAfsStatus];
-+	// make the parameter to call the root helper app
-+	if(currentAfsState){
-+	    //shutdown afs
-+	    NSLog(@"Shutting down afs");
-+	    [afsProperty shutdown];
-+	} else {
-+	    //Start afs
-+	    NSLog(@"Starting up afs");
-+	    [afsProperty startup];
- 	}
-+	[self refreshGui:nil];
-+    }
-+    @catch (NSException * e) {
-+	[self showMessage:[e reason]];
-+    }
-+    @finally {
-+    }
- }
- 
- // -------------------------------------------------------------------------------
- //  info:
- // -------------------------------------------------------------------------------
- - (void) refreshGui:(NSNotification *)notification{
--	BOOL afsIsUp = [afsProperty checkAfsStatus];
--	[self setAfsStatus];
--	[tokensButton setEnabled:afsIsUp];
--	[unlogButton setEnabled:afsIsUp];
-+    BOOL afsIsUp = [afsProperty checkAfsStatus];
-+    [self setAfsStatus];
-+    [tokensButton setEnabled:afsIsUp];
-+    [unlogButton setEnabled:afsIsUp];
- 
- }
- 
-@@ -683,18 +628,19 @@
- //  -(void) refreshTokensNotify:(NSNotification*)notification
- // -------------------------------------------------------------------------------
- -(void) refreshTokensNotify:(NSNotification*)notification {
--	[self refreshTokens:nil];
-+    [self refreshTokens:nil];
- }
- 
- // -------------------------------------------------------------------------------
- //  afsVolumeMountChange: Track the afs volume state change
- // -------------------------------------------------------------------------------
-+// XXX should use mountdir not /afs
- - (void) afsVolumeMountChange:(NSNotification *)notification{
--	// Cehck if is mounted or unmounted afs
--	if([[[notification userInfo] objectForKey:@"NSDevicePath"] isEqualToString:@"/afs"]){
--		[self setAfsStatus];
--		[self refreshTokens:nil];
--	}
-+    // Check if is mounted or unmounted afs
-+    if([[[notification userInfo] objectForKey:@"NSDevicePath"] isEqualToString:@"/afs"]){
-+	[self setAfsStatus];
-+	[self refreshTokens:nil];
-+    }
- }
- 
- // -------------------------------------------------------------------------------
-@@ -702,13 +648,13 @@
- // -------------------------------------------------------------------------------
- - (IBAction) info:(id) sender
- {
--	[((InfoController*) infoController) showHtmlResource:[[self bundle] pathForResource:@"license" ofType:@"rtf"]];
-+    [infoController showHtmlResource:[[self bundle] pathForResource:@"license" ofType:@"rtf"]];
- 
--	[NSApp beginSheet: infoSheet
-+    [NSApp beginSheet: infoSheet
- 	   modalForWindow: [[self mainView] window]
--		modalDelegate: self
-+	   modalDelegate: self
- 	   didEndSelector:  @selector(didEndInfoSheet:returnCode:contextInfo:)
--		  contextInfo: nil];
-+	   contextInfo: nil];
- }
- 
- // -------------------------------------------------------------------------------
-@@ -716,7 +662,7 @@
- // -------------------------------------------------------------------------------
- - (IBAction) tableDoubleAction:(id) sender
- {
--	[self showCellIP:nil];
-+    [self showCellIP:nil];
- }
- 
- // -------------------------------------------------------------------------------
-@@ -724,24 +670,24 @@
- // -------------------------------------------------------------------------------
- - (IBAction) getNewToken:(id) sender
- {
--	BOOL useAklog = [useAklogCheck state] == NSOnState;
--	if(useAklog){
--		//[AFSPropertyManager aklog];
--		[afsProperty getTokens:false 
--						   usr:nil 
--						   pwd:nil];
--		[self refreshTokens:nil];
--		//Inform afs menuextra to updata afs status
--		[[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAFSMenuExtraID object:kMExtraAFSStateChange];
-+    BOOL useAklog = [useAklogCheck state] == NSOnState;
-+    if(useAklog){
-+	//[AFSPropertyManager aklog];
-+	[afsProperty getTokens:false
-+		     usr:nil
-+		     pwd:nil];
-+	[self refreshTokens:nil];
-+	//Inform afs menuextra to updata afs status
-+	[[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAFSMenuExtraID object:kMExtraAFSStateChange];
- 
--	} else {
--		[NSBundle loadNibNamed:@"CredentialPanel" owner:self];
--		[NSApp beginSheet: credentialSheet
--		   modalForWindow: [[self mainView] window]
--			modalDelegate: self
--		   didEndSelector: @selector(didEndCredentialSheet:returnCode:contextInfo:)
--			  contextInfo: nil];
--	}
-+    } else {
-+	[NSBundle loadNibNamed:@"CredentialPanel" owner:self];
-+	[NSApp beginSheet: credentialSheet
-+	       modalForWindow: [[self mainView] window]
-+	       modalDelegate: self
-+	       didEndSelector: @selector(didEndCredentialSheet:returnCode:contextInfo:)
-+	       contextInfo: nil];
-+    }
- }
- 
- 
-@@ -750,23 +696,22 @@
- // -------------------------------------------------------------------------------
- - (IBAction) unlog:(id) sender
- {
--	int index = -1;
--	NSIndexSet *selectedIndex = [(NSTableView*)tokensTable selectedRowIndexes];
--	if( [selectedIndex count] > 0) {
--		index = [selectedIndex firstIndex]; 
--		do {
--			NSString *tokenDesc = [tokenList objectAtIndex:index];
--			NSString *cellToUnlog = [tokenDesc estractTokenByDelimiter:@"afs@" 
--															  endToken:@" "];
--			[afsProperty unlog:cellToUnlog];
--		} while ((index = [selectedIndex indexGreaterThanIndex: index]) != NSNotFound);
--	} else {
--		[afsProperty unlog:nil];
--	}
--	[self refreshTokens:nil];
--	//Inform afs menuextra to updata afs status
--	[[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAFSMenuExtraID object:kMExtraAFSStateChange];
--
-+    int index = -1;
-+    NSIndexSet *selectedIndex = [tokensTable selectedRowIndexes];
-+    if( [selectedIndex count] > 0) {
-+	index = [selectedIndex firstIndex];
-+	do {
-+	    NSString *tokenDesc = [tokenList objectAtIndex:index];
-+	    NSString *cellToUnlog = [tokenDesc estractTokenByDelimiter:@"afs@"
-+					       endToken:@" "];
-+	    [afsProperty unlog:cellToUnlog];
-+	} while ((index = [selectedIndex indexGreaterThanIndex: index]) != NSNotFound);
-+    } else {
-+	[afsProperty unlog:nil];
-+    }
-+    [self refreshTokens:nil];
-+    //Inform afs menuextra to updata afs status
-+    [[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAFSMenuExtraID object:kMExtraAFSStateChange];
- }
- 
- 
-@@ -775,47 +720,43 @@
- // -------------------------------------------------------------------------------
- - (IBAction) aklogSwitchEvent:(id) sender
- {
--	//afs menu extra is loaded inform it to read preference
--	@try {
--		if(![useAklogCheck state]) {
--			//deselect the checkbox
--			[aklogCredentialAtLoginTime setState:NO];
--		}
--		
--		[self writePreferenceFile];
--		
--		//Enable disable aklog at login time checkbox according the useAklog checkbox
--		[aklogCredentialAtLoginTime setEnabled:[useAklogCheck state]];
--		
--	}
--	@catch (NSException * e) {
--		[self showMessage:[e reason]];
-+    //afs menu extra is loaded inform it to read preference
-+    @try {
-+	if(![useAklogCheck state]) {
-+	    //deselect the checkbox
-+	    [aklogCredentialAtLoginTime setState:NO];
- 	}
- 	
--		
-+	[self writePreferenceFile];
-+
-+	//Enable disable aklog at login time checkbox according the useAklog checkbox
-+	[aklogCredentialAtLoginTime setEnabled:[useAklogCheck state]];
-+
-+    }
-+    @catch (NSException * e) {
-+	[self showMessage:[e reason]];
-+    }
- }
- 
- // -------------------------------------------------------------------------------
- //  credentialAtLoginTimeEvent:
- // -------------------------------------------------------------------------------
- - (IBAction) credentialAtLoginTimeEvent:(id) sender {
--	[self writePreferenceFile];
-+    [self writePreferenceFile];
- }
- 
- // -------------------------------------------------------------------------------
- //  afsStartupSwitchEvent:
- // -------------------------------------------------------------------------------
- - (IBAction) afsStartupSwitchEvent:(id) sender {
--	NSString *rootHelperApp = [[self bundle] pathForResource:@"afshlp" ofType:@""];
--	//get the new state
--	startAFSAtLogin = [checkButtonAfsAtBootTime state];
--	const char *startupConfigureOption[] = {"start_afs_at_startup", startAFSAtLogin?"enable":"disable", 0L};
--	if([[AuthUtil shared] autorize] == noErr) {
--			//now disable the launchd configuration
--			[[AuthUtil shared] execUnixCommand:[rootHelperApp UTF8String]
--										  args:startupConfigureOption
--										output:nil];
--	}
-+    NSString *rootHelperApp = [[self bundle] pathForResource:@"afshlp" ofType:@""];
-+    //get the new state
-+    startAFSAtLogin = [checkButtonAfsAtBootTime state];
-+    [PListManager launchctlStringCommandAuth:startAFSAtLogin?@"load":@"unload"
-+		  option:[NSArray arrayWithObjects:@"-w", nil]
-+		  plistName:@AFS_DAEMON_PATH
-+		  helper:rootHelperApp
-+		  withAuthRef:[[authView authorization] authorizationRef]];
- }
- 
- 
-@@ -823,20 +764,11 @@
- //  afsMenuActivationEvent:
- // -------------------------------------------------------------------------------
- - (IBAction) krb5KredentialAtLoginTimeEvent:(id) sender {
--	//
--	NSString *rootHelperApp = [[self bundle] pathForResource:@"afshlp" ofType:@""];
--	const char *args[] = {"enable_krb5_startup", [[installKRB5AuthAtLoginButton stringValue] UTF8String], "", 0L};
--	
--	//Check helper app
--	[self repairHelperTool];
--	if([[AuthUtil shared] autorize] == noErr) {
--		[[AuthUtil shared] execUnixCommand:[rootHelperApp UTF8String] 
--									  args:args
--									output:nil];
--		
--		//check if all is gone well
--		[installKRB5AuthAtLoginButton setState:[PListManager checkKrb5AtLoginTimeLaunchdEnable]];
--	}
-+    NSString *rootHelperApp = [[self bundle] pathForResource:@"afshlp" ofType:@""];
-+    [PListManager krb5TiketAtLoginTime:[installKRB5AuthAtLoginButton state] helper:rootHelperApp];
-+
-+    //check if all is gone well
-+    [installKRB5AuthAtLoginButton setState:[PListManager checkKrb5AtLoginTimeLaunchdEnable]];
- }
- 
- // -------------------------------------------------------------------------------
-@@ -844,15 +776,15 @@
- // -------------------------------------------------------------------------------
- -(IBAction) afsMenuActivationEvent:(id) sender
- {
--	CFPreferencesSetValue((CFStringRef)PREFERENCE_SHOW_STATUS_MENU, 
--						  (CFNumberRef)[NSNumber numberWithBool:[(NSButton*)afsMenucheckBox state]],
--						  (CFStringRef)kAfsCommanderID, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--	
--	CFPreferencesSynchronize((CFStringRef)kAfsCommanderID,  kCFPreferencesAnyUser, kCFPreferencesAnyHost);
--	CFPreferencesSynchronize((CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--	
--	//notify the backgrounder
--	[[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAFSMenuExtraID object:kMExtraAFSMenuChangeState];
-+    CFPreferencesSetValue((CFStringRef)PREFERENCE_SHOW_STATUS_MENU,
-+			  (CFNumberRef)[NSNumber numberWithBool:[(NSButton*)afsMenucheckBox state]],
-+			  (CFStringRef)kAfsCommanderID, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+
-+    CFPreferencesSynchronize((CFStringRef)kAfsCommanderID,  kCFPreferencesAnyUser, kCFPreferencesAnyHost);
-+    CFPreferencesSynchronize((CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+
-+    //notify the backgrounder
-+    [[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAFSMenuExtraID object:kMExtraAFSMenuChangeState];
- }
- 
- // -------------------------------------------------------------------------------
-@@ -861,10 +793,9 @@
- // -------------------------------------------------------------------------------
- - (IBAction) searchCellTextEvent:(id) sender
- {
--	
--	NSString *searchText = [[textSearchField stringValue] lowercaseString]; //filter string
--	[self filterCellServDB:searchText];
--	[((NSTableView*)cellList) reloadData];
-+    NSString *searchText = [[textSearchField stringValue] lowercaseString]; //filter string
-+    [self filterCellServDB:searchText];
-+    [((NSTableView*)cellList) reloadData];
- }
- 
- // -------------------------------------------------------------------------------
-@@ -872,39 +803,39 @@
- //		clear the NSSearchField and showw all CellServDB table
- // -------------------------------------------------------------------------------
- - (void) clearCellServDBFiltering {
--	//Clear the text search
--	[textSearchField setStringValue:@""];
--	//load the temp array with all cell servdb
--	[self searchCellTextEvent:nil];
-+    //Clear the text search
-+    [textSearchField setStringValue:@""];
-+    //load the temp array with all cell servdb
-+    [self searchCellTextEvent:nil];
- }
- // --------------------------------------o-----------------------------------------
- //  filterCellServDB:
- //  make the NSMutableArray with all cellservdb or filtered element
- // -------------------------------------------------------------------------------
- - (void) filterCellServDB:(NSString*)textToFilter {
--	DBCellElement *cellElement; //Filtered element
--	BOOL doFilter = !(textToFilter == nil || ([textToFilter length] == 0));
--	
--	// We can do filtering and make the temp array
--	if(filteredCellDB){
--		[filteredCellDB release];
--	}
--	filteredCellDB = [[NSMutableArray alloc] init];
--	NSEnumerator *e = [[afsProperty getCellList] objectEnumerator];
--	while(cellElement = (DBCellElement*)[e nextObject]) {
--		// check if the element can be get
--		if(doFilter) {
--			//Get the CellServDB array enumerator
--			NSRange rsltRng = [[[cellElement getCellName] lowercaseString] rangeOfString:textToFilter];
--		   if(rsltRng.location != NSNotFound) {
--			//we can add this cell to filtered
--			[filteredCellDB addObject:[cellElement retain]];
--		   }
--		} else {
--			[filteredCellDB addObject:[cellElement retain]];
--
--		}
-+    DBCellElement *cellElement; //Filtered element
-+    BOOL doFilter = !(textToFilter == nil || ([textToFilter length] == 0));
-+
-+    // We can do filtering and make the temp array
-+    if(filteredCellDB){
-+	[filteredCellDB release];
-+    }
-+    filteredCellDB = [[NSMutableArray alloc] init];
-+    NSEnumerator *e = [[afsProperty getCellList] objectEnumerator];
-+    while(cellElement = (DBCellElement*)[e nextObject]) {
-+	// check if the element can be get
-+	if(doFilter) {
-+	    //Get the CellServDB array enumerator
-+	    NSRange rsltRng = [[[cellElement getCellName] lowercaseString] rangeOfString:textToFilter];
-+	    if(rsltRng.location != NSNotFound) {
-+		//we can add this cell to filtered
-+		[filteredCellDB addObject:[cellElement retain]];
-+	    }
-+	} else {
-+	    [filteredCellDB addObject:[cellElement retain]];
-+
- 	}
-+    }
- }
- 		   
- // -------------------------------------------------------------------------------
-@@ -912,8 +843,8 @@
- // -------------------------------------------------------------------------------
- - (DBCellElement*) getCurrentCellInDB
- {
--	int rowSelected = [((NSTableView *) cellList) selectedRow];
--	return [self getCellByIDX:rowSelected];
-+    int rowSelected = [cellList selectedRow];
-+    return [self getCellByIDX:rowSelected];
- }
- 
- // -------------------------------------------------------------------------------
-@@ -921,23 +852,22 @@
- // -------------------------------------------------------------------------------
- - (DBCellElement*) getCellByIDX:(int) idx
- {
--	//NSMutableArray *cellArray = [afsProperty getCellList];
--	DBCellElement *cellElement =  (DBCellElement*)[filteredCellDB objectAtIndex:idx];
--	return cellElement;
-+    DBCellElement *cellElement =  (DBCellElement*)[filteredCellDB objectAtIndex:idx];
-+    return cellElement;
- }
- 
- // -------------------------------------------------------------------------------
- //  showMessage:
- // -------------------------------------------------------------------------------
- -(void) showMessage:(NSString*) message{
--	NSAlert *alert = [[NSAlert alloc] init];
--	
--	[alert setMessageText:message];
--	[alert beginSheetModalForWindow:[[self mainView] window]
--					  modalDelegate:nil 
--					 didEndSelector:nil
--						contextInfo:nil];
--	[alert release];
-+    NSAlert *alert = [[NSAlert alloc] init];
-+
-+    [alert setMessageText:message];
-+    [alert beginSheetModalForWindow:[[self mainView] window]
-+	   modalDelegate:nil
-+	   didEndSelector:nil
-+	   contextInfo:nil];
-+    [alert release];
- }
- 
- // -------------------------------------------------------------------------------
-@@ -945,46 +875,36 @@
- // -------------------------------------------------------------------------------
- -(void) setAfsStatus
- {
--	
--	BOOL afsIsUp = [afsProperty checkAfsStatus];
--	BOOL afsEnabledAtStartup = NO;
--	
--	NSMutableString *commandOutput = [NSMutableString stringWithCapacity:20];
--	NSString *rootHelperApp = [[self bundle] pathForResource:@"afshlp" ofType:@""];
--		
--#if 0
--			// make the parameter to call the root helper app
--	const char *checkAFSDaemonParam[] = {"check_afs_daemon",  0L};
--	if([[AuthUtil shared] autorize] == noErr) {
--				//now disable the launchd configuration
--		[[AuthUtil shared] execUnixCommand:[rootHelperApp UTF8String]
--									  args:checkAFSDaemonParam
--									output:commandOutput];
--		afsEnabledAtStartup = [commandOutput rangeOfString:@"afshlp:afs daemon registration result:1"].location!=NSNotFound;
--	}
--#else
--	afsEnabledAtStartup = 1;
--#endif
--	
--	
-+    BOOL afsIsUp = [afsProperty checkAfsStatus];
-+    BOOL afsEnabledAtStartup = NO;
-+    NSString *rootHelperApp = [[self bundle] pathForResource:@"afshlp" ofType:@""];
-+
-+    if ([self isUnlocked]) {
-+	afsEnabledAtStartup = (
-+	    [TaskUtil executeTaskWithAuth:@"/bin/launchctl"
-+		      arguments:[NSArray arrayWithObjects:@"list",
-+					 @"org.openafs.filesystems.afs", nil]
-+		      helper:rootHelperApp
-+		      withAuthRef:[[authView authorization] authorizationRef]
-+	     ] == noErr)?YES:NO;
-+	[checkButtonAfsAtBootTime setState:afsEnabledAtStartup];
-+    }
- 
-+    [startStopButton setTitle: (afsIsUp?kAfsButtonShutdown:kAfsButtonStartup)];
- 
--	[((NSButton *)startStopButton) setTitle: (afsIsUp?kAfsButtonShutdown:kAfsButtonStartup)];
--	
--	NSMutableAttributedString *colorTitle =[[NSMutableAttributedString alloc] initWithAttributedString:[((NSButton *)startStopButton) attributedTitle]];
-+    NSMutableAttributedString *colorTitle =[[NSMutableAttributedString alloc] initWithAttributedString:[startStopButton attributedTitle]];
-     NSRange titleRange = NSMakeRange(0, [colorTitle length]);
--	
-+
-     [colorTitle addAttribute:NSForegroundColorAttributeName
--                       value:(afsIsUp?[NSColor redColor]:[NSColor blackColor])
--                       range:titleRange];
--	
--    [((NSButton *)startStopButton) setAttributedTitle:colorTitle];
--	[checkButtonAfsAtBootTime setState:afsEnabledAtStartup];
--	if(afsIsUp) {
--		[self startTimer];
--	} else {
--		[self stopTimer];
--	}
-+		value:(afsIsUp?[NSColor redColor]:[NSColor blackColor])
-+		range:titleRange];
-+
-+    [startStopButton setAttributedTitle:colorTitle];
-+    if(afsIsUp) {
-+	[self startTimer];
-+    } else {
-+	[self stopTimer];
-+    }
- }
- 
- // -------------------------------------------------------------------------------
-@@ -992,87 +912,86 @@
- // -------------------------------------------------------------------------------
- - (void) refreshTokens:(NSTimer*)theTimer;
- {
--	if(![tokensLock tryLock]) return;
--	if(tokenList){
--		[tokenList release];
--	}
--	
--	tokenList = [afsProperty getTokenList];
--	[((NSTableView*)tokensTable) reloadData];
--	[tokensLock unlock];
-+    if(![tokensLock tryLock]) return;
-+    if(tokenList){
-+	[tokenList release];
-+    }
-+
-+    tokenList = [afsProperty getTokenList];
-+    [tokensTable reloadData];
-+    [tokensLock unlock];
- }
- 
- // -------------------------------------------------------------------------------
- //  removeExtra:
- // -------------------------------------------------------------------------------
- - (IBAction) addLink:(id) sender {
--	[NSBundle loadNibNamed:@"SymLinkEdit" owner:self];
--	
--	[NSApp beginSheet: lyncCreationSheet
-+    [NSBundle loadNibNamed:@"SymLinkEdit" owner:self];
-+
-+    [NSApp beginSheet: lyncCreationSheet
- 	   modalForWindow: [[self mainView] window]
--		modalDelegate: self
-+	   modalDelegate: self
- 	   didEndSelector: @selector(didEndSymlinkSheet:returnCode:contextInfo:)
--		  contextInfo: nil];
--	
-+	   contextInfo: nil];
- }
- 
- // -------------------------------------------------------------------------------
- //  removeExtra:
- // -------------------------------------------------------------------------------
- - (IBAction) removeLink:(id) sender {
--	if(!linkConfiguration) return;
--	int index = 0;
--	NSArray *keys = [linkConfiguration allKeys];
--	NSIndexSet *linkToRemove = [tableViewLink selectedRowIndexes];
--	if( [linkToRemove count] > 0) {
--		index = [linkToRemove firstIndex];
--		do {
--			[linkConfiguration removeObjectForKey:[keys objectAtIndex:index]];
--		} while ((index = [linkToRemove indexGreaterThanIndex:index]) != -1);
--	}
--	
--	//write the new configuration
--	NSData *prefData = nil;
--	if([linkConfiguration count] > 0) {
--		prefData = [NSPropertyListSerialization dataWithPropertyList:linkConfiguration
--															  format:NSPropertyListXMLFormat_v1_0
--															 options:0
--															   error:nil];
--	}
--	CFPreferencesSetValue((CFStringRef)PREFERENCE_LINK_CONFIGURATION,
--						  (CFDataRef)prefData,
--						  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--	
--	CFPreferencesSynchronize((CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--	
--	//reload the new data
--	[tableViewLink reloadData];
-+    if(!linkConfiguration) return;
-+    int index = 0;
-+    NSArray *keys = [linkConfiguration allKeys];
-+    NSIndexSet *linkToRemove = [tableViewLink selectedRowIndexes];
-+    if( [linkToRemove count] > 0) {
-+	index = [linkToRemove firstIndex];
-+	do {
-+	    [linkConfiguration removeObjectForKey:[keys objectAtIndex:index]];
-+	} while ((index = [linkToRemove indexGreaterThanIndex:index]) != -1);
-+    }
-+
-+    //write the new configuration
-+    NSData *prefData = nil;
-+    if([linkConfiguration count] > 0) {
-+	prefData = [NSPropertyListSerialization dataWithPropertyList:linkConfiguration
-+						format:NSPropertyListXMLFormat_v1_0
-+						options:0
-+						error:nil];
-+    }
-+    CFPreferencesSetValue((CFStringRef)PREFERENCE_LINK_CONFIGURATION,
-+			  (CFDataRef)prefData,
-+			  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+
-+    CFPreferencesSynchronize((CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+
-+    //reload the new data
-+    [tableViewLink reloadData];
- }
- 
- // -------------------------------------------------------------------------------
- //  removeExtra:
- // -------------------------------------------------------------------------------
- - (IBAction) enableLink:(id) sender {
--	[self writePreferenceFile];
-+    [self writePreferenceFile];
- }
- 
- // -------------------------------------------------------------------------------
- //  removeExtra:
- // -------------------------------------------------------------------------------
- - (IBAction) manageBackgrounderActivation:(id)sender {
--	[PListManager launchctlCommand:[(NSButton*)sender state] 
--						userDomain:YES 
--							option:[NSArray arrayWithObjects:@"-S", @"Aqua", nil] 
--						 plistName:[NSString stringWithFormat:@"%@.plist", BACKGROUNDER_P_FILE]];
--	//re ad the status to check taht all is gone well
--	[backgrounderActivationCheck setState:[PListManager launchdJobState:BACKGROUNDER_P_FILE]];
-+    [PListManager launchctlCommand:[(NSButton*)sender state]
-+		  userDomain:YES
-+		  option:[NSArray arrayWithObjects:@"-S", @"Aqua", nil]
-+		  plistName:[NSString stringWithFormat:@"%@.plist", BACKGROUNDER_P_FILE]];
-+    //read the status to check that all is gone well
-+    [backgrounderActivationCheck setState:[PListManager launchdJobState:BACKGROUNDER_P_FILE]];
- }
- 
- // -------------------------------------------------------------------------------
- //  tableViewLinkPerformClick:
- // -------------------------------------------------------------------------------
- - (IBAction) tableViewLinkPerformClick:(id) sender {
--	NSLog(@"tableViewLinkPerformClick");
-+    NSLog(@"tableViewLinkPerformClick");
- }
- 
- // -------------------------------------------------------------------------------
-@@ -1080,29 +999,49 @@
- // -------------------------------------------------------------------------------
- - (void)tabView:(NSTabView *)tabView willSelectTabViewItem: (NSTabViewItem *)tabViewItem 
- {
--	//check to see if the cache param tab is the tab that will be selected
--	if([((NSString*)[tabViewItem identifier]) intValue] == TAB_LINK)
--	{
--		[tableViewLink reloadData];
--	}
-+    //check to see if the cache param tab is the tab that will be selected
-+    if([((NSString*)[tabViewItem identifier]) intValue] == TAB_LINK)
-+    {
-+	[tableViewLink reloadData];
-+    }
- }
- // -------------------------------------------------------------------------------
- //  tableViewLinkPerformClick:
- // -------------------------------------------------------------------------------
- - (IBAction) enableDisableKrb5RenewCheck:(id) sender {
--	//NSLog(@"enableDisableKrb5RenewCheck");
--	CFPreferencesSetValue((CFStringRef)PREFERENCE_KRB5_CHECK_ENABLE,
--						  (CFNumberRef) [NSNumber numberWithInt:[(NSButton*)sender intValue]],
--						  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--	CFPreferencesSynchronize((CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
--		//notify the backgrounder
--	[[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAFSMenuExtraID object:kPrefChangeNotification];
-+    //NSLog(@"enableDisableKrb5RenewCheck");
-+    CFPreferencesSetValue((CFStringRef)PREFERENCE_KRB5_CHECK_ENABLE,
-+			  (CFNumberRef) [NSNumber numberWithInt:[(NSButton*)sender intValue]],
-+			  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+    CFPreferencesSynchronize((CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-+    //notify the backgrounder
-+    [[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAFSMenuExtraID object:kPrefChangeNotification];
- }
- // -------------------------------------------------------------------------------
- //  tableViewLinkPerformClick:
- // -------------------------------------------------------------------------------
- - (IBAction) krb5RenewParamChange:(id) sender {
- }
-+
-+
-+- (BOOL)isUnlocked {
-+    return [authView authorizationState] == SFAuthorizationViewUnlockedState;
-+}
-+
-+- (void)authorizationViewDidAuthorize:(SFAuthorizationView *)view {
-+    // enable things
-+    [startStopButton setEnabled:[self isUnlocked]];
-+    [checkButtonAfsAtBootTime setEnabled:[self isUnlocked]];
-+    [self setAfsStatus];
-+    [installKRB5AuthAtLoginButton setEnabled:[self isUnlocked]];
-+}
-+
-+- (void)authorizationViewDidDeauthorize:(SFAuthorizationView *)view {
-+    // disable things
-+    [startStopButton setEnabled:[self isUnlocked]];
-+    [checkButtonAfsAtBootTime setEnabled:[self isUnlocked]];
-+    [installKRB5AuthAtLoginButton setEnabled:[self isUnlocked]];
-+}
- @end
- 
- @implementation AFSCommanderPref (NSTableDataSource)
-@@ -1116,29 +1055,28 @@
- - (void)tableView:(NSTableView *)table 
-    setObjectValue:(id)data 
-    forTableColumn:(NSTableColumn *)col 
--			  row:(int)row
-+	      row:(int)row
- {
--	NSString *identifier = (NSString*)[col identifier];
--	switch([table tag]){
--		case TABLE_TOKENS_LIST:
--			break;
--			
--		case TABLE_CELL_LIST:
--			// we are editing checkbox for cellservdb table
--			if([identifier intValue] == CELLSRVDB_TABLE_USR_DFLT_CHECK_COLUMN) {
--				// set the user default cell
--				DBCellElement *cellElement =  (DBCellElement*)[filteredCellDB objectAtIndex:row];
--				[afsProperty setDefaultCellByName:[cellElement getCellName]];
--				//[afsDefaultCellLabel setStringValue:[afsProperty getDefaultCellName]];
--				[((NSTableView*)cellList) reloadData];
--			} else if([identifier intValue] == CELLSRVDB_TABLE_DFLT_CHECK_COLUMN) {
--				// set the cell for wich the user want to get token
--				DBCellElement *cellElement =  (DBCellElement*)[filteredCellDB objectAtIndex:row];
--				[cellElement setUserDefaultForToken:![cellElement userDefaultForToken]];
--			}  
--			break;
--	}
-+    NSString *identifier = (NSString*)[col identifier];
-+    switch([table tag]){
-+    case TABLE_TOKENS_LIST:
-+	break;
- 	
-+    case TABLE_CELL_LIST:
-+	// we are editing checkbox for cellservdb table
-+	if([identifier intValue] == CELLSRVDB_TABLE_USR_DFLT_CHECK_COLUMN) {
-+	    // set the user default cell
-+	    DBCellElement *cellElement =  (DBCellElement*)[filteredCellDB objectAtIndex:row];
-+	    [afsProperty setDefaultCellByName:[cellElement getCellName]];
-+	    //[afsDefaultCellLabel setStringValue:[afsProperty getDefaultCellName]];
-+	    [((NSTableView*)cellList) reloadData];
-+	} else if([identifier intValue] == CELLSRVDB_TABLE_DFLT_CHECK_COLUMN) {
-+	    // set the cell for wich the user want to get token
-+	    DBCellElement *cellElement =  (DBCellElement*)[filteredCellDB objectAtIndex:row];
-+	    [cellElement setUserDefaultForToken:![cellElement userDefaultForToken]];
-+	}
-+	break;
-+    }
- }
- 
- 
-@@ -1146,31 +1084,28 @@
- //  tableView:
- //		refresh delegate method for two AFSCommander table
- // -------------------------------------------------------------------------------
--- (id) 	tableView:(NSTableView *) aTableView
--	objectValueForTableColumn:(NSTableColumn *) aTableColumn
--						  row:(int) rowIndex
-+- (id) tableView:(NSTableView *) aTableView
-+objectValueForTableColumn:(NSTableColumn *) aTableColumn
-+	     row:(int) rowIndex
- {  
-+    id result = nil;
-+    NSString *identifier = (NSString*)[aTableColumn identifier];
-+    switch([aTableView tag]){
-+    case TABLE_TOKENS_LIST:
-+	//We are refreshing tokens table
-+	result = [self getTableTokensListValue:[identifier intValue] row:rowIndex];
-+	break;
- 	
--	id result = nil;
--	NSString *identifier = (NSString*)[aTableColumn identifier];
--	switch([aTableView tag]){
--		case TABLE_TOKENS_LIST:
--			//We are refreshing tokens table
--			result = [self getTableTokensListValue:[identifier intValue] row:rowIndex];
--			break;
--			
--		case TABLE_CELL_LIST:
--			//We are refreshing cell db table
--			result = [self getTableCelListValue:[identifier intValue] row:rowIndex];
--			break;
--			
--		case TABLE_LINK_LIST:
--			result = [self getTableLinkValue:[identifier intValue] row:rowIndex];
--			break;
--
--		
--	}
--	return result;  
-+    case TABLE_CELL_LIST:
-+	//We are refreshing cell db table
-+	result = [self getTableCelListValue:[identifier intValue] row:rowIndex];
-+	break;
-+
-+    case TABLE_LINK_LIST:
-+	result = [self getTableLinkValue:[identifier intValue] row:rowIndex];
-+	break;
-+    }
-+    return result;
- }
- 
- 
-@@ -1179,14 +1114,14 @@
- // -------------------------------------------------------------------------------
- - (id)getTableTokensListValue:(int) colId row:(int)row
- {
--	id result = nil;
--	if(!tokenList) return nil;
--	switch(colId){
--		case 0:
--			result = (NSString*)[tokenList objectAtIndex:row];
--			break;
--	}
--	return result;
-+    id result = nil;
-+    if(!tokenList) return nil;
-+    switch(colId){
-+    case 0:
-+	result = (NSString*)[tokenList objectAtIndex:row];
-+	break;
-+    }
-+    return result;
- }
- 
- 
-@@ -1195,26 +1130,26 @@
- // -------------------------------------------------------------------------------
- - (id)getTableCelListValue:(int) colId row:(int)row
- {
--	id result = nil;
--	//NSMutableArray *cellArray = [afsProperty getCellList];
--	DBCellElement *cellElement =  (DBCellElement*)[filteredCellDB objectAtIndex:row];
--	switch(colId){
--		case CELLSRVDB_TABLE_USR_DFLT_CHECK_COLUMN:
--			result = [NSNumber numberWithInt:[cellElement userDefaultForCell]];
--			break;
--			
--		case CELLSRVDB_TABLE_DFLT_CHECK_COLUMN:
--			result = [NSNumber numberWithInt:[cellElement userDefaultForToken]];
--			break;
--		case CELLSRVDB_TABLE_NAME_COLUMN:
--			result = [cellElement getCellName];
--			break;
--			
--		case CELLSRVDB_TABLE_DESCRIPTION_COLUMN:
--			result = [cellElement getCellComment];
--			break;
--	}
--	return result;
-+    id result = nil;
-+    //NSMutableArray *cellArray = [afsProperty getCellList];
-+    DBCellElement *cellElement =  (DBCellElement*)[filteredCellDB objectAtIndex:row];
-+    switch(colId){
-+    case CELLSRVDB_TABLE_USR_DFLT_CHECK_COLUMN:
-+	result = [NSNumber numberWithInt:[cellElement userDefaultForCell]];
-+	break;
-+
-+    case CELLSRVDB_TABLE_DFLT_CHECK_COLUMN:
-+	result = [NSNumber numberWithInt:[cellElement userDefaultForToken]];
-+	break;
-+    case CELLSRVDB_TABLE_NAME_COLUMN:
-+	result = [cellElement getCellName];
-+	break;
-+
-+    case CELLSRVDB_TABLE_DESCRIPTION_COLUMN:
-+	result = [cellElement getCellComment];
-+	break;
-+    }
-+    return result;
- }
- 
- // -------------------------------------------------------------------------------
-@@ -1222,18 +1157,18 @@
- // -------------------------------------------------------------------------------
- - (id)getTableLinkValue:(int) colId row:(int)row
- {
--	id result = nil;
--	NSArray *allKey = [linkConfiguration allKeys];
--	switch(colId){
--		case TABLE_COLUMN_LINK_NAME:
--			result = [allKey objectAtIndex:row];
--			break;
--			
--		case TABLE_COLUMN_LINK_PATH:
--			result = [linkConfiguration objectForKey:[allKey objectAtIndex:row]];
--			break;
--	}
--	return result;
-+    id result = nil;
-+    NSArray *allKey = [linkConfiguration allKeys];
-+    switch(colId){
-+    case TABLE_COLUMN_LINK_NAME:
-+	result = [allKey objectAtIndex:row];
-+	break;
-+
-+    case TABLE_COLUMN_LINK_PATH:
-+	result = [linkConfiguration objectForKey:[allKey objectAtIndex:row]];
-+	break;
-+    }
-+    return result;
- }
- 
- 
-@@ -1242,25 +1177,21 @@
- // -------------------------------------------------------------------------------
- - (int)numberOfRowsInTableView:(NSTableView *)aTableView
- {
--	int rowCount = 0;
--	//NSMutableArray *cellArray = nil;
--	switch([aTableView tag]){
--		case TABLE_TOKENS_LIST:
--			if(tokenList)  rowCount = [tokenList count];
--			break;
--			
--		case TABLE_CELL_LIST:
--			//cellArray = [afsProperty getCellList];
--			if(filteredCellDB)  rowCount = [filteredCellDB count];
--			break;
--			
--		case TABLE_LINK_LIST:
--			if(linkConfiguration)  rowCount = [linkConfiguration count];
--			break;
--
--			
--	}	
--	return rowCount;  
-+    int rowCount = 0;
-+    switch([aTableView tag]){
-+    case TABLE_TOKENS_LIST:
-+	if(tokenList)  rowCount = [tokenList count];
-+	break;
-+
-+    case TABLE_CELL_LIST:
-+	if(filteredCellDB)  rowCount = [filteredCellDB count];
-+	break;
-+
-+    case TABLE_LINK_LIST:
-+	if(linkConfiguration)  rowCount = [linkConfiguration count];
-+	break;
-+    }
-+    return rowCount;
- }
- @end
- 
-@@ -1271,22 +1202,21 @@
- // -------------------------------------------------------------------------------
- - (BOOL)selectionShouldChangeInTableView:(NSTableView *)aTable
- {
--	switch([aTable tag]){
--		case TABLE_TOKENS_LIST:
--			
--			break;
--			
--		case TABLE_CELL_LIST:
--			[self tableViewCellmanageButtonState:[aTable selectedRow]];
--			break;
--			
--		case TABLE_LINK_LIST:
--			break;
--			
--			
--	}	
-+    switch([aTable tag]){
-+    case TABLE_TOKENS_LIST:
-+	break;
- 	
--	return YES;
-+    case TABLE_CELL_LIST:
-+	[self tableViewCellmanageButtonState:[aTable selectedRow]];
-+	break;
-+
-+    case TABLE_LINK_LIST:
-+	break;
-+
-+
-+    }
-+
-+    return YES;
- }
- 
- // -------------------------------------------------------------------------------
-@@ -1294,56 +1224,50 @@
- // -------------------------------------------------------------------------------
- - (BOOL)tableView:(NSTableView *)aTable shouldSelectRow:(int)aRow
- {
--	switch([aTable tag]){
--		case TABLE_TOKENS_LIST:
--			
--			break;
--			
--		case TABLE_CELL_LIST:
--			[self tableViewCellmanageButtonState:aRow];
--			break;
--			
--		case TABLE_LINK_LIST:
--			break;
--			
--			
--	}
-+    switch([aTable tag]){
-+    case TABLE_TOKENS_LIST:
-+	break;
-+
-+    case TABLE_CELL_LIST:
-+	[self tableViewCellmanageButtonState:aRow];
-+	break;
- 	
--	return YES;
-+    case TABLE_LINK_LIST:
-+	break;
-+    }
-+    return YES;
- }
- 
- // -------------------------------------------------------------------------------
- //  tableView:
- // -------------------------------------------------------------------------------
- - (void)tableViewSelectionDidChange:(NSNotification *)aNotification {
--	NSTableView *aTable = [aNotification object];
--	switch([aTable tag]){
--		case TABLE_TOKENS_LIST:
--			break;
--			
--		case TABLE_CELL_LIST:
--			break;
--			
--		case TABLE_LINK_LIST:
--			[self tableViewLinkmanageButtonState:[aTable selectedRowIndexes]];
--			break;
--			
--			
--	}
-+    NSTableView *aTable = [aNotification object];
-+    switch([aTable tag]){
-+    case TABLE_TOKENS_LIST:
-+	break;
-+
-+    case TABLE_CELL_LIST:
-+	break;
-+
-+    case TABLE_LINK_LIST:
-+	[self tableViewLinkmanageButtonState:[aTable selectedRowIndexes]];
-+	break;
-+    }
- }
- // -------------------------------------------------------------------------------
- //  manageButtonState:
- // -------------------------------------------------------------------------------
- -(void) tableViewCellmanageButtonState:(int) rowSelected  {
--	[((NSControl*) cellIpButton) setEnabled:rowSelected >= 0];
--	[((NSControl*) removeCellButton) setEnabled:rowSelected >= 0];
-+    [cellIpButton setEnabled:rowSelected >= 0];
-+    [removeCellButton setEnabled:rowSelected >= 0];
- }
- 
- // -------------------------------------------------------------------------------
- //  manageButtonState:
- // -------------------------------------------------------------------------------
- -(void) tableViewLinkmanageButtonState:(NSIndexSet *) rowsSelectedIndex {
--	[buttonRemoveLink setEnabled:[rowsSelectedIndex count]>0];
-+    [buttonRemoveLink setEnabled:[rowsSelectedIndex count]>0];
- }
- @end
- 
-@@ -1355,9 +1279,9 @@
- - (void)didEndSheet:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
- {
-     [sheet orderOut:self];
--	//Filter the cellServDb and allocate filtered array
--	[self searchCellTextEvent:nil];
--	[((NSTableView*)cellList) reloadData];
-+    //Filter the cellServDb and allocate filtered array
-+    [self searchCellTextEvent:nil];
-+    [cellList reloadData];
- }
- 
- // -------------------------------------------------------------------------------
-@@ -1365,18 +1289,17 @@
- // -------------------------------------------------------------------------------
- - (void)didEndCredentialSheet:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
- {
--	if([((TokenCredentialController*)credentialCommander) takenToken] == YES){
--		/*[AFSPropertyManager klog:[((TokenCredentialController*)credentialCommander) uName] 
--							uPwd:[((TokenCredentialController*)credentialCommander) uPwd] ];*/
--		[afsProperty getTokens:true 
--						   usr:[((TokenCredentialController*)credentialCommander) uName] 
--						   pwd:[((TokenCredentialController*)credentialCommander) uPwd]];
--	}
-+    if([((TokenCredentialController*)credentialCommander) takenToken] == YES){
-+	/*[AFSPropertyManager klog:[((TokenCredentialController*)credentialCommander) uName]
-+	  uPwd:[((TokenCredentialController*)credentialCommander) uPwd] ];*/
-+	[afsProperty getTokens:true
-+		     usr:[((TokenCredentialController*)credentialCommander) uName]
-+		     pwd:[((TokenCredentialController*)credentialCommander) uPwd]];
-+    }
-     [sheet orderOut:self];
--	[self refreshTokens:nil];
--	//Inform afs menuextra to updata afs status
--	[[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAFSMenuExtraID object:kMExtraAFSStateChange];
--
-+    [self refreshTokens:nil];
-+    //Inform afs menuextra to updata afs status
-+    [[NSDistributedNotificationCenter defaultCenter] postNotificationName:kAFSMenuExtraID object:kMExtraAFSStateChange];
- }
- 
- // -------------------------------------------------------------------------------
-@@ -1384,7 +1307,7 @@
- // -------------------------------------------------------------------------------
- - (void)didEndInfoSheet:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
- {
--	[sheet orderOut:self];
-+    [sheet orderOut:self];
- }
- 
- // -------------------------------------------------------------------------------
-@@ -1392,9 +1315,8 @@
- // -------------------------------------------------------------------------------
- - (void)didEndSymlinkSheet:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
- {
--	[lyncCreationSheet orderOut:self];
--	[self readPreferenceFile];
--	[tableViewLink reloadData];
--	
-+    [lyncCreationSheet orderOut:self];
-+    [self readPreferenceFile];
-+    [tableViewLink reloadData];
- }
- @end
-diff --git a/src/platform/DARWIN/AFSPreference/AFSPropertyManager.h b/src/platform/DARWIN/AFSPreference/AFSPropertyManager.h
-index e229c76..0ed4cd4 100644
---- a/src/platform/DARWIN/AFSPreference/AFSPropertyManager.h
-+++ b/src/platform/DARWIN/AFSPreference/AFSPropertyManager.h
-@@ -29,7 +29,7 @@
- 	NSString *afsRootMountPoint;
- 	int statCacheEntry;
- 	int dCacheDim;
--	int	cacheDimension;
-+	int cacheDimension;
- 	int daemonNumber;
- 	int nVolEntry;
- 	bool dynRoot;
-diff --git a/src/platform/DARWIN/AFSPreference/AFSPropertyManager.m b/src/platform/DARWIN/AFSPreference/AFSPropertyManager.m
-index fb696da..e96fc74 100644
---- a/src/platform/DARWIN/AFSPreference/AFSPropertyManager.m
-+++ b/src/platform/DARWIN/AFSPreference/AFSPropertyManager.m
-@@ -92,7 +92,6 @@
- 	if(cellList) {[cellList removeAllObjects];[cellList release];}
- 	if(cellName) {[cellName release];}
- 	if(futil) {
--		[futil endAutorization];
- 		[futil release];
- 		futil = nil; 
- 	}
-@@ -360,7 +359,7 @@
- 	
- 	NSCharacterSet *returnCS = [NSCharacterSet characterSetWithCharactersInString:@"\n"];
- 	NSFileHandle *fileH = [NSFileHandle fileHandleForReadingAtPath:filePath];
--	if (!fileH) return nil;
-+	if (!fileH) return 0;
- 	NSData *fileHData = [fileH readDataToEndOfFile];
- 	NSString *cacheInfoStrData = [[NSString alloc] initWithData:fileHData
- 													   encoding:NSASCIIStringEncoding];
-@@ -465,7 +464,7 @@
- // -------------------------------------------------------------------------------
- -(int) readOldAfsdOption:(NSString*)filePath
- {
--	if(!filePath) return nil;
-+	if(!filePath) return 0;
- 	return [self readAFSDParamLineContent:[[NSString stringWithContentsOfFile:filePath 
- 															  encoding:NSUTF8StringEncoding 
- 																 error:nil] stringByStandardizingPath]];
-@@ -475,7 +474,7 @@
- //  readAFSDParamLineContent:
- // -------------------------------------------------------------------------------
- -(int) readAFSDParamLineContent:(NSString*) paramLine{
--	if (!paramLine) return nil;
-+	if (!paramLine) return 0;
- 
- 	NSString *tmpString = nil;
- 	NSCharacterSet *space = [NSCharacterSet characterSetWithCharactersInString:@" "];
-@@ -537,16 +536,16 @@
- // -------------------------------------------------------------------------------
- -(int) readNewAfsdOption:(NSString*)filePath
- {
--	if(!filePath) return nil;
--	NSString *currentLines = nil;
--	NSString *paramValue = nil;
--	NSScanner *lineScanner = nil;
-+	if(!filePath) return 0;
-+	NSString *currentLines = 0;
-+	NSString *paramValue = 0;
-+	NSScanner *lineScanner = 0;
- 	
- 	//Get file content
- 	NSString *newAFSDConfContent = [NSString stringWithContentsOfFile:filePath 
- 															 encoding:NSUTF8StringEncoding 
- 																error:nil];
--	if (!newAFSDConfContent) return nil;
-+	if (!newAFSDConfContent) return 0;
- 	
- 	//get lines in array
- 	NSArray *confLines = [newAFSDConfContent componentsSeparatedByString:@"\n"];
-@@ -1078,23 +1077,18 @@
- // -------------------------------------------------------------------------------
- -(void) shutdown
- {
--	@try {
--		const char *stopArgs[] = {"stop", 0L};
--		if([[AuthUtil shared] autorize] == noErr) {
--			[[AuthUtil shared] execUnixCommand:AFS_DAEMON_STARTUPSCRIPT
--										  args:stopArgs
--										output:nil];
--		}
--
--	}
--	@catch (NSException * e) {
--		@throw e;
--	}
--	@finally {
--	
--	}
--	
--	
-+  NSString *rootHelperApp = [[NSBundle bundleForClass:[self class]] pathForResource:@"afshlp" ofType:@""];
-+    @try {
-+	const char *stopArgs[] = {AFS_DAEMON_STARTUPSCRIPT, "stop", 0L};
-+	[[AuthUtil shared] execUnixCommand:[rootHelperApp fileSystemRepresentation]
-+			   args:stopArgs
-+			   output:nil];
-+    }
-+    @catch (NSException * e) {
-+	@throw e;
-+    }
-+    @finally {
-+    }
- }
- 
- 
-@@ -1103,24 +1097,20 @@
- // -------------------------------------------------------------------------------
- -(void) startup
- {
--	@try {
--		const char *startArgs[] = {"start", 0L};
--		if([[AuthUtil shared] autorize] == noErr) {
--			[[AuthUtil shared] execUnixCommand:AFS_DAEMON_STARTUPSCRIPT
--										  args:startArgs
--										output:nil];
--		}
--
--	}
--	@catch (NSException * e) {
--		@throw e;
--	}
--	@finally {
--
--	}
--
--
-+  NSString *rootHelperApp = [[NSBundle bundleForClass:[self class]] pathForResource:@"afshlp" ofType:@""];
-+    @try {
-+	const char *startArgs[] = {AFS_DAEMON_STARTUPSCRIPT, "start", 0L};
-+	[[AuthUtil shared] execUnixCommand:[rootHelperApp fileSystemRepresentation]
-+			   args:startArgs
-+			   output:nil];
-+    }
-+    @catch (NSException * e) {
-+	@throw e;
-+    }
-+    @finally {
-+    }
- }
-+
- // -------------------------------------------------------------------------------
- //  -(void) saveConfigurationFiles
- // -------------------------------------------------------------------------------
-@@ -1166,13 +1156,6 @@
- 							 encoding:  NSUTF8StringEncoding 
- 								error:&err];
- 		
--		// backup original file
--		if([futil startAutorization] != noErr){
--			@throw [NSException exceptionWithName:@"saveConfigurationFiles:startAutorization" 
--										   reason:kUserNotAuth
--										 userInfo:nil];
--		}
--
- 		if(makeBackup) [self backupConfigurationFiles];
- 
- 		// install ThisCell
-@@ -1220,12 +1203,6 @@
- 		[self writeAfsdOption:useAfsdConfVersion?AFSD_TMP_NEW_PREFERENCE_FILE:AFSD_TMP_OLD_PREFERENCE_FILE];
- 		
- 		// backup original file
--		if([futil startAutorization] != noErr){
--			@throw [NSException exceptionWithName:@"AFSPropertyManager:saveCacheConfigurationFiles:startAutorization" 
--										   reason:kUserNotAuth
--										 userInfo:nil];
--		}
--		
- 		if(makeBackup) {
- 			//cacheinfo
- 			[self backupFile:@"/etc/cacheinfo"];
-@@ -1294,11 +1271,6 @@
- {	
- 
- 	@try{
--		if([futil startAutorization] != noErr){
--			@throw [NSException exceptionWithName:@"backupConfigurationFiles:startAutorization" 
--										   reason:kUserNotAuth
--										 userInfo:nil];
--		}
- 		//This cell
- 		[self backupFile:@"/etc/ThisCell"];
- 	
-@@ -1308,7 +1280,6 @@
- 		//TheseCell
- 		[self backupFile:@"/etc/TheseCells"];
- 		
--		//[futil endAutorization];
- 	} @catch (NSException *e) {
- 		@throw e;
- 	} @finally {
-@@ -1329,8 +1300,6 @@
- 		
- 		//Check if the file at path exist
- 		NSFileManager *fileManager = [NSFileManager defaultManager];
--		
--		//check if th efile exist
- 		if(![fileManager fileExistsAtPath:[filePath stringByExpandingTildeInPath]]) return;
- 		
- 		// store the source path
-diff --git a/src/platform/DARWIN/AFSPreference/English.lproj/OpenAFSPreference.xib b/src/platform/DARWIN/AFSPreference/English.lproj/OpenAFSPreference.xib
-index 80acbdf..b1190ba 100644
---- a/src/platform/DARWIN/AFSPreference/English.lproj/OpenAFSPreference.xib
-+++ b/src/platform/DARWIN/AFSPreference/English.lproj/OpenAFSPreference.xib
-@@ -2,30 +2,46 @@
- <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
- 	<data>
- 		<int key="IBDocument.SystemTarget">1050</int>
--		<string key="IBDocument.SystemVersion">10C540</string>
--		<string key="IBDocument.InterfaceBuilderVersion">762</string>
--		<string key="IBDocument.AppKitVersion">1038.25</string>
--		<string key="IBDocument.HIToolboxVersion">458.00</string>
-+		<string key="IBDocument.SystemVersion">11D50d</string>
-+		<string key="IBDocument.InterfaceBuilderVersion">2182</string>
-+		<string key="IBDocument.AppKitVersion">1138.32</string>
-+		<string key="IBDocument.HIToolboxVersion">568.00</string>
- 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
- 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
--			<string key="NS.object.0">762</string>
-+			<string key="NS.object.0">2182</string>
- 		</object>
--		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
-+		<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
- 			<bool key="EncodedWithXMLCoder">YES</bool>
--			<integer value="101"/>
-+			<string>NSTabView</string>
-+			<string>NSStepper</string>
-+			<string>NSButton</string>
-+			<string>NSCustomObject</string>
-+			<string>NSTableView</string>
-+			<string>NSCustomView</string>
-+			<string>NSSearchField</string>
-+			<string>NSTextField</string>
-+			<string>NSNumberFormatter</string>
-+			<string>NSSearchFieldCell</string>
-+			<string>NSWindowTemplate</string>
-+			<string>NSTextFieldCell</string>
-+			<string>NSStepperCell</string>
-+			<string>NSButtonCell</string>
-+			<string>NSTableColumn</string>
-+			<string>NSBox</string>
-+			<string>NSView</string>
-+			<string>NSScrollView</string>
-+			<string>NSTabViewItem</string>
-+			<string>NSTextView</string>
-+			<string>NSScroller</string>
-+			<string>NSTableHeaderView</string>
- 		</object>
- 		<object class="NSArray" key="IBDocument.PluginDependencies">
- 			<bool key="EncodedWithXMLCoder">YES</bool>
- 			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 		</object>
- 		<object class="NSMutableDictionary" key="IBDocument.Metadata">
--			<bool key="EncodedWithXMLCoder">YES</bool>
--			<object class="NSArray" key="dict.sortedKeys" id="0">
--				<bool key="EncodedWithXMLCoder">YES</bool>
--			</object>
--			<object class="NSMutableArray" key="dict.values">
--				<bool key="EncodedWithXMLCoder">YES</bool>
--			</object>
-+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
-+			<integer value="1" key="NS.object.0"/>
- 		</object>
- 		<object class="NSMutableArray" key="IBDocument.RootObjects" id="84888716">
- 			<bool key="EncodedWithXMLCoder">YES</bool>
-@@ -48,7 +64,7 @@
- 				<object class="NSMutableString" key="NSViewClass">
- 					<characters key="NS.bytes">View</characters>
- 				</object>
--				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
-+				<nil key="NSUserInterfaceItemIdentifier"/>
- 				<object class="NSView" key="NSWindowView" id="645279396">
- 					<reference key="NSNextResponder"/>
- 					<int key="NSvFlags">274</int>
-@@ -59,6 +75,8 @@
- 							<int key="NSvFlags">256</int>
- 							<string key="NSFrame">{{17, 1}, {304, 14}}</string>
- 							<reference key="NSSuperview" ref="645279396"/>
-+							<reference key="NSWindow"/>
-+							<reference key="NSNextKeyView" ref="1047946385"/>
- 							<bool key="NSEnabled">YES</bool>
- 							<object class="NSTextFieldCell" key="NSCell" id="947523856">
- 								<int key="NSCellFlags">67239424</int>
-@@ -97,7 +115,7 @@
- 								<bool key="EncodedWithXMLCoder">YES</bool>
- 								<object class="NSView" id="520583273">
- 									<reference key="NSNextResponder" ref="748501112"/>
--									<int key="NSvFlags">256</int>
-+									<int key="NSvFlags">274</int>
- 									<object class="NSMutableArray" key="NSSubviews">
- 										<bool key="EncodedWithXMLCoder">YES</bool>
- 										<object class="NSButton" id="709840556">
-@@ -105,6 +123,8 @@
- 											<int key="NSvFlags">268</int>
- 											<string key="NSFrame">{{13, 7}, {109, 28}}</string>
- 											<reference key="NSSuperview" ref="520583273"/>
-+											<reference key="NSWindow"/>
-+											<reference key="NSNextKeyView" ref="713307252"/>
- 											<bool key="NSEnabled">YES</bool>
- 											<object class="NSButtonCell" key="NSCell" id="675447498">
- 												<int key="NSCellFlags">67239424</int>
-@@ -132,6 +152,8 @@
- 											<int key="NSvFlags">265</int>
- 											<string key="NSFrame">{{526, 9}, {21, 23}}</string>
- 											<reference key="NSSuperview" ref="520583273"/>
-+											<reference key="NSWindow"/>
-+											<reference key="NSNextKeyView" ref="739317740"/>
- 											<bool key="NSEnabled">YES</bool>
- 											<object class="NSButtonCell" key="NSCell" id="1009755861">
- 												<int key="NSCellFlags">-2080244224</int>
-@@ -159,6 +181,8 @@
- 											<int key="NSvFlags">268</int>
- 											<string key="NSFrame">{{138, 13}, {117, 18}}</string>
- 											<reference key="NSSuperview" ref="520583273"/>
-+											<reference key="NSWindow"/>
-+											<reference key="NSNextKeyView" ref="871603218"/>
- 											<bool key="NSEnabled">YES</bool>
- 											<object class="NSButtonCell" key="NSCell" id="98390178">
- 												<int key="NSCellFlags">67239424</int>
-@@ -184,10 +208,14 @@
- 									</object>
- 									<string key="NSFrame">{{1, 1}, {562, 43}}</string>
- 									<reference key="NSSuperview" ref="748501112"/>
-+									<reference key="NSWindow"/>
-+									<reference key="NSNextKeyView" ref="709840556"/>
- 								</object>
- 							</object>
- 							<string key="NSFrame">{{17, 423}, {564, 45}}</string>
- 							<reference key="NSSuperview" ref="645279396"/>
-+							<reference key="NSWindow"/>
-+							<reference key="NSNextKeyView" ref="520583273"/>
- 							<string key="NSOffsets">{0, 0}</string>
- 							<object class="NSTextFieldCell" key="NSTitleCell">
- 								<int key="NSCellFlags">67239424</int>
-@@ -223,6 +251,8 @@
- 							<int key="NSvFlags">274</int>
- 							<string key="NSFrame">{{13, 15}, {572, 401}}</string>
- 							<reference key="NSSuperview" ref="645279396"/>
-+							<reference key="NSWindow"/>
-+							<reference key="NSNextKeyView" ref="1020318718"/>
- 							<object class="NSMutableArray" key="NSTabViewItems">
- 								<bool key="EncodedWithXMLCoder">YES</bool>
- 								<object class="NSTabViewItem" id="269508902">
-@@ -249,6 +279,8 @@
- 																<int key="NSvFlags">256</int>
- 																<string key="NSFrameSize">{516, 140}</string>
- 																<reference key="NSSuperview" ref="457121079"/>
-+																<reference key="NSWindow"/>
-+																<reference key="NSNextKeyView" ref="884311606"/>
- 																<int key="NSTag">1</int>
- 																<bool key="NSEnabled">YES</bool>
- 																<object class="NSTableHeaderView" key="NSHeaderView" id="1048519426">
-@@ -256,13 +288,14 @@
- 																	<int key="NSvFlags">256</int>
- 																	<string key="NSFrameSize">{516, 17}</string>
- 																	<reference key="NSSuperview" ref="214413149"/>
-+																	<reference key="NSWindow"/>
-+																	<reference key="NSNextKeyView" ref="457121079"/>
- 																	<reference key="NSTableView" ref="313963250"/>
- 																</object>
--																<object class="_NSCornerView" key="NSCornerView" id="360324124">
--																	<reference key="NSNextResponder" ref="440720679"/>
-+																<object class="_NSCornerView" key="NSCornerView">
-+																	<nil key="NSNextResponder"/>
- 																	<int key="NSvFlags">-2147483392</int>
- 																	<string key="NSFrame">{{-22, 0}, {12, 17}}</string>
--																	<reference key="NSSuperview" ref="440720679"/>
- 																</object>
- 																<object class="NSMutableArray" key="NSTableColumns">
- 																	<bool key="EncodedWithXMLCoder">YES</bool>
-@@ -318,7 +351,7 @@
- 																	</object>
- 																</object>
- 																<double key="NSRowHeight">12</double>
--																<int key="NSTvFlags">-692060160</int>
-+																<int key="NSTvFlags">-155189248</int>
- 																<reference key="NSDelegate"/>
- 																<reference key="NSDataSource"/>
- 																<int key="NSGridStyleMask">2</int>
-@@ -327,10 +360,12 @@
- 																<int key="NSDraggingSourceMaskForNonLocal">0</int>
- 																<bool key="NSAllowsTypeSelect">YES</bool>
- 																<int key="NSTableViewDraggingDestinationStyle">0</int>
-+																<int key="NSTableViewGroupRowStyle">1</int>
- 															</object>
- 														</object>
- 														<string key="NSFrame">{{1, 17}, {516, 140}}</string>
- 														<reference key="NSSuperview" ref="440720679"/>
-+														<reference key="NSWindow"/>
- 														<reference key="NSNextKeyView" ref="313963250"/>
- 														<reference key="NSDocView" ref="313963250"/>
- 														<reference key="NSBGColor" ref="252569531"/>
-@@ -341,6 +376,8 @@
- 														<int key="NSvFlags">-2147483392</int>
- 														<string key="NSFrame">{{494, 17}, {11, 80}}</string>
- 														<reference key="NSSuperview" ref="440720679"/>
-+														<reference key="NSWindow"/>
-+														<reference key="NSNextKeyView" ref="258996751"/>
- 														<int key="NSsFlags">256</int>
- 														<reference key="NSTarget" ref="440720679"/>
- 														<string key="NSAction">_doScroller:</string>
-@@ -351,6 +388,8 @@
- 														<int key="NSvFlags">-2147483392</int>
- 														<string key="NSFrame">{{1, 97}, {505, 11}}</string>
- 														<reference key="NSSuperview" ref="440720679"/>
-+														<reference key="NSWindow"/>
-+														<reference key="NSNextKeyView" ref="893552286"/>
- 														<int key="NSsFlags">257</int>
- 														<reference key="NSTarget" ref="440720679"/>
- 														<string key="NSAction">_doScroller:</string>
-@@ -365,22 +404,22 @@
- 														</object>
- 														<string key="NSFrame">{{1, 0}, {516, 17}}</string>
- 														<reference key="NSSuperview" ref="440720679"/>
-+														<reference key="NSWindow"/>
- 														<reference key="NSNextKeyView" ref="1048519426"/>
- 														<reference key="NSDocView" ref="1048519426"/>
- 														<reference key="NSBGColor" ref="252569531"/>
- 														<int key="NScvFlags">4</int>
- 													</object>
--													<reference ref="360324124"/>
- 												</object>
- 												<string key="NSFrame">{{17, 199}, {518, 158}}</string>
- 												<reference key="NSSuperview" ref="1020318718"/>
--												<reference key="NSNextKeyView" ref="457121079"/>
--												<int key="NSsFlags">562</int>
-+												<reference key="NSWindow"/>
-+												<reference key="NSNextKeyView" ref="214413149"/>
-+												<int key="NSsFlags">133682</int>
- 												<reference key="NSVScroller" ref="884311606"/>
- 												<reference key="NSHScroller" ref="258996751"/>
- 												<reference key="NSContentView" ref="457121079"/>
- 												<reference key="NSHeaderClipView" ref="214413149"/>
--												<reference key="NSCornerView" ref="360324124"/>
- 												<bytes key="NSScrollAmts">QSAAAEEgAABBYAAAQWAAAA</bytes>
- 											</object>
- 											<object class="NSButton" id="210387551">
-@@ -388,6 +427,8 @@
- 												<int key="NSvFlags">265</int>
- 												<string key="NSFrame">{{329, 164}, {80, 28}}</string>
- 												<reference key="NSSuperview" ref="1020318718"/>
-+												<reference key="NSWindow"/>
-+												<reference key="NSNextKeyView" ref="977607312"/>
- 												<bool key="NSEnabled">YES</bool>
- 												<object class="NSButtonCell" key="NSCell" id="327131725">
- 													<int key="NSCellFlags">67239424</int>
-@@ -411,6 +452,8 @@
- 												<int key="NSvFlags">265</int>
- 												<string key="NSFrame">{{407, 164}, {133, 28}}</string>
- 												<reference key="NSSuperview" ref="1020318718"/>
-+												<reference key="NSWindow"/>
-+												<reference key="NSNextKeyView" ref="802059200"/>
- 												<bool key="NSEnabled">YES</bool>
- 												<object class="NSButtonCell" key="NSCell" id="73578210">
- 													<int key="NSCellFlags">67239424</int>
-@@ -434,6 +477,8 @@
- 												<int key="NSvFlags">268</int>
- 												<string key="NSFrame">{{14, 172}, {86, 18}}</string>
- 												<reference key="NSSuperview" ref="1020318718"/>
-+												<reference key="NSWindow"/>
-+												<reference key="NSNextKeyView" ref="343070533"/>
- 												<bool key="NSEnabled">YES</bool>
- 												<object class="NSButtonCell" key="NSCell" id="428850916">
- 													<int key="NSCellFlags">67239424</int>
-@@ -458,7 +503,7 @@
- 													<bool key="EncodedWithXMLCoder">YES</bool>
- 													<object class="NSView" id="1000204505">
- 														<reference key="NSNextResponder" ref="184192603"/>
--														<int key="NSvFlags">256</int>
-+														<int key="NSvFlags">274</int>
- 														<object class="NSMutableArray" key="NSSubviews">
- 															<bool key="EncodedWithXMLCoder">YES</bool>
- 															<object class="NSButton" id="478533800">
-@@ -466,6 +511,8 @@
- 																<int key="NSvFlags">268</int>
- 																<string key="NSFrame">{{5, 32}, {75, 18}}</string>
- 																<reference key="NSSuperview" ref="1000204505"/>
-+																<reference key="NSWindow"/>
-+																<reference key="NSNextKeyView" ref="541208829"/>
- 																<bool key="NSEnabled">YES</bool>
- 																<object class="NSButtonCell" key="NSCell" id="989004902">
- 																	<int key="NSCellFlags">67239424</int>
-@@ -488,6 +535,8 @@
- 																<int key="NSvFlags">268</int>
- 																<string key="NSFrame">{{5, 12}, {167, 18}}</string>
- 																<reference key="NSSuperview" ref="1000204505"/>
-+																<reference key="NSWindow"/>
-+																<reference key="NSNextKeyView" ref="210387551"/>
- 																<bool key="NSEnabled">YES</bool>
- 																<object class="NSButtonCell" key="NSCell" id="95048095">
- 																	<int key="NSCellFlags">67239424</int>
-@@ -510,6 +559,8 @@
- 																<int key="NSvFlags">268</int>
- 																<string key="NSFrame">{{5, 52}, {170, 18}}</string>
- 																<reference key="NSSuperview" ref="1000204505"/>
-+																<reference key="NSWindow"/>
-+																<reference key="NSNextKeyView" ref="478533800"/>
- 																<bool key="NSEnabled">YES</bool>
- 																<object class="NSButtonCell" key="NSCell" id="855912809">
- 																	<int key="NSCellFlags">67239424</int>
-@@ -530,10 +581,14 @@
- 														</object>
- 														<string key="NSFrame">{{1, 1}, {193, 78}}</string>
- 														<reference key="NSSuperview" ref="184192603"/>
-+														<reference key="NSWindow"/>
-+														<reference key="NSNextKeyView" ref="239701474"/>
- 													</object>
- 												</object>
- 												<string key="NSFrame">{{113, 97}, {195, 94}}</string>
- 												<reference key="NSSuperview" ref="1020318718"/>
-+												<reference key="NSWindow"/>
-+												<reference key="NSNextKeyView" ref="1000204505"/>
- 												<string key="NSOffsets">{0, 0}</string>
- 												<object class="NSTextFieldCell" key="NSTitleCell">
- 													<int key="NSCellFlags">67239424</int>
-@@ -557,6 +612,8 @@
- 												<int key="NSvFlags">268</int>
- 												<string key="NSFrame">{{14, 152}, {96, 18}}</string>
- 												<reference key="NSSuperview" ref="1020318718"/>
-+												<reference key="NSWindow"/>
-+												<reference key="NSNextKeyView" ref="184192603"/>
- 												<bool key="NSEnabled">YES</bool>
- 												<object class="NSButtonCell" key="NSCell" id="237101992">
- 													<int key="NSCellFlags">67239424</int>
-@@ -574,9 +631,21 @@
- 													<int key="NSPeriodicInterval">25</int>
- 												</object>
- 											</object>
-+											<object class="NSCustomView" id="802059200">
-+												<reference key="NSNextResponder" ref="1020318718"/>
-+												<int key="NSvFlags">268</int>
-+												<string key="NSFrame">{{3, 3}, {400, 40}}</string>
-+												<reference key="NSSuperview" ref="1020318718"/>
-+												<reference key="NSWindow"/>
-+												<reference key="NSNextKeyView"/>
-+												<string key="NSReuseIdentifierKey">_NS:9</string>
-+												<string key="NSClassName">SFAuthorizationView</string>
-+											</object>
- 										</object>
- 										<string key="NSFrame">{{10, 25}, {552, 363}}</string>
- 										<reference key="NSSuperview" ref="739317740"/>
-+										<reference key="NSWindow"/>
-+										<reference key="NSNextKeyView" ref="440720679"/>
- 									</object>
- 									<string key="NSLabel">Tokens</string>
- 									<reference key="NSColor" ref="568311573"/>
-@@ -632,7 +701,7 @@
- 																	<string>AXDescription</string>
- 																	<string>NSAccessibilityEncodedAttributesValueType</string>
- 																</object>
--																<object class="NSMutableArray" key="dict.values">
-+																<object class="NSArray" key="dict.values">
- 																	<bool key="EncodedWithXMLCoder">YES</bool>
- 																	<string>cancel</string>
- 																	<integer value="1"/>
-@@ -926,7 +995,7 @@
- 																<reference key="NSBackgroundColor" ref="400556243"/>
- 																<reference key="NSGridColor" ref="850792713"/>
- 																<double key="NSRowHeight">15</double>
--																<int key="NSTvFlags">1522532352</int>
-+																<int key="NSTvFlags">2059403264</int>
- 																<reference key="NSDelegate"/>
- 																<reference key="NSDataSource"/>
- 																<int key="NSGridStyleMask">1</int>
-@@ -935,6 +1004,7 @@
- 																<int key="NSDraggingSourceMaskForNonLocal">0</int>
- 																<bool key="NSAllowsTypeSelect">YES</bool>
- 																<int key="NSTableViewDraggingDestinationStyle">0</int>
-+																<int key="NSTableViewGroupRowStyle">1</int>
- 															</object>
- 														</object>
- 														<string key="NSFrame">{{1, 17}, {516, 271}}</string>
-@@ -984,12 +1054,11 @@
- 												<string key="NSFrame">{{15, 41}, {518, 289}}</string>
- 												<reference key="NSSuperview" ref="1069727156"/>
- 												<reference key="NSNextKeyView" ref="259172039"/>
--												<int key="NSsFlags">562</int>
-+												<int key="NSsFlags">133682</int>
- 												<reference key="NSVScroller" ref="177605134"/>
- 												<reference key="NSHScroller" ref="172641834"/>
- 												<reference key="NSContentView" ref="259172039"/>
- 												<reference key="NSHeaderClipView" ref="281754774"/>
--												<reference key="NSCornerView" ref="772760699"/>
- 												<bytes key="NSScrollAmts">QSAAAEEgAABBiAAAQYgAAA</bytes>
- 											</object>
- 											<object class="NSTextField" id="747536303">
-@@ -1032,7 +1101,7 @@
- 													<bool key="EncodedWithXMLCoder">YES</bool>
- 													<object class="NSView" id="1006532054">
- 														<reference key="NSNextResponder" ref="1056952440"/>
--														<int key="NSvFlags">256</int>
-+														<int key="NSvFlags">274</int>
- 														<object class="NSMutableArray" key="NSSubviews">
- 															<bool key="EncodedWithXMLCoder">YES</bool>
- 															<object class="NSTextField" id="748314809">
-@@ -1075,7 +1144,7 @@
- 																				<string>numberStyle</string>
- 																				<string>positiveFormat</string>
- 																			</object>
--																			<object class="NSMutableArray" key="dict.values">
-+																			<object class="NSArray" key="dict.values">
- 																				<bool key="EncodedWithXMLCoder">YES</bool>
- 																				<integer value="1"/>
- 																				<integer value="1040"/>
-@@ -1096,12 +1165,12 @@
- 																		<nil key="NS.nil"/>
- 																		<object class="NSAttributedString" key="NS.nan">
- 																			<string key="NSString">NaN</string>
--																			<object class="NSDictionary" key="NSAttributes" id="383448102">
-+																			<object class="NSDictionary" key="NSAttributes" id="571560357">
- 																				<bool key="EncodedWithXMLCoder">YES</bool>
--																				<reference key="dict.sortedKeys" ref="0"/>
--																				<object class="NSMutableArray" key="dict.values">
-+																				<object class="NSArray" key="dict.sortedKeys" id="0">
- 																					<bool key="EncodedWithXMLCoder">YES</bool>
- 																				</object>
-+																				<reference key="dict.values" ref="0"/>
- 																			</object>
- 																		</object>
- 																		<real value="1000" key="NS.min"/>
-@@ -1159,7 +1228,7 @@
- 																				<string>minimumIntegerDigits</string>
- 																				<string>positiveFormat</string>
- 																			</object>
--																			<object class="NSMutableArray" key="dict.values">
-+																			<object class="NSArray" key="dict.values">
- 																				<bool key="EncodedWithXMLCoder">YES</bool>
- 																				<integer value="1"/>
- 																				<integer value="1040"/>
-@@ -1177,7 +1246,7 @@
- 																		<nil key="NS.nil"/>
- 																		<object class="NSAttributedString" key="NS.nan">
- 																			<string key="NSString">NaN</string>
--																			<reference key="NSAttributes" ref="383448102"/>
-+																			<reference key="NSAttributes" ref="571560357"/>
- 																		</object>
- 																		<real value="100" key="NS.min"/>
- 																		<reference key="NS.max" ref="139642944"/>
-@@ -1239,7 +1308,7 @@
- 																				<string>minimumIntegerDigits</string>
- 																				<string>positiveFormat</string>
- 																			</object>
--																			<object class="NSMutableArray" key="dict.values">
-+																			<object class="NSArray" key="dict.values">
- 																				<bool key="EncodedWithXMLCoder">YES</bool>
- 																				<integer value="1"/>
- 																				<integer value="1040"/>
-@@ -1258,7 +1327,7 @@
- 																		<nil key="NS.nil"/>
- 																		<object class="NSAttributedString" key="NS.nan">
- 																			<string key="NSString">NaN</string>
--																			<reference key="NSAttributes" ref="383448102"/>
-+																			<reference key="NSAttributes" ref="571560357"/>
- 																		</object>
- 																		<integer value="1" key="NS.min"/>
- 																		<reference key="NS.max" ref="139642944"/>
-@@ -1363,7 +1432,7 @@
- 																				<string>numberStyle</string>
- 																				<string>positiveFormat</string>
- 																			</object>
--																			<object class="NSMutableArray" key="dict.values">
-+																			<object class="NSArray" key="dict.values">
- 																				<bool key="EncodedWithXMLCoder">YES</bool>
- 																				<real value="0.0"/>
- 																				<real value="0.0"/>
-@@ -1387,7 +1456,7 @@
- 																		<nil key="NS.nil"/>
- 																		<object class="NSAttributedString" key="NS.nan">
- 																			<string key="NSString">NaN</string>
--																			<reference key="NSAttributes" ref="383448102"/>
-+																			<reference key="NSAttributes" ref="571560357"/>
- 																		</object>
- 																		<real value="10" key="NS.min"/>
- 																		<reference key="NS.max" ref="139642944"/>
-@@ -1482,7 +1551,7 @@
- 																				<string>numberStyle</string>
- 																				<string>positiveFormat</string>
- 																			</object>
--																			<object class="NSMutableArray" key="dict.values">
-+																			<object class="NSArray" key="dict.values">
- 																				<bool key="EncodedWithXMLCoder">YES</bool>
- 																				<integer value="1"/>
- 																				<integer value="1040"/>
-@@ -1501,7 +1570,7 @@
- 																		<nil key="NS.nil"/>
- 																		<object class="NSAttributedString" key="NS.nan">
- 																			<string key="NSString">NaN</string>
--																			<reference key="NSAttributes" ref="383448102"/>
-+																			<reference key="NSAttributes" ref="571560357"/>
- 																		</object>
- 																		<real value="10000" key="NS.min"/>
- 																		<reference key="NS.max" ref="139642944"/>
-@@ -1766,7 +1835,7 @@
- 																<reference key="NSBackgroundColor" ref="400556243"/>
- 																<reference key="NSGridColor" ref="850792713"/>
- 																<double key="NSRowHeight">17</double>
--																<int key="NSTvFlags">-557842432</int>
-+																<int key="NSTvFlags">-20971520</int>
- 																<reference key="NSDelegate"/>
- 																<reference key="NSDataSource"/>
- 																<int key="NSGridStyleMask">2</int>
-@@ -1775,6 +1844,7 @@
- 																<int key="NSDraggingSourceMaskForNonLocal">0</int>
- 																<bool key="NSAllowsTypeSelect">YES</bool>
- 																<int key="NSTableViewDraggingDestinationStyle">0</int>
-+																<int key="NSTableViewGroupRowStyle">1</int>
- 															</object>
- 														</object>
- 														<string key="NSFrame">{{1, 17}, {501, 283}}</string>
-@@ -1823,7 +1893,7 @@
- 												<string key="NSFrame">{{17, 41}, {518, 316}}</string>
- 												<reference key="NSSuperview" ref="786994103"/>
- 												<reference key="NSNextKeyView" ref="229139620"/>
--												<int key="NSsFlags">50</int>
-+												<int key="NSsFlags">133170</int>
- 												<reference key="NSVScroller" ref="497462431"/>
- 												<reference key="NSHScroller" ref="145484441"/>
- 												<reference key="NSContentView" ref="229139620"/>
-@@ -1913,7 +1983,7 @@
- 													<bool key="EncodedWithXMLCoder">YES</bool>
- 													<object class="NSView" id="660074200">
- 														<reference key="NSNextResponder" ref="731215349"/>
--														<int key="NSvFlags">256</int>
-+														<int key="NSvFlags">274</int>
- 														<object class="NSMutableArray" key="NSSubviews">
- 															<bool key="EncodedWithXMLCoder">YES</bool>
- 															<object class="NSTextField" id="628152029">
-@@ -1965,7 +2035,7 @@
- 																				<string>numberStyle</string>
- 																				<string>positiveInfinitySymbol</string>
- 																			</object>
--																			<object class="NSMutableArray" key="dict.values">
-+																			<object class="NSArray" key="dict.values">
- 																				<bool key="EncodedWithXMLCoder">YES</bool>
- 																				<boolean value="YES"/>
- 																				<integer value="1040"/>
-@@ -1990,7 +2060,7 @@
- 																		</object>
- 																		<object class="NSAttributedString" key="NS.nan">
- 																			<string key="NSString">NaN</string>
--																			<reference key="NSAttributes" ref="383448102"/>
-+																			<reference key="NSAttributes" ref="571560357"/>
- 																		</object>
- 																		<real value="60" key="NS.min"/>
- 																		<reference key="NS.max" ref="139642944"/>
-@@ -2057,7 +2127,7 @@
- 																				<string>numberStyle</string>
- 																				<string>positiveInfinitySymbol</string>
- 																			</object>
--																			<object class="NSMutableArray" key="dict.values">
-+																			<object class="NSArray" key="dict.values">
- 																				<bool key="EncodedWithXMLCoder">YES</bool>
- 																				<boolean value="YES"/>
- 																				<integer value="1040"/>
-@@ -2082,7 +2152,7 @@
- 																		</object>
- 																		<object class="NSAttributedString" key="NS.nan">
- 																			<string key="NSString">NaN</string>
--																			<reference key="NSAttributes" ref="383448102"/>
-+																			<reference key="NSAttributes" ref="571560357"/>
- 																		</object>
- 																		<real value="60" key="NS.min"/>
- 																		<reference key="NS.max" ref="139642944"/>
-@@ -2183,7 +2253,7 @@
- 																				<string>numberStyle</string>
- 																				<string>positiveInfinitySymbol</string>
- 																			</object>
--																			<object class="NSMutableArray" key="dict.values">
-+																			<object class="NSArray" key="dict.values">
- 																				<bool key="EncodedWithXMLCoder">YES</bool>
- 																				<boolean value="YES"/>
- 																				<integer value="1040"/>
-@@ -2206,7 +2276,7 @@
- 																		</object>
- 																		<object class="NSAttributedString" key="NS.nan">
- 																			<string key="NSString">NaN</string>
--																			<reference key="NSAttributes" ref="383448102"/>
-+																			<reference key="NSAttributes" ref="571560357"/>
- 																		</object>
- 																		<real value="0.0" key="NS.min"/>
- 																		<real value="30" key="NS.max"/>
-@@ -2269,7 +2339,7 @@
- 																				<string>numberStyle</string>
- 																				<string>positiveInfinitySymbol</string>
- 																			</object>
--																			<object class="NSMutableArray" key="dict.values">
-+																			<object class="NSArray" key="dict.values">
- 																				<bool key="EncodedWithXMLCoder">YES</bool>
- 																				<boolean value="YES"/>
- 																				<integer value="1040"/>
-@@ -2292,7 +2362,7 @@
- 																		</object>
- 																		<object class="NSAttributedString" key="NS.nan">
- 																			<string key="NSString">NaN</string>
--																			<reference key="NSAttributes" ref="383448102"/>
-+																			<reference key="NSAttributes" ref="571560357"/>
- 																		</object>
- 																		<real value="0.0" key="NS.min"/>
- 																		<real value="24" key="NS.max"/>
-@@ -2355,7 +2425,7 @@
- 																				<string>numberStyle</string>
- 																				<string>positiveInfinitySymbol</string>
- 																			</object>
--																			<object class="NSMutableArray" key="dict.values">
-+																			<object class="NSArray" key="dict.values">
- 																				<bool key="EncodedWithXMLCoder">YES</bool>
- 																				<boolean value="YES"/>
- 																				<integer value="1040"/>
-@@ -2378,7 +2448,7 @@
- 																		</object>
- 																		<object class="NSAttributedString" key="NS.nan">
- 																			<string key="NSString">NaN</string>
--																			<reference key="NSAttributes" ref="383448102"/>
-+																			<reference key="NSAttributes" ref="571560357"/>
- 																		</object>
- 																		<real value="0.0" key="NS.min"/>
- 																		<real value="60" key="NS.max"/>
-@@ -2473,7 +2543,7 @@
- 																				<string>numberStyle</string>
- 																				<string>positiveInfinitySymbol</string>
- 																			</object>
--																			<object class="NSMutableArray" key="dict.values">
-+																			<object class="NSArray" key="dict.values">
- 																				<bool key="EncodedWithXMLCoder">YES</bool>
- 																				<boolean value="YES"/>
- 																				<integer value="1040"/>
-@@ -2496,7 +2566,7 @@
- 																		</object>
- 																		<object class="NSAttributedString" key="NS.nan">
- 																			<string key="NSString">NaN</string>
--																			<reference key="NSAttributes" ref="383448102"/>
-+																			<reference key="NSAttributes" ref="571560357"/>
- 																		</object>
- 																		<real value="0.0" key="NS.min"/>
- 																		<real value="60" key="NS.max"/>
-@@ -2582,6 +2652,8 @@
- 							<int key="NSvFlags">289</int>
- 							<string key="NSFrame">{{323, 3}, {258, 11}}</string>
- 							<reference key="NSSuperview" ref="645279396"/>
-+							<reference key="NSWindow"/>
-+							<reference key="NSNextKeyView"/>
- 							<bool key="NSEnabled">YES</bool>
- 							<object class="NSTextFieldCell" key="NSCell" id="999146642">
- 								<int key="NSCellFlags">68288064</int>
-@@ -2600,9 +2672,12 @@
- 					</object>
- 					<string key="NSFrameSize">{595, 486}</string>
- 					<reference key="NSSuperview"/>
-+					<reference key="NSWindow"/>
-+					<reference key="NSNextKeyView" ref="748501112"/>
- 				</object>
--				<string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
--				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
-+				<string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
-+				<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
-+				<bool key="NSWindowIsRestorable">YES</bool>
- 			</object>
- 			<object class="NSWindowTemplate" id="52789773">
- 				<int key="NSWindowStyleMask">9</int>
-@@ -2616,7 +2691,7 @@
- 				<object class="NSMutableString" key="NSViewClass">
- 					<characters key="NS.bytes">View</characters>
- 				</object>
--				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
-+				<nil key="NSUserInterfaceItemIdentifier"/>
- 				<object class="NSView" key="NSWindowView" id="1017822711">
- 					<nil key="NSNextResponder"/>
- 					<int key="NSvFlags">256</int>
-@@ -2635,7 +2710,7 @@
- 										<object class="NSTextView" id="297493656">
- 											<reference key="NSNextResponder" ref="853671207"/>
- 											<int key="NSvFlags">2322</int>
--											<string key="NSFrameSize">{662, 14}</string>
-+											<string key="NSFrameSize">{673, 14}</string>
- 											<reference key="NSSuperview" ref="853671207"/>
- 											<object class="NSTextContainer" key="NSTextContainer" id="512204159">
- 												<object class="NSLayoutManager" key="NSLayoutManager">
-@@ -2653,11 +2728,11 @@
- 													<nil key="NSDelegate"/>
- 												</object>
- 												<reference key="NSTextView" ref="297493656"/>
--												<double key="NSWidth">662</double>
-+												<double key="NSWidth">673</double>
- 												<int key="NSTCFlags">1</int>
- 											</object>
- 											<object class="NSTextViewSharedData" key="NSSharedData">
--												<int key="NSFlags">2913</int>
-+												<int key="NSFlags">67111777</int>
- 												<int key="NSTextCheckingTypes">0</int>
- 												<nil key="NSMarkedAttributes"/>
- 												<reference key="NSBackgroundColor" ref="400556243"/>
-@@ -2668,7 +2743,7 @@
- 														<string>NSBackgroundColor</string>
- 														<string>NSColor</string>
- 													</object>
--													<object class="NSMutableArray" key="dict.values">
-+													<object class="NSArray" key="dict.values">
- 														<bool key="EncodedWithXMLCoder">YES</bool>
- 														<object class="NSColor">
- 															<int key="NSColorSpace">6</int>
-@@ -2692,7 +2767,7 @@
- 														<string>NSColor</string>
- 														<string>NSUnderline</string>
- 													</object>
--													<object class="NSMutableArray" key="dict.values">
-+													<object class="NSArray" key="dict.values">
- 														<bool key="EncodedWithXMLCoder">YES</bool>
- 														<object class="NSColor">
- 															<int key="NSColorSpace">1</int>
-@@ -2702,21 +2777,40 @@
- 													</object>
- 												</object>
- 												<nil key="NSDefaultParagraphStyle"/>
-+												<nil key="NSTextFinder"/>
-+												<int key="NSPreferredTextFinderStyle">0</int>
- 											</object>
- 											<int key="NSTVFlags">6</int>
--											<string key="NSMaxSize">{1337, 1e+07}</string>
-+											<string key="NSMaxSize">{1337, 10000000}</string>
- 											<string key="NSMinize">{114, 0}</string>
- 											<nil key="NSDelegate"/>
- 										</object>
- 									</object>
--									<string key="NSFrame">{{1, 1}, {662, 423}}</string>
-+									<string key="NSFrame">{{1, 1}, {673, 423}}</string>
- 									<reference key="NSSuperview" ref="935020490"/>
- 									<reference key="NSNextKeyView" ref="297493656"/>
- 									<reference key="NSDocView" ref="297493656"/>
- 									<reference key="NSBGColor" ref="400556243"/>
- 									<object class="NSCursor" key="NSCursor">
--										<string key="NSHotSpot">{4, -5}</string>
--										<int key="NSCursorType">1</int>
-+										<string key="NSHotSpot">{4, 5}</string>
-+										<object class="NSImage" key="NSImage">
-+											<int key="NSImageFlags">79691776</int>
-+											<object class="NSArray" key="NSReps">
-+												<bool key="EncodedWithXMLCoder">YES</bool>
-+												<object class="NSArray">
-+													<bool key="EncodedWithXMLCoder">YES</bool>
-+													<integer value="5"/>
-+													<object class="NSURL">
-+														<nil key="NS.base"/>
-+														<string key="NS.relative">file://localhost/Applications/Xcode.app/Contents/SharedFrameworks/DVTKit.framework/Resources/DVTIbeamCursor.tiff</string>
-+													</object>
-+												</object>
-+											</object>
-+											<object class="NSColor" key="NSColor">
-+												<int key="NSColorSpace">3</int>
-+												<bytes key="NSWhite">MCAwAA</bytes>
-+											</object>
-+										</object>
- 									</object>
- 									<int key="NScvFlags">4</int>
- 								</object>
-@@ -2745,7 +2839,7 @@
- 							<string key="NSFrame">{{20, 40}, {675, 425}}</string>
- 							<reference key="NSSuperview" ref="1017822711"/>
- 							<reference key="NSNextKeyView" ref="853671207"/>
--							<int key="NSsFlags">18</int>
-+							<int key="NSsFlags">133138</int>
- 							<reference key="NSVScroller" ref="11642274"/>
- 							<reference key="NSHScroller" ref="574894181"/>
- 							<reference key="NSContentView" ref="853671207"/>
-@@ -2776,8 +2870,9 @@
- 					</object>
- 					<string key="NSFrameSize">{715, 485}</string>
- 				</object>
--				<string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
--				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
-+				<string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
-+				<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
-+				<bool key="NSWindowIsRestorable">YES</bool>
- 			</object>
- 			<object class="NSCustomObject" id="176554930">
- 				<string key="NSClassName">InfoController</string>
-@@ -2876,30 +2971,6 @@
- 				</object>
- 				<object class="IBConnectionRecord">
- 					<object class="IBOutletConnection" key="connection">
--						<string key="label">infoPanel</string>
--						<reference key="source" ref="176554930"/>
--						<reference key="destination" ref="52789773"/>
--					</object>
--					<int key="connectionID">226</int>
--				</object>
--				<object class="IBConnectionRecord">
--					<object class="IBOutletConnection" key="connection">
--						<string key="label">texEditInfo</string>
--						<reference key="source" ref="176554930"/>
--						<reference key="destination" ref="297493656"/>
--					</object>
--					<int key="connectionID">227</int>
--				</object>
--				<object class="IBConnectionRecord">
--					<object class="IBActionConnection" key="connection">
--						<string key="label">closePanel:</string>
--						<reference key="source" ref="176554930"/>
--						<reference key="destination" ref="729692979"/>
--					</object>
--					<int key="connectionID">228</int>
--				</object>
--				<object class="IBConnectionRecord">
--					<object class="IBOutletConnection" key="connection">
- 						<string key="label">afsCommanderView</string>
- 						<reference key="source" ref="773588579"/>
- 						<reference key="destination" ref="645279396"/>
-@@ -2972,14 +3043,6 @@
- 				</object>
- 				<object class="IBConnectionRecord">
- 					<object class="IBOutletConnection" key="connection">
--						<string key="label">delegate</string>
--						<reference key="source" ref="739317740"/>
--						<reference key="destination" ref="773588579"/>
--					</object>
--					<int key="connectionID">669</int>
--				</object>
--				<object class="IBConnectionRecord">
--					<object class="IBOutletConnection" key="connection">
- 						<string key="label">textSearchField</string>
- 						<reference key="source" ref="773588579"/>
- 						<reference key="destination" ref="530233415"/>
-@@ -2995,14 +3058,6 @@
- 					<int key="connectionID">817</int>
- 				</object>
- 				<object class="IBConnectionRecord">
--					<object class="IBOutletConnection" key="connection">
--						<string key="label">delegate</string>
--						<reference key="source" ref="530233415"/>
--						<reference key="destination" ref="773588579"/>
--					</object>
--					<int key="connectionID">886</int>
--				</object>
--				<object class="IBConnectionRecord">
- 					<object class="IBActionConnection" key="connection">
- 						<string key="label">startStopAfs:</string>
- 						<reference key="source" ref="773588579"/>
-@@ -3252,22 +3307,6 @@
- 				</object>
- 				<object class="IBConnectionRecord">
- 					<object class="IBOutletConnection" key="connection">
--						<string key="label">dataSource</string>
--						<reference key="source" ref="1029505942"/>
--						<reference key="destination" ref="773588579"/>
--					</object>
--					<int key="connectionID">2060</int>
--				</object>
--				<object class="IBConnectionRecord">
--					<object class="IBOutletConnection" key="connection">
--						<string key="label">delegate</string>
--						<reference key="source" ref="1029505942"/>
--						<reference key="destination" ref="773588579"/>
--					</object>
--					<int key="connectionID">2061</int>
--				</object>
--				<object class="IBConnectionRecord">
--					<object class="IBOutletConnection" key="connection">
- 						<string key="label">buttonRemoveLink</string>
- 						<reference key="source" ref="773588579"/>
- 						<reference key="destination" ref="635503948"/>
-@@ -3323,70 +3362,6 @@
- 					<int key="connectionID">2093</int>
- 				</object>
- 				<object class="IBConnectionRecord">
--					<object class="IBActionConnection" key="connection">
--						<string key="label">takeIntegerValueFrom:</string>
--						<reference key="source" ref="724013147"/>
--						<reference key="destination" ref="719182296"/>
--					</object>
--					<int key="connectionID">2104</int>
--				</object>
--				<object class="IBConnectionRecord">
--					<object class="IBActionConnection" key="connection">
--						<string key="label">takeIntegerValueFrom:</string>
--						<reference key="source" ref="791385502"/>
--						<reference key="destination" ref="338319881"/>
--					</object>
--					<int key="connectionID">2114</int>
--				</object>
--				<object class="IBConnectionRecord">
--					<object class="IBActionConnection" key="connection">
--						<string key="label">takeIntegerValueFrom:</string>
--						<reference key="source" ref="826525177"/>
--						<reference key="destination" ref="564887063"/>
--					</object>
--					<int key="connectionID">2120</int>
--				</object>
--				<object class="IBConnectionRecord">
--					<object class="IBActionConnection" key="connection">
--						<string key="label">takeIntegerValueFrom:</string>
--						<reference key="source" ref="338319881"/>
--						<reference key="destination" ref="791385502"/>
--					</object>
--					<int key="connectionID">2127</int>
--				</object>
--				<object class="IBConnectionRecord">
--					<object class="IBActionConnection" key="connection">
--						<string key="label">takeIntValueFrom:</string>
--						<reference key="source" ref="719182296"/>
--						<reference key="destination" ref="724013147"/>
--					</object>
--					<int key="connectionID">2128</int>
--				</object>
--				<object class="IBConnectionRecord">
--					<object class="IBActionConnection" key="connection">
--						<string key="label">takeIntValueFrom:</string>
--						<reference key="source" ref="564887063"/>
--						<reference key="destination" ref="826525177"/>
--					</object>
--					<int key="connectionID">2129</int>
--				</object>
--				<object class="IBConnectionRecord">
--					<object class="IBActionConnection" key="connection">
--						<string key="label">takeIntegerValueFrom:</string>
--						<reference key="source" ref="681255345"/>
--						<reference key="destination" ref="724827539"/>
--					</object>
--					<int key="connectionID">2140</int>
--				</object>
--				<object class="IBConnectionRecord">
--					<object class="IBActionConnection" key="connection">
--						<string key="label">takeIntValueFrom:</string>
--						<reference key="source" ref="724827539"/>
--						<reference key="destination" ref="681255345"/>
--					</object>
--					<int key="connectionID">2141</int>
--				</object>
--				<object class="IBConnectionRecord">
- 					<object class="IBOutletConnection" key="connection">
- 						<string key="label">nsTextFieldKrb5RenewTimeD</string>
- 						<reference key="source" ref="773588579"/>
-@@ -3450,80 +3425,208 @@
- 					</object>
- 					<int key="connectionID">2149</int>
- 				</object>
--			</object>
--			<object class="IBMutableOrderedSet" key="objectRecords">
--				<object class="NSArray" key="orderedObjects">
--					<bool key="EncodedWithXMLCoder">YES</bool>
--					<object class="IBObjectRecord">
--						<int key="objectID">0</int>
--						<reference key="object" ref="0"/>
--						<reference key="children" ref="84888716"/>
--						<nil key="parent"/>
-+				<object class="IBConnectionRecord">
-+					<object class="IBOutletConnection" key="connection">
-+						<string key="label">authView</string>
-+						<reference key="source" ref="773588579"/>
-+						<reference key="destination" ref="802059200"/>
- 					</object>
--					<object class="IBObjectRecord">
--						<int key="objectID">-2</int>
--						<reference key="object" ref="773588579"/>
--						<reference key="parent" ref="0"/>
--						<string key="objectName">File's Owner</string>
-+					<int key="connectionID">2151</int>
-+				</object>
-+				<object class="IBConnectionRecord">
-+					<object class="IBOutletConnection" key="connection">
-+						<string key="label">delegate</string>
-+						<reference key="source" ref="739317740"/>
-+						<reference key="destination" ref="773588579"/>
- 					</object>
--					<object class="IBObjectRecord">
--						<int key="objectID">-1</int>
--						<reference key="object" ref="270520968"/>
--						<reference key="parent" ref="0"/>
--						<string key="objectName">First Responder</string>
-+					<int key="connectionID">669</int>
-+				</object>
-+				<object class="IBConnectionRecord">
-+					<object class="IBOutletConnection" key="connection">
-+						<string key="label">delegate</string>
-+						<reference key="source" ref="530233415"/>
-+						<reference key="destination" ref="773588579"/>
- 					</object>
--					<object class="IBObjectRecord">
--						<int key="objectID">-3</int>
--						<reference key="object" ref="173116405"/>
--						<reference key="parent" ref="0"/>
--						<string key="objectName">Application</string>
-+					<int key="connectionID">886</int>
-+				</object>
-+				<object class="IBConnectionRecord">
-+					<object class="IBOutletConnection" key="connection">
-+						<string key="label">infoPanel</string>
-+						<reference key="source" ref="176554930"/>
-+						<reference key="destination" ref="52789773"/>
- 					</object>
--					<object class="IBObjectRecord">
--						<int key="objectID">12</int>
--						<reference key="object" ref="61231707"/>
--						<object class="NSMutableArray" key="children">
--							<bool key="EncodedWithXMLCoder">YES</bool>
--							<reference ref="645279396"/>
--						</object>
--						<reference key="parent" ref="0"/>
--						<string key="objectName">PrefPane</string>
-+					<int key="connectionID">226</int>
-+				</object>
-+				<object class="IBConnectionRecord">
-+					<object class="IBOutletConnection" key="connection">
-+						<string key="label">texEditInfo</string>
-+						<reference key="source" ref="176554930"/>
-+						<reference key="destination" ref="297493656"/>
- 					</object>
--					<object class="IBObjectRecord">
--						<int key="objectID">6</int>
--						<reference key="object" ref="645279396"/>
--						<object class="NSMutableArray" key="children">
--							<bool key="EncodedWithXMLCoder">YES</bool>
--							<reference ref="1047946385"/>
--							<reference ref="415603882"/>
--							<reference ref="739317740"/>
--							<reference ref="748501112"/>
--						</object>
--						<reference key="parent" ref="61231707"/>
-+					<int key="connectionID">227</int>
-+				</object>
-+				<object class="IBConnectionRecord">
-+					<object class="IBActionConnection" key="connection">
-+						<string key="label">closePanel:</string>
-+						<reference key="source" ref="176554930"/>
-+						<reference key="destination" ref="729692979"/>
- 					</object>
--					<object class="IBObjectRecord">
--						<int key="objectID">101</int>
--						<reference key="object" ref="739317740"/>
--						<object class="NSMutableArray" key="children">
--							<bool key="EncodedWithXMLCoder">YES</bool>
--							<reference ref="269508902"/>
--							<reference ref="443722606"/>
--							<reference ref="584361947"/>
--							<reference ref="126070858"/>
--							<reference ref="585584503"/>
--						</object>
--						<reference key="parent" ref="645279396"/>
-+					<int key="connectionID">228</int>
-+				</object>
-+				<object class="IBConnectionRecord">
-+					<object class="IBOutletConnection" key="connection">
-+						<string key="label">dataSource</string>
-+						<reference key="source" ref="1029505942"/>
-+						<reference key="destination" ref="773588579"/>
- 					</object>
--					<object class="IBObjectRecord">
--						<int key="objectID">104</int>
--						<reference key="object" ref="269508902"/>
--						<object class="NSMutableArray" key="children">
--							<bool key="EncodedWithXMLCoder">YES</bool>
--							<reference ref="1020318718"/>
--						</object>
--						<reference key="parent" ref="739317740"/>
-+					<int key="connectionID">2060</int>
-+				</object>
-+				<object class="IBConnectionRecord">
-+					<object class="IBOutletConnection" key="connection">
-+						<string key="label">delegate</string>
-+						<reference key="source" ref="1029505942"/>
-+						<reference key="destination" ref="773588579"/>
- 					</object>
--					<object class="IBObjectRecord">
--						<int key="objectID">105</int>
-+					<int key="connectionID">2061</int>
-+				</object>
-+				<object class="IBConnectionRecord">
-+					<object class="IBActionConnection" key="connection">
-+						<string key="label">takeIntValueFrom:</string>
-+						<reference key="source" ref="719182296"/>
-+						<reference key="destination" ref="724013147"/>
-+					</object>
-+					<int key="connectionID">2128</int>
-+				</object>
-+				<object class="IBConnectionRecord">
-+					<object class="IBActionConnection" key="connection">
-+						<string key="label">takeIntegerValueFrom:</string>
-+						<reference key="source" ref="724013147"/>
-+						<reference key="destination" ref="719182296"/>
-+					</object>
-+					<int key="connectionID">2104</int>
-+				</object>
-+				<object class="IBConnectionRecord">
-+					<object class="IBActionConnection" key="connection">
-+						<string key="label">takeIntegerValueFrom:</string>
-+						<reference key="source" ref="338319881"/>
-+						<reference key="destination" ref="791385502"/>
-+					</object>
-+					<int key="connectionID">2127</int>
-+				</object>
-+				<object class="IBConnectionRecord">
-+					<object class="IBActionConnection" key="connection">
-+						<string key="label">takeIntegerValueFrom:</string>
-+						<reference key="source" ref="791385502"/>
-+						<reference key="destination" ref="338319881"/>
-+					</object>
-+					<int key="connectionID">2114</int>
-+				</object>
-+				<object class="IBConnectionRecord">
-+					<object class="IBActionConnection" key="connection">
-+						<string key="label">takeIntValueFrom:</string>
-+						<reference key="source" ref="564887063"/>
-+						<reference key="destination" ref="826525177"/>
-+					</object>
-+					<int key="connectionID">2129</int>
-+				</object>
-+				<object class="IBConnectionRecord">
-+					<object class="IBActionConnection" key="connection">
-+						<string key="label">takeIntegerValueFrom:</string>
-+						<reference key="source" ref="826525177"/>
-+						<reference key="destination" ref="564887063"/>
-+					</object>
-+					<int key="connectionID">2120</int>
-+				</object>
-+				<object class="IBConnectionRecord">
-+					<object class="IBActionConnection" key="connection">
-+						<string key="label">takeIntValueFrom:</string>
-+						<reference key="source" ref="724827539"/>
-+						<reference key="destination" ref="681255345"/>
-+					</object>
-+					<int key="connectionID">2141</int>
-+				</object>
-+				<object class="IBConnectionRecord">
-+					<object class="IBActionConnection" key="connection">
-+						<string key="label">takeIntegerValueFrom:</string>
-+						<reference key="source" ref="681255345"/>
-+						<reference key="destination" ref="724827539"/>
-+					</object>
-+					<int key="connectionID">2140</int>
-+				</object>
-+			</object>
-+			<object class="IBMutableOrderedSet" key="objectRecords">
-+				<object class="NSArray" key="orderedObjects">
-+					<bool key="EncodedWithXMLCoder">YES</bool>
-+					<object class="IBObjectRecord">
-+						<int key="objectID">0</int>
-+						<reference key="object" ref="0"/>
-+						<reference key="children" ref="84888716"/>
-+						<nil key="parent"/>
-+					</object>
-+					<object class="IBObjectRecord">
-+						<int key="objectID">-2</int>
-+						<reference key="object" ref="773588579"/>
-+						<reference key="parent" ref="0"/>
-+						<string key="objectName">File's Owner</string>
-+					</object>
-+					<object class="IBObjectRecord">
-+						<int key="objectID">-1</int>
-+						<reference key="object" ref="270520968"/>
-+						<reference key="parent" ref="0"/>
-+						<string key="objectName">First Responder</string>
-+					</object>
-+					<object class="IBObjectRecord">
-+						<int key="objectID">-3</int>
-+						<reference key="object" ref="173116405"/>
-+						<reference key="parent" ref="0"/>
-+						<string key="objectName">Application</string>
-+					</object>
-+					<object class="IBObjectRecord">
-+						<int key="objectID">12</int>
-+						<reference key="object" ref="61231707"/>
-+						<object class="NSMutableArray" key="children">
-+							<bool key="EncodedWithXMLCoder">YES</bool>
-+							<reference ref="645279396"/>
-+						</object>
-+						<reference key="parent" ref="0"/>
-+						<string key="objectName">PrefPane</string>
-+					</object>
-+					<object class="IBObjectRecord">
-+						<int key="objectID">6</int>
-+						<reference key="object" ref="645279396"/>
-+						<object class="NSMutableArray" key="children">
-+							<bool key="EncodedWithXMLCoder">YES</bool>
-+							<reference ref="1047946385"/>
-+							<reference ref="415603882"/>
-+							<reference ref="739317740"/>
-+							<reference ref="748501112"/>
-+						</object>
-+						<reference key="parent" ref="61231707"/>
-+					</object>
-+					<object class="IBObjectRecord">
-+						<int key="objectID">101</int>
-+						<reference key="object" ref="739317740"/>
-+						<object class="NSMutableArray" key="children">
-+							<bool key="EncodedWithXMLCoder">YES</bool>
-+							<reference ref="269508902"/>
-+							<reference ref="443722606"/>
-+							<reference ref="584361947"/>
-+							<reference ref="126070858"/>
-+							<reference ref="585584503"/>
-+						</object>
-+						<reference key="parent" ref="645279396"/>
-+					</object>
-+					<object class="IBObjectRecord">
-+						<int key="objectID">104</int>
-+						<reference key="object" ref="269508902"/>
-+						<object class="NSMutableArray" key="children">
-+							<bool key="EncodedWithXMLCoder">YES</bool>
-+							<reference ref="1020318718"/>
-+						</object>
-+						<reference key="parent" ref="739317740"/>
-+					</object>
-+					<object class="IBObjectRecord">
-+						<int key="objectID">105</int>
- 						<reference key="object" ref="1020318718"/>
- 						<object class="NSMutableArray" key="children">
- 							<bool key="EncodedWithXMLCoder">YES</bool>
-@@ -3533,6 +3636,7 @@
- 							<reference ref="893552286"/>
- 							<reference ref="343070533"/>
- 							<reference ref="210387551"/>
-+							<reference ref="802059200"/>
- 						</object>
- 						<reference key="parent" ref="269508902"/>
- 					</object>
-@@ -4864,86 +4968,54 @@
- 						<reference key="object" ref="426972560"/>
- 						<reference key="parent" ref="724827539"/>
- 					</object>
-+					<object class="IBObjectRecord">
-+						<int key="objectID">2150</int>
-+						<reference key="object" ref="802059200"/>
-+						<reference key="parent" ref="1020318718"/>
-+					</object>
- 				</object>
- 			</object>
- 			<object class="NSMutableDictionary" key="flattenedProperties">
- 				<bool key="EncodedWithXMLCoder">YES</bool>
- 				<object class="NSArray" key="dict.sortedKeys">
- 					<bool key="EncodedWithXMLCoder">YES</bool>
-+					<string>-1.IBPluginDependency</string>
-+					<string>-2.IBPluginDependency</string>
- 					<string>-3.IBPluginDependency</string>
--					<string>-3.ImportedFromIB2</string>
- 					<string>101.IBPluginDependency</string>
--					<string>101.ImportedFromIB2</string>
- 					<string>104.IBPluginDependency</string>
--					<string>104.ImportedFromIB2</string>
- 					<string>105.IBPluginDependency</string>
--					<string>105.ImportedFromIB2</string>
- 					<string>1103.IBPluginDependency</string>
--					<string>1103.ImportedFromIB2</string>
- 					<string>1107.IBPluginDependency</string>
--					<string>1107.ImportedFromIB2</string>
- 					<string>1111.IBPluginDependency</string>
--					<string>1111.ImportedFromIB2</string>
- 					<string>1122.IBPluginDependency</string>
--					<string>1122.ImportedFromIB2</string>
- 					<string>1199.IBPluginDependency</string>
--					<string>1199.ImportedFromIB2</string>
--					<string>12.IBEditorWindowLastContentRect</string>
- 					<string>12.IBPluginDependency</string>
--					<string>12.IBViewEditorWindowController.showingBoundsRectangles</string>
--					<string>12.IBViewEditorWindowController.showingLayoutRectangles</string>
- 					<string>12.IBWindowTemplateEditedContentRect</string>
--					<string>12.ImportedFromIB2</string>
--					<string>12.windowTemplate.hasMinSize</string>
--					<string>12.windowTemplate.maxSize</string>
--					<string>12.windowTemplate.minSize</string>
- 					<string>1203.IBPluginDependency</string>
--					<string>1203.ImportedFromIB2</string>
- 					<string>1204.IBPluginDependency</string>
--					<string>1204.ImportedFromIB2</string>
- 					<string>1207.IBPluginDependency</string>
--					<string>1207.ImportedFromIB2</string>
- 					<string>1209.IBPluginDependency</string>
--					<string>1209.ImportedFromIB2</string>
- 					<string>1280.IBPluginDependency</string>
--					<string>1280.ImportedFromIB2</string>
- 					<string>1422.IBPluginDependency</string>
--					<string>1422.ImportedFromIB2</string>
- 					<string>1426.IBPluginDependency</string>
--					<string>1426.ImportedFromIB2</string>
- 					<string>1715.IBPluginDependency</string>
--					<string>1715.ImportedFromIB2</string>
- 					<string>177.IBPluginDependency</string>
--					<string>177.ImportedFromIB2</string>
- 					<string>178.IBPluginDependency</string>
--					<string>178.ImportedFromIB2</string>
- 					<string>1787.IBPluginDependency</string>
--					<string>1787.ImportedFromIB2</string>
- 					<string>1789.IBPluginDependency</string>
--					<string>1789.ImportedFromIB2</string>
- 					<string>179.IBPluginDependency</string>
--					<string>179.ImportedFromIB2</string>
- 					<string>180.IBPluginDependency</string>
--					<string>180.ImportedFromIB2</string>
- 					<string>181.IBPluginDependency</string>
--					<string>181.ImportedFromIB2</string>
- 					<string>182.IBPluginDependency</string>
--					<string>182.ImportedFromIB2</string>
- 					<string>183.IBPluginDependency</string>
--					<string>183.ImportedFromIB2</string>
- 					<string>184.IBPluginDependency</string>
--					<string>184.ImportedFromIB2</string>
- 					<string>1845.IBPluginDependency</string>
--					<string>1845.ImportedFromIB2</string>
- 					<string>185.IBPluginDependency</string>
--					<string>185.ImportedFromIB2</string>
- 					<string>186.IBPluginDependency</string>
--					<string>186.ImportedFromIB2</string>
- 					<string>1902.IBPluginDependency</string>
--					<string>1902.ImportedFromIB2</string>
- 					<string>1960.IBAttributePlaceholdersKey</string>
- 					<string>1960.IBPluginDependency</string>
--					<string>1960.ImportedFromIB2</string>
- 					<string>1964.IBPluginDependency</string>
- 					<string>1965.IBPluginDependency</string>
- 					<string>1966.IBPluginDependency</string>
-@@ -4980,7 +5052,6 @@
- 					<string>1998.IBPluginDependency</string>
- 					<string>1999.IBPluginDependency</string>
- 					<string>200.IBPluginDependency</string>
--					<string>200.ImportedFromIB2</string>
- 					<string>2000.IBPluginDependency</string>
- 					<string>2000.IBShouldRemoveOnLegacySave</string>
- 					<string>2001.IBPluginDependency</string>
-@@ -5034,7 +5105,6 @@
- 					<string>2066.IBPluginDependency</string>
- 					<string>2067.IBPluginDependency</string>
- 					<string>207.IBPluginDependency</string>
--					<string>207.ImportedFromIB2</string>
- 					<string>2071.IBPluginDependency</string>
- 					<string>2072.IBPluginDependency</string>
- 					<string>2073.IBAttributePlaceholdersKey</string>
-@@ -5048,13 +5118,8 @@
- 					<string>2077.IBPluginDependency</string>
- 					<string>2078.IBPluginDependency</string>
- 					<string>2079.IBPluginDependency</string>
--					<string>208.IBEditorWindowLastContentRect</string>
- 					<string>208.IBPluginDependency</string>
- 					<string>208.IBWindowTemplateEditedContentRect</string>
--					<string>208.ImportedFromIB2</string>
--					<string>208.windowTemplate.hasMinSize</string>
--					<string>208.windowTemplate.maxSize</string>
--					<string>208.windowTemplate.minSize</string>
- 					<string>2080.IBNumberFormatterBehaviorMetadataKey</string>
- 					<string>2080.IBNumberFormatterLocalizesFormatMetadataKey</string>
- 					<string>2080.IBPluginDependency</string>
-@@ -5063,7 +5128,6 @@
- 					<string>2087.IBPluginDependency</string>
- 					<string>2088.IBPluginDependency</string>
- 					<string>209.IBPluginDependency</string>
--					<string>209.ImportedFromIB2</string>
- 					<string>2100.IBPluginDependency</string>
- 					<string>2101.IBPluginDependency</string>
- 					<string>2102.IBAttributePlaceholdersKey</string>
-@@ -5103,148 +5167,84 @@
- 					<string>2138.IBPluginDependency</string>
- 					<string>2139.IBPluginDependency</string>
- 					<string>214.IBPluginDependency</string>
--					<string>214.ImportedFromIB2</string>
- 					<string>215.IBPluginDependency</string>
--					<string>215.ImportedFromIB2</string>
-+					<string>2150.IBPluginDependency</string>
- 					<string>216.IBPluginDependency</string>
--					<string>216.ImportedFromIB2</string>
--					<string>224.ImportedFromIB2</string>
-+					<string>224.IBPluginDependency</string>
- 					<string>265.IBPluginDependency</string>
--					<string>265.ImportedFromIB2</string>
- 					<string>337.IBPluginDependency</string>
--					<string>337.ImportedFromIB2</string>
- 					<string>338.IBPluginDependency</string>
--					<string>338.ImportedFromIB2</string>
- 					<string>339.IBPluginDependency</string>
--					<string>339.ImportedFromIB2</string>
- 					<string>340.IBPluginDependency</string>
--					<string>340.ImportedFromIB2</string>
- 					<string>342.IBPluginDependency</string>
--					<string>342.ImportedFromIB2</string>
- 					<string>344.IBAttributePlaceholdersKey</string>
- 					<string>344.IBPluginDependency</string>
--					<string>344.ImportedFromIB2</string>
- 					<string>345.IBPluginDependency</string>
--					<string>345.ImportedFromIB2</string>
- 					<string>348.IBAttributePlaceholdersKey</string>
- 					<string>348.IBPluginDependency</string>
--					<string>348.ImportedFromIB2</string>
- 					<string>349.IBPluginDependency</string>
--					<string>349.ImportedFromIB2</string>
- 					<string>352.IBPluginDependency</string>
--					<string>352.ImportedFromIB2</string>
- 					<string>400.IBPluginDependency</string>
--					<string>400.ImportedFromIB2</string>
- 					<string>402.IBPluginDependency</string>
--					<string>402.ImportedFromIB2</string>
- 					<string>404.IBAttributePlaceholdersKey</string>
- 					<string>404.IBPluginDependency</string>
--					<string>404.ImportedFromIB2</string>
- 					<string>406.IBPluginDependency</string>
--					<string>406.ImportedFromIB2</string>
- 					<string>408.IBAttributePlaceholdersKey</string>
- 					<string>408.IBPluginDependency</string>
--					<string>408.ImportedFromIB2</string>
- 					<string>411.IBNumberFormatterLocalizesFormatMetadataKey</string>
- 					<string>411.IBPluginDependency</string>
--					<string>411.ImportedFromIB2</string>
- 					<string>413.IBPluginDependency</string>
--					<string>413.ImportedFromIB2</string>
- 					<string>415.IBAttributePlaceholdersKey</string>
- 					<string>415.IBPluginDependency</string>
--					<string>415.ImportedFromIB2</string>
- 					<string>417.IBNumberFormatterLocalizesFormatMetadataKey</string>
- 					<string>417.IBPluginDependency</string>
--					<string>417.ImportedFromIB2</string>
- 					<string>425.IBPluginDependency</string>
--					<string>425.ImportedFromIB2</string>
- 					<string>475.IBPluginDependency</string>
--					<string>475.ImportedFromIB2</string>
- 					<string>6.IBPluginDependency</string>
--					<string>6.ImportedFromIB2</string>
- 					<string>740.IBNumberFormatterLocalizesFormatMetadataKey</string>
- 					<string>740.IBPluginDependency</string>
--					<string>740.ImportedFromIB2</string>
- 					<string>741.IBNumberFormatterLocalizesFormatMetadataKey</string>
- 					<string>741.IBPluginDependency</string>
--					<string>741.ImportedFromIB2</string>
- 					<string>742.IBNumberFormatterLocalizesFormatMetadataKey</string>
- 					<string>742.IBPluginDependency</string>
--					<string>742.ImportedFromIB2</string>
- 				</object>
--				<object class="NSMutableArray" key="dict.values">
-+				<object class="NSArray" key="dict.values">
- 					<bool key="EncodedWithXMLCoder">YES</bool>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
--					<string>{{208, 366}, {595, 486}}</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<boolean value="NO"/>
--					<boolean value="NO"/>
-+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<string>{{208, 366}, {595, 486}}</string>
--					<integer value="1"/>
--					<boolean value="NO"/>
--					<string>{3.40282e+38, 3.40282e+38}</string>
--					<string>{0, 0}</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<object class="NSMutableDictionary">
- 						<string key="NS.key.0">ToolTip</string>
- 						<object class="IBToolTipAttribute" key="NS.object.0">
-@@ -5254,7 +5254,6 @@
- 						</object>
- 					</object>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-@@ -5299,7 +5298,6 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-@@ -5353,7 +5351,6 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<object class="NSMutableDictionary">
-@@ -5381,13 +5378,8 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<string>{{0, 510}, {715, 485}}</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<string>{{0, 510}, {715, 485}}</string>
--					<integer value="1"/>
--					<boolean value="NO"/>
--					<string>{3.40282e+38, 3.40282e+38}</string>
--					<string>{0, 0}</string>
- 					<integer value="1040"/>
- 					<boolean value="YES"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-@@ -5403,7 +5395,6 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<object class="NSMutableDictionary">
-@@ -5471,24 +5462,16 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
-+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- 					<object class="NSMutableDictionary">
- 						<string key="NS.key.0">ToolTip</string>
- 						<object class="IBToolTipAttribute" key="NS.object.0">
-@@ -5498,9 +5481,7 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 						</object>
- 					</object>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<object class="NSMutableDictionary">
- 						<string key="NS.key.0">ToolTip</string>
- 						<object class="IBToolTipAttribute" key="NS.object.0">
-@@ -5510,15 +5491,10 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 						</object>
- 					</object>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<object class="NSMutableDictionary">
- 						<string key="NS.key.0">ToolTip</string>
- 						<object class="IBToolTipAttribute" key="NS.object.0">
-@@ -5528,9 +5504,7 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 						</object>
- 					</object>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<object class="NSMutableDictionary">
- 						<string key="NS.key.0">ToolTip</string>
- 						<object class="IBToolTipAttribute" key="NS.object.0">
-@@ -5540,12 +5514,9 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 						</object>
- 					</object>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<boolean value="YES"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<object class="NSMutableDictionary">
- 						<string key="NS.key.0">ToolTip</string>
- 						<object class="IBToolTipAttribute" key="NS.object.0">
-@@ -5555,44 +5526,32 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 						</object>
- 					</object>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<boolean value="YES"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<boolean value="YES"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<boolean value="YES"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 					<boolean value="YES"/>
- 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
--					<integer value="1"/>
- 				</object>
- 			</object>
- 			<object class="NSMutableDictionary" key="unlocalizedProperties">
- 				<bool key="EncodedWithXMLCoder">YES</bool>
- 				<reference key="dict.sortedKeys" ref="0"/>
--				<object class="NSMutableArray" key="dict.values">
--					<bool key="EncodedWithXMLCoder">YES</bool>
--				</object>
-+				<reference key="dict.values" ref="0"/>
- 			</object>
- 			<nil key="activeLocalization"/>
- 			<object class="NSMutableDictionary" key="localizations">
- 				<bool key="EncodedWithXMLCoder">YES</bool>
- 				<reference key="dict.sortedKeys" ref="0"/>
--				<object class="NSMutableArray" key="dict.values">
--					<bool key="EncodedWithXMLCoder">YES</bool>
--				</object>
-+				<reference key="dict.values" ref="0"/>
- 			</object>
- 			<nil key="sourceID"/>
--			<int key="maxID">2149</int>
-+			<int key="maxID">2151</int>
- 		</object>
- 		<object class="IBClassDescriber" key="IBDocument.Classes">
- 			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
-@@ -5628,7 +5587,7 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 							<string>tableViewLinkPerformClick:</string>
- 							<string>unlog:</string>
- 						</object>
--						<object class="NSMutableArray" key="dict.values">
-+						<object class="NSArray" key="dict.values">
- 							<bool key="EncodedWithXMLCoder">YES</bool>
- 							<string>id</string>
- 							<string>id</string>
-@@ -5655,53 +5614,170 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 							<string>id</string>
- 						</object>
- 					</object>
--					<object class="NSMutableDictionary" key="outlets">
-+					<object class="NSMutableDictionary" key="actionInfosByName">
- 						<bool key="EncodedWithXMLCoder">YES</bool>
- 						<object class="NSArray" key="dict.sortedKeys">
- 							<bool key="EncodedWithXMLCoder">YES</bool>
--							<string>addCellButton</string>
--							<string>afsCommanderView</string>
--							<string>afsDB</string>
--							<string>afsDefaultCellLabel</string>
--							<string>afsMenucheckBox</string>
--							<string>afsRootMountPoint</string>
--							<string>afsVersionLabel</string>
--							<string>aklogCredentialAtLoginTime</string>
--							<string>backgrounderActivationCheck</string>
--							<string>buttonAddLink</string>
--							<string>buttonRemoveLink</string>
--							<string>cacheDimension</string>
--							<string>cellIpButton</string>
--							<string>cellList</string>
--							<string>checkButtonAfsAtBootTime</string>
--							<string>checkEnableLink</string>
--							<string>credentialCommander</string>
--							<string>credentialSheet</string>
--							<string>dCacheDim</string>
--							<string>daemonNumber</string>
--							<string>dynRoot</string>
--							<string>groupsBox</string>
--							<string>infoController</string>
--							<string>infoSheet</string>
--							<string>installKRB5AuthAtLoginButton</string>
--							<string>ipConfControllerCommander</string>
--							<string>ipConfigurationSheet</string>
--							<string>labelSaveResult</string>
--							<string>lyncCreationSheet</string>
--							<string>lynkCreationController</string>
--							<string>nVolEntry</string>
--							<string>nsButtonEnableDisableKrb5RenewCheck</string>
--							<string>nsStepperKrb5RenewTimeD</string>
--							<string>nsStepperKrb5RenewTimeH</string>
--							<string>nsStepperKrb5RenewTimeM</string>
--							<string>nsStepperKrb5RenewTimeS</string>
--							<string>nsTextFieldKrb5RenewCheckIntervall</string>
--							<string>nsTextFieldKrb5RenewTimeD</string>
--							<string>nsTextFieldKrb5RenewTimeH</string>
--							<string>nsTextFieldKrb5RenewTimeM</string>
--							<string>nsTextFieldKrb5RenewTimeS</string>
--							<string>nsTextFieldKrb5SecToExpireDateForRenew</string>
--							<string>removeCellButton</string>
-+							<string>addLink:</string>
-+							<string>addRemoveCell:</string>
-+							<string>afsMenuActivationEvent:</string>
-+							<string>afsStartupSwitchEvent:</string>
-+							<string>aklogSwitchEvent:</string>
-+							<string>credentialAtLoginTimeEvent:</string>
-+							<string>enableDisableKrb5RenewCheck:</string>
-+							<string>enableLink:</string>
-+							<string>getNewToken:</string>
-+							<string>info:</string>
-+							<string>krb5KredentialAtLoginTimeEvent:</string>
-+							<string>krb5RenewParamChange:</string>
-+							<string>manageBackgrounderActivation:</string>
-+							<string>refreshConfiguration:</string>
-+							<string>removeLink:</string>
-+							<string>saveCacheManagerParam:</string>
-+							<string>saveConfiguration:</string>
-+							<string>searchCellTextEvent:</string>
-+							<string>showCellIP:</string>
-+							<string>startStopAfs:</string>
-+							<string>tableDoubleAction:</string>
-+							<string>tableViewLinkPerformClick:</string>
-+							<string>unlog:</string>
-+						</object>
-+						<object class="NSArray" key="dict.values">
-+							<bool key="EncodedWithXMLCoder">YES</bool>
-+							<object class="IBActionInfo">
-+								<string key="name">addLink:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">addRemoveCell:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">afsMenuActivationEvent:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">afsStartupSwitchEvent:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">aklogSwitchEvent:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">credentialAtLoginTimeEvent:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">enableDisableKrb5RenewCheck:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">enableLink:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">getNewToken:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">info:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">krb5KredentialAtLoginTimeEvent:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">krb5RenewParamChange:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">manageBackgrounderActivation:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">refreshConfiguration:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">removeLink:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">saveCacheManagerParam:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">saveConfiguration:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">searchCellTextEvent:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">showCellIP:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">startStopAfs:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">tableDoubleAction:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">tableViewLinkPerformClick:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">unlog:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+						</object>
-+					</object>
-+					<object class="NSMutableDictionary" key="outlets">
-+						<bool key="EncodedWithXMLCoder">YES</bool>
-+						<object class="NSArray" key="dict.sortedKeys">
-+							<bool key="EncodedWithXMLCoder">YES</bool>
-+							<string>addCellButton</string>
-+							<string>afsCommanderView</string>
-+							<string>afsDB</string>
-+							<string>afsDefaultCellLabel</string>
-+							<string>afsMenucheckBox</string>
-+							<string>afsRootMountPoint</string>
-+							<string>afsVersionLabel</string>
-+							<string>aklogCredentialAtLoginTime</string>
-+							<string>authView</string>
-+							<string>backgrounderActivationCheck</string>
-+							<string>buttonAddLink</string>
-+							<string>buttonRemoveLink</string>
-+							<string>cacheDimension</string>
-+							<string>cellIpButton</string>
-+							<string>cellList</string>
-+							<string>checkButtonAfsAtBootTime</string>
-+							<string>checkEnableLink</string>
-+							<string>dCacheDim</string>
-+							<string>daemonNumber</string>
-+							<string>dynRoot</string>
-+							<string>groupsBox</string>
-+							<string>installKRB5AuthAtLoginButton</string>
-+							<string>lynkCreationController</string>
-+							<string>nVolEntry</string>
-+							<string>nsButtonEnableDisableKrb5RenewCheck</string>
-+							<string>nsStepperKrb5RenewTimeD</string>
-+							<string>nsStepperKrb5RenewTimeH</string>
-+							<string>nsStepperKrb5RenewTimeM</string>
-+							<string>nsStepperKrb5RenewTimeS</string>
-+							<string>nsTextFieldKrb5RenewCheckIntervall</string>
-+							<string>nsTextFieldKrb5RenewTimeD</string>
-+							<string>nsTextFieldKrb5RenewTimeH</string>
-+							<string>nsTextFieldKrb5RenewTimeM</string>
-+							<string>nsTextFieldKrb5RenewTimeS</string>
-+							<string>nsTextFieldKrb5SecToExpireDateForRenew</string>
-+							<string>removeCellButton</string>
- 							<string>saveConfigurationButton</string>
- 							<string>startStopButton</string>
- 							<string>statCacheEntry</string>
-@@ -5714,7 +5790,7 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 							<string>useAklogCheck</string>
- 							<string>verbose</string>
- 						</object>
--						<object class="NSMutableArray" key="dict.values">
-+						<object class="NSArray" key="dict.values">
- 							<bool key="EncodedWithXMLCoder">YES</bool>
- 							<string>NSControl</string>
- 							<string>NSView</string>
-@@ -5724,6 +5800,7 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 							<string>NSTextField</string>
- 							<string>NSTextField</string>
- 							<string>NSButton</string>
-+							<string>SFAuthorizationView</string>
- 							<string>NSButton</string>
- 							<string>NSButton</string>
- 							<string>NSButton</string>
-@@ -5732,19 +5809,11 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 							<string>NSTableView</string>
- 							<string>NSButton</string>
- 							<string>NSButton</string>
--							<string>id</string>
--							<string>id</string>
- 							<string>NSTextField</string>
- 							<string>NSTextField</string>
- 							<string>NSButton</string>
- 							<string>NSBox</string>
--							<string>id</string>
--							<string>id</string>
- 							<string>NSButton</string>
--							<string>id</string>
--							<string>id</string>
--							<string>id</string>
--							<string>id</string>
- 							<string>LynkCreationController</string>
- 							<string>NSTextField</string>
- 							<string>NSButton</string>
-@@ -5772,38 +5841,253 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 							<string>NSButton</string>
- 						</object>
- 					</object>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBProjectSource</string>
--						<string key="minorKey">AFSCommanderPref.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">AFSCommanderPref</string>
--					<string key="superclassName">NSPreferencePane</string>
--					<object class="NSMutableDictionary" key="outlets">
-+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
- 						<bool key="EncodedWithXMLCoder">YES</bool>
- 						<object class="NSArray" key="dict.sortedKeys">
- 							<bool key="EncodedWithXMLCoder">YES</bool>
--							<string>cellPopupButton</string>
--							<string>getTokenButton</string>
-+							<string>addCellButton</string>
-+							<string>afsCommanderView</string>
-+							<string>afsDB</string>
-+							<string>afsDefaultCellLabel</string>
-+							<string>afsMenucheckBox</string>
-+							<string>afsRootMountPoint</string>
-+							<string>afsVersionLabel</string>
-+							<string>aklogCredentialAtLoginTime</string>
-+							<string>authView</string>
-+							<string>backgrounderActivationCheck</string>
-+							<string>buttonAddLink</string>
-+							<string>buttonRemoveLink</string>
-+							<string>cacheDimension</string>
-+							<string>cellIpButton</string>
-+							<string>cellList</string>
-+							<string>checkButtonAfsAtBootTime</string>
-+							<string>checkEnableLink</string>
-+							<string>dCacheDim</string>
-+							<string>daemonNumber</string>
-+							<string>dynRoot</string>
-+							<string>groupsBox</string>
-+							<string>installKRB5AuthAtLoginButton</string>
-+							<string>lynkCreationController</string>
-+							<string>nVolEntry</string>
-+							<string>nsButtonEnableDisableKrb5RenewCheck</string>
-+							<string>nsStepperKrb5RenewTimeD</string>
-+							<string>nsStepperKrb5RenewTimeH</string>
-+							<string>nsStepperKrb5RenewTimeM</string>
-+							<string>nsStepperKrb5RenewTimeS</string>
-+							<string>nsTextFieldKrb5RenewCheckIntervall</string>
-+							<string>nsTextFieldKrb5RenewTimeD</string>
-+							<string>nsTextFieldKrb5RenewTimeH</string>
-+							<string>nsTextFieldKrb5RenewTimeM</string>
-+							<string>nsTextFieldKrb5RenewTimeS</string>
-+							<string>nsTextFieldKrb5SecToExpireDateForRenew</string>
-+							<string>removeCellButton</string>
-+							<string>saveConfigurationButton</string>
-+							<string>startStopButton</string>
-+							<string>statCacheEntry</string>
-+							<string>tableViewLink</string>
-+							<string>textFieldDevInfoLabel</string>
-+							<string>textSearchField</string>
-+							<string>tokensButton</string>
-+							<string>tokensTable</string>
-+							<string>unlogButton</string>
-+							<string>useAklogCheck</string>
-+							<string>verbose</string>
- 						</object>
--						<object class="NSMutableArray" key="dict.values">
-+						<object class="NSArray" key="dict.values">
- 							<bool key="EncodedWithXMLCoder">YES</bool>
--							<string>NSPopUpButton</string>
--							<string>NSPopUpButton</string>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">addCellButton</string>
-+								<string key="candidateClassName">NSControl</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">afsCommanderView</string>
-+								<string key="candidateClassName">NSView</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">afsDB</string>
-+								<string key="candidateClassName">NSButton</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">afsDefaultCellLabel</string>
-+								<string key="candidateClassName">NSTextField</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">afsMenucheckBox</string>
-+								<string key="candidateClassName">NSControl</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">afsRootMountPoint</string>
-+								<string key="candidateClassName">NSTextField</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">afsVersionLabel</string>
-+								<string key="candidateClassName">NSTextField</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">aklogCredentialAtLoginTime</string>
-+								<string key="candidateClassName">NSButton</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">authView</string>
-+								<string key="candidateClassName">SFAuthorizationView</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">backgrounderActivationCheck</string>
-+								<string key="candidateClassName">NSButton</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">buttonAddLink</string>
-+								<string key="candidateClassName">NSButton</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">buttonRemoveLink</string>
-+								<string key="candidateClassName">NSButton</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">cacheDimension</string>
-+								<string key="candidateClassName">NSTextField</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">cellIpButton</string>
-+								<string key="candidateClassName">NSControl</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">cellList</string>
-+								<string key="candidateClassName">NSTableView</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">checkButtonAfsAtBootTime</string>
-+								<string key="candidateClassName">NSButton</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">checkEnableLink</string>
-+								<string key="candidateClassName">NSButton</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">dCacheDim</string>
-+								<string key="candidateClassName">NSTextField</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">daemonNumber</string>
-+								<string key="candidateClassName">NSTextField</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">dynRoot</string>
-+								<string key="candidateClassName">NSButton</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">groupsBox</string>
-+								<string key="candidateClassName">NSBox</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">installKRB5AuthAtLoginButton</string>
-+								<string key="candidateClassName">NSButton</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">lynkCreationController</string>
-+								<string key="candidateClassName">LynkCreationController</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">nVolEntry</string>
-+								<string key="candidateClassName">NSTextField</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">nsButtonEnableDisableKrb5RenewCheck</string>
-+								<string key="candidateClassName">NSButton</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">nsStepperKrb5RenewTimeD</string>
-+								<string key="candidateClassName">NSStepper</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">nsStepperKrb5RenewTimeH</string>
-+								<string key="candidateClassName">NSStepper</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">nsStepperKrb5RenewTimeM</string>
-+								<string key="candidateClassName">NSStepper</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">nsStepperKrb5RenewTimeS</string>
-+								<string key="candidateClassName">NSStepper</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">nsTextFieldKrb5RenewCheckIntervall</string>
-+								<string key="candidateClassName">NSTextField</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">nsTextFieldKrb5RenewTimeD</string>
-+								<string key="candidateClassName">NSTextField</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">nsTextFieldKrb5RenewTimeH</string>
-+								<string key="candidateClassName">NSTextField</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">nsTextFieldKrb5RenewTimeM</string>
-+								<string key="candidateClassName">NSTextField</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">nsTextFieldKrb5RenewTimeS</string>
-+								<string key="candidateClassName">NSTextField</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">nsTextFieldKrb5SecToExpireDateForRenew</string>
-+								<string key="candidateClassName">NSTextField</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">removeCellButton</string>
-+								<string key="candidateClassName">NSControl</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">saveConfigurationButton</string>
-+								<string key="candidateClassName">NSControl</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">startStopButton</string>
-+								<string key="candidateClassName">NSButton</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">statCacheEntry</string>
-+								<string key="candidateClassName">NSTextField</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">tableViewLink</string>
-+								<string key="candidateClassName">NSTableView</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">textFieldDevInfoLabel</string>
-+								<string key="candidateClassName">NSTextField</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">textSearchField</string>
-+								<string key="candidateClassName">NSSearchField</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">tokensButton</string>
-+								<string key="candidateClassName">NSButton</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">tokensTable</string>
-+								<string key="candidateClassName">NSTableView</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">unlogButton</string>
-+								<string key="candidateClassName">NSButton</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">useAklogCheck</string>
-+								<string key="candidateClassName">NSButton</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">verbose</string>
-+								<string key="candidateClassName">NSButton</string>
-+							</object>
- 						</object>
- 					</object>
- 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBUserSource</string>
--						<string key="minorKey"/>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">FirstResponder</string>
--					<string key="superclassName">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBUserSource</string>
--						<string key="minorKey"/>
-+						<string key="majorKey">IBProjectSource</string>
-+						<string key="minorKey">./Classes/AFSCommanderPref.h</string>
- 					</object>
- 				</object>
- 				<object class="IBPartialClassDescription">
-@@ -5813,30 +6097,16 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 						<string key="NS.key.0">closePanel:</string>
- 						<string key="NS.object.0">id</string>
- 					</object>
--					<object class="NSMutableDictionary" key="outlets">
--						<bool key="EncodedWithXMLCoder">YES</bool>
--						<object class="NSArray" key="dict.sortedKeys">
--							<bool key="EncodedWithXMLCoder">YES</bool>
--							<string>infoPanel</string>
--							<string>texEditInfo</string>
--						</object>
--						<object class="NSMutableArray" key="dict.values">
--							<bool key="EncodedWithXMLCoder">YES</bool>
--							<string>id</string>
--							<string>id</string>
-+					<object class="NSMutableDictionary" key="actionInfosByName">
-+						<string key="NS.key.0">closePanel:</string>
-+						<object class="IBActionInfo" key="NS.object.0">
-+							<string key="name">closePanel:</string>
-+							<string key="candidateClassName">id</string>
- 						</object>
- 					</object>
- 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
- 						<string key="majorKey">IBProjectSource</string>
--						<string key="minorKey">InfoController.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">InfoController</string>
--					<string key="superclassName">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBUserSource</string>
--						<string key="minorKey"/>
-+						<string key="minorKey">./Classes/InfoController.h</string>
- 					</object>
- 				</object>
- 				<object class="IBPartialClassDescription">
-@@ -5850,13 +6120,37 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 							<string>save:</string>
- 							<string>selectLinkDest:</string>
- 						</object>
--						<object class="NSMutableArray" key="dict.values">
-+						<object class="NSArray" key="dict.values">
- 							<bool key="EncodedWithXMLCoder">YES</bool>
- 							<string>id</string>
- 							<string>id</string>
- 							<string>id</string>
- 						</object>
- 					</object>
-+					<object class="NSMutableDictionary" key="actionInfosByName">
-+						<bool key="EncodedWithXMLCoder">YES</bool>
-+						<object class="NSArray" key="dict.sortedKeys">
-+							<bool key="EncodedWithXMLCoder">YES</bool>
-+							<string>cancell:</string>
-+							<string>save:</string>
-+							<string>selectLinkDest:</string>
-+						</object>
-+						<object class="NSArray" key="dict.values">
-+							<bool key="EncodedWithXMLCoder">YES</bool>
-+							<object class="IBActionInfo">
-+								<string key="name">cancell:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">save:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+							<object class="IBActionInfo">
-+								<string key="name">selectLinkDest:</string>
-+								<string key="candidateClassName">id</string>
-+							</object>
-+						</object>
-+					</object>
- 					<object class="NSMutableDictionary" key="outlets">
- 						<bool key="EncodedWithXMLCoder">YES</bool>
- 						<object class="NSArray" key="dict.sortedKeys">
-@@ -5865,402 +6159,40 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 							<string>textFieldLinkDestPath</string>
- 							<string>textfieldLinkName</string>
- 						</object>
--						<object class="NSMutableArray" key="dict.values">
-+						<object class="NSArray" key="dict.values">
- 							<bool key="EncodedWithXMLCoder">YES</bool>
- 							<string>NSPanel</string>
- 							<string>NSTextField</string>
- 							<string>NSTextField</string>
- 						</object>
- 					</object>
-+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-+						<bool key="EncodedWithXMLCoder">YES</bool>
-+						<object class="NSArray" key="dict.sortedKeys">
-+							<bool key="EncodedWithXMLCoder">YES</bool>
-+							<string>lynkCreationSheet</string>
-+							<string>textFieldLinkDestPath</string>
-+							<string>textfieldLinkName</string>
-+						</object>
-+						<object class="NSArray" key="dict.values">
-+							<bool key="EncodedWithXMLCoder">YES</bool>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">lynkCreationSheet</string>
-+								<string key="candidateClassName">NSPanel</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">textFieldLinkDestPath</string>
-+								<string key="candidateClassName">NSTextField</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">textfieldLinkName</string>
-+								<string key="candidateClassName">NSTextField</string>
-+							</object>
-+						</object>
-+					</object>
- 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
- 						<string key="majorKey">IBProjectSource</string>
--						<string key="minorKey">LynkCreationController.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSPreferencePane</string>
--					<string key="superclassName">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBUserSource</string>
--						<string key="minorKey"/>
--					</object>
--				</object>
--			</object>
--			<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
--				<bool key="EncodedWithXMLCoder">YES</bool>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSActionCell</string>
--					<string key="superclassName">NSCell</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSActionCell.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSApplication</string>
--					<string key="superclassName">NSResponder</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="204676479">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSApplication.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSApplication</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="621097933">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSApplication</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="104909186">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSApplication</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSApplication</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSApplication</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSBox</string>
--					<string key="superclassName">NSView</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSBox.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSButton</string>
--					<string key="superclassName">NSControl</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSButton.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSButtonCell</string>
--					<string key="superclassName">NSActionCell</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSButtonCell.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSCell</string>
--					<string key="superclassName">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSCell.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSControl</string>
--					<string key="superclassName">NSView</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="41055177">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSControl.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSFormatter</string>
--					<string key="superclassName">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSMenu</string>
--					<string key="superclassName">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="734906022">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSMenu.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSNumberFormatter</string>
--					<string key="superclassName">NSFormatter</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSNumberFormatter.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<reference key="sourceIdentifier" ref="204676479"/>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<reference key="sourceIdentifier" ref="621097933"/>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<reference key="sourceIdentifier" ref="104909186"/>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<reference key="sourceIdentifier" ref="41055177"/>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSDragging.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<reference key="sourceIdentifier" ref="734906022"/>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="616595462">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSTableView.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="354787859">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSView.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSPanel</string>
--					<string key="superclassName">NSWindow</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSPanel.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSPopUpButton</string>
--					<string key="superclassName">NSButton</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSPopUpButton.h</string>
-+						<string key="minorKey">./Classes/LynkCreationController.h</string>
- 					</object>
- 				</object>
- 				<object class="IBPartialClassDescription">
-@@ -6275,7 +6207,7 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 							<string>_lastKeyView</string>
- 							<string>_window</string>
- 						</object>
--						<object class="NSMutableArray" key="dict.values">
-+						<object class="NSArray" key="dict.values">
- 							<bool key="EncodedWithXMLCoder">YES</bool>
- 							<string>NSView</string>
- 							<string>NSView</string>
-@@ -6283,189 +6215,38 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 							<string>NSWindow</string>
- 						</object>
- 					</object>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">PreferencePanes.framework/Headers/NSPreferencePane.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSResponder</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSResponder</string>
--					<string key="superclassName">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSResponder.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSScrollView</string>
--					<string key="superclassName">NSView</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSScrollView.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSScroller</string>
--					<string key="superclassName">NSControl</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSScroller.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSSearchField</string>
--					<string key="superclassName">NSTextField</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSSearchField.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSSearchFieldCell</string>
--					<string key="superclassName">NSTextFieldCell</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSSearchFieldCell.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSStepper</string>
--					<string key="superclassName">NSControl</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSStepper.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSStepperCell</string>
--					<string key="superclassName">NSActionCell</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSStepperCell.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSTabView</string>
--					<string key="superclassName">NSView</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSTabView.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSTabViewItem</string>
--					<string key="superclassName">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSTabViewItem.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSTableColumn</string>
--					<string key="superclassName">NSObject</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSTableColumn.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSTableHeaderView</string>
--					<string key="superclassName">NSView</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSTableHeaderView.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSTableView</string>
--					<string key="superclassName">NSControl</string>
--					<reference key="sourceIdentifier" ref="616595462"/>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSText</string>
--					<string key="superclassName">NSView</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSText.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSTextField</string>
--					<string key="superclassName">NSControl</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSTextField.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSTextFieldCell</string>
--					<string key="superclassName">NSActionCell</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSTextFieldCell.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSTextView</string>
--					<string key="superclassName">NSText</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSTextView.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSView</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSClipView.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSView</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSView</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSView</string>
--					<string key="superclassName">NSResponder</string>
--					<reference key="sourceIdentifier" ref="354787859"/>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSWindow</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string>
--					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSWindow</string>
--					<string key="superclassName">NSResponder</string>
--					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSWindow.h</string>
-+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-+						<bool key="EncodedWithXMLCoder">YES</bool>
-+						<object class="NSArray" key="dict.sortedKeys">
-+							<bool key="EncodedWithXMLCoder">YES</bool>
-+							<string>_firstKeyView</string>
-+							<string>_initialKeyView</string>
-+							<string>_lastKeyView</string>
-+							<string>_window</string>
-+						</object>
-+						<object class="NSArray" key="dict.values">
-+							<bool key="EncodedWithXMLCoder">YES</bool>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">_firstKeyView</string>
-+								<string key="candidateClassName">NSView</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">_initialKeyView</string>
-+								<string key="candidateClassName">NSView</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">_lastKeyView</string>
-+								<string key="candidateClassName">NSView</string>
-+							</object>
-+							<object class="IBToOneOutletInfo">
-+								<string key="name">_window</string>
-+								<string key="candidateClassName">NSWindow</string>
-+							</object>
-+						</object>
- 					</object>
--				</object>
--				<object class="IBPartialClassDescription">
--					<string key="className">NSWindow</string>
- 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
--						<string key="majorKey">IBFrameworkSource</string>
--						<string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string>
-+						<string key="majorKey">IBProjectSource</string>
-+						<string key="minorKey">./Classes/NSPreferencePane.h</string>
- 					</object>
- 				</object>
- 			</object>
-@@ -6481,7 +6262,6 @@ Zm9yIGRlYnVnZ2luZyBhcyBpdCBwcmludHMgYSBMT1Qgb2YgaW5mb3JtYXRpb24uCg</string>
- 			<integer value="3000" key="NS.object.0"/>
- 		</object>
- 		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
--		<string key="IBDocument.LastKnownRelativeProjectPath">../OpenAFS.xcodeproj</string>
- 		<int key="IBDocument.defaultPropertyAccessControl">3</int>
- 		<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
- 			<string key="NS.key.0">NSSwitch</string>
-diff --git a/src/platform/DARWIN/AFSPreference/IpConfiguratorCommander.m b/src/platform/DARWIN/AFSPreference/IpConfiguratorCommander.m
-index 3042397..70a50ab 100644
---- a/src/platform/DARWIN/AFSPreference/IpConfiguratorCommander.m
-+++ b/src/platform/DARWIN/AFSPreference/IpConfiguratorCommander.m
-@@ -16,8 +16,8 @@
- // -------------------------------------------------------------------------------
- - (void)awakeFromNib
- {
--	[((NSTableView*)tableViewCellIP) setDelegate:self];
--	[((NSTableView*)tableViewCellIP) setDataSource:self];
-+	[tableViewCellIP setDelegate:self];
-+	[tableViewCellIP setDataSource:self];
- }
- 
- // -------------------------------------------------------------------------------
-@@ -44,8 +44,8 @@
- - (void) commitModify
- {
- 	//store the cell name
--	[cellElement setCellName:[((NSControl*) textFieldCellName) stringValue]];
--	[cellElement setCellComment:[((NSControl*) textFieldComment) stringValue]];
-+	[cellElement setCellName:[textFieldCellName stringValue]];
-+	[cellElement setCellComment:[textFieldComment stringValue]];
- 	[bkIPArray removeAllObjects];
- 	[bkIPArray setArray:workIPArray];
- 	[workIPArray release];
-@@ -81,8 +81,8 @@
- 	[workIPArray addObject:ip];
- 	[ip release];
- 	currentSelectedIP = ip;
--	[((NSTableView*)tableViewCellIP) reloadData];
--	[((NSTableView *) tableViewCellIP)  scrollRowToVisible:[[cellElement getIp] count]-1];
-+	[tableViewCellIP reloadData];
-+	[tableViewCellIP scrollRowToVisible:[[cellElement getIp] count]-1];
- }
- 
- // -------------------------------------------------------------------------------
-@@ -90,10 +90,10 @@
- // -------------------------------------------------------------------------------
- - (IBAction) cancelIP:(id) sender
- {
--	[workIPArray removeObjectAtIndex:[((NSTableView*)tableViewCellIP) selectedRow]];
--	[((NSTableView*)tableViewCellIP) deselectAll:nil];
-+	[workIPArray removeObjectAtIndex:[tableViewCellIP selectedRow]];
-+	[tableViewCellIP deselectAll:nil];
- 	[self manageTableSelection:-1];
--	[((NSTableView*)tableViewCellIP) reloadData];
-+	[tableViewCellIP reloadData];
- 
- }
- 
-@@ -110,9 +110,9 @@
- // -------------------------------------------------------------------------------
- - (void) loadValueFromCellIPClass
- {
--	[((NSTextField*)textFieldCellName) setStringValue:[cellElement getCellName]]; 
--	[((NSTextField*)textFieldComment) setStringValue:[cellElement getCellComment]]; 
--	[((NSTableView*)tableViewCellIP) reloadData];
-+	[textFieldCellName setStringValue:[cellElement getCellName]];
-+	[textFieldComment setStringValue:[cellElement getCellComment]];
-+	[tableViewCellIP reloadData];
- }
- 
- // -------------------------------------------------------------------------------
-@@ -121,7 +121,7 @@
- - (void) manageTableSelection:(int)row
- {
- 	//[((NSControl*) modifyButton) setEnabled:row>=0];
--	[((NSControl*) deleteButton) setEnabled:row>=0];
-+	[deleteButton setEnabled:row>=0];
- }
- 
- - (id) getPanel
-@@ -194,7 +194,7 @@
-    forTableColumn:(NSTableColumn *)aCol row:(int)aRow
- {
- 	CellIp *ipElement =  (CellIp*)[workIPArray objectAtIndex:aRow];
--	switch([((NSNumber*)[aCol identifier]) intValue])
-+	switch([[aCol identifier] intValue])
- 	{
- 		case 1:
- 			[ipElement setCellIp:[aData description]];
-diff --git a/src/platform/DARWIN/AFSPreference/PListManager.h b/src/platform/DARWIN/AFSPreference/PListManager.h
-index c1fb051..44f90bf 100644
---- a/src/platform/DARWIN/AFSPreference/PListManager.h
-+++ b/src/platform/DARWIN/AFSPreference/PListManager.h
-@@ -40,7 +40,7 @@
-  @abstract   Enable or disable the system to get kerberos ticket at login time
-  @discussion <#(comprehensive description)#>
-  */
--+(void) krb5TiketAtLoginTime:(BOOL)enable;
-++(void) krb5TiketAtLoginTime:(BOOL)enable helper:(NSString *)helper;
- 
- /*!
-  @method     checkKrb5AtLoginTimeLaunchdEnable
-@@ -80,9 +80,7 @@
-  @abstract   exec the launchctl command on a particular plist job
-  @discussion <#(comprehensive description)#>
-  */
--+(void) launchctlStringCommand:(NSString*)operation
--						option:(NSArray*)option
--					 plistName:(NSString*)plistName;
-++(void) launchctlStringCommandAuth:(NSString*)operation option:(NSArray*)option plistName:(NSString*)plistName helper:(NSString *)helper withAuthRef:(AuthorizationRef)authRef;
- /*!
-  @method     launchdJobState
-  @abstract   check is a job has been submitted to launchd
-diff --git a/src/platform/DARWIN/AFSPreference/PListManager.m b/src/platform/DARWIN/AFSPreference/PListManager.m
-index 8497870..977f962 100644
---- a/src/platform/DARWIN/AFSPreference/PListManager.m
-+++ b/src/platform/DARWIN/AFSPreference/PListManager.m
-@@ -17,7 +17,8 @@
- // -------------------------------------------------------------------------------
- //  krb5TiketAtLoginTime:
- // -------------------------------------------------------------------------------
--+(void) krb5TiketAtLoginTime:(BOOL)enable{
-++(void) krb5TiketAtLoginTime:(BOOL)enable helper:(NSString *)helper
-+{
- 	NSData					*plistData = nil;
- 	NSString				*error = nil;
- 	NSString				*toRemove = nil;
-@@ -112,16 +113,15 @@
- 	
- 	//now we can move the file
- 	futil = [[FileUtil alloc] init];
--	if([futil startAutorization] == noErr) {
--		if(![[NSFileManager defaultManager] fileExistsAtPath:AUTH_FILE_BK]) {
--			//bk file doesn't exist so make it
--			[futil autorizedCopy:AUTH_FILE toPath:AUTH_FILE_BK];
--		}
--		// chmod on tmp file
--		[futil autorizedChown:TMP_FILE owner:@"root" group:@"wheel"];
--		//move the file 
--		[futil autorizedMoveFile:TMP_FILE toPath:AUTH_FILE_DIR];
-+	if(![[NSFileManager defaultManager] fileExistsAtPath:AUTH_FILE_BK]) {
-+	    //bk file doesn't exist so make it
-+	    [futil autorizedCopy:AUTH_FILE toPath:AUTH_FILE_BK];
- 	}
-+	// chmod on tmp file
-+	[futil autorizedChown:TMP_FILE owner:@"root" group:@"wheel"];
-+	//move the file
-+	[futil autorizedMoveFile:TMP_FILE toPath:AUTH_FILE_DIR];
-+
- 	[futil release];
- }
- 
-@@ -223,9 +223,9 @@
- //  installAfsStartupLaunchdFile:
- // -------------------------------------------------------------------------------
- +(void) manageAfsStartupLaunchdFile:(BOOL)enable 
--				   afsStartupScript:(NSString*)afsStartupScript 
--						afsBasePath:(NSString*)afsBasePath 
--						   afsdPath:(NSString*)afsdPath {
-+		   afsStartupScript:(NSString*)afsStartupScript
-+			afsBasePath:(NSString*)afsBasePath
-+			   afsdPath:(NSString*)afsdPath {
- 	NSData				*plistData = nil;
- 	NSMutableDictionary *launchdDic = nil;
- 	NSString			*error = nil;
-@@ -288,9 +288,10 @@
- //  launchctlCommand:
- // -------------------------------------------------------------------------------
- +(void) launchctlCommand:(BOOL)enable
--			  userDomain:(BOOL)userDomain
--					   option:(NSArray*)option 
--					plistName:(NSString*)plistName {
-+	      userDomain:(BOOL)userDomain
-+		  option:(NSArray*)option
-+	       plistName:(NSString*)plistName
-+{
- 	NSMutableArray *argument = [NSMutableArray array];
- 	NSMutableString *commandPath = [NSMutableString stringWithCapacity:0];
- 	NSUInteger searchDomain = userDomain?NSUserDomainMask:NSSystemDomainMask;
-@@ -307,17 +308,21 @@
- 	[commandPath appendFormat:@"/LaunchAgents/%@", plistName];
- 	
- 	[argument addObject:commandPath];
-+
- 	//exec the command
--	[TaskUtil executeTaskSearchingPath:@"launchctl"  
--								  args:argument];
-+	[TaskUtil executeTask:@"/bin/launchctl"
-+		  arguments:argument];
- }
- 
- // -------------------------------------------------------------------------------
- //  launchctlCommand:
- // -------------------------------------------------------------------------------
--+(void) launchctlStringCommand:(NSString*)operation
--				  option:(NSArray*)option
--			   plistName:(NSString*)plistName {
-++(void) launchctlStringCommandAuth:(NSString *)operation
-+			    option:(NSArray *)option
-+			 plistName:(NSString *)plistName
-+			    helper:(NSString *)helper
-+		       withAuthRef:(AuthorizationRef)authRef
-+{
- 	NSMutableArray *argument = [NSMutableArray array];
- 
- 	//set the load unload
-@@ -330,8 +335,8 @@
- 	[argument addObject: plistName];
- 
- 	//exec the command
--	[TaskUtil executeTaskSearchingPath:@"launchctl"
--								  args:argument];
-+	[TaskUtil executeTaskWithAuth:@"/bin/launchctl"
-+		  arguments:argument helper:helper withAuthRef:authRef];
- }
- 
- // -------------------------------------------------------------------------------
-diff --git a/src/platform/DARWIN/AFSPreference/TaskUtil.h b/src/platform/DARWIN/AFSPreference/TaskUtil.h
-index b7fc7ec..459b68e 100644
---- a/src/platform/DARWIN/AFSPreference/TaskUtil.h
-+++ b/src/platform/DARWIN/AFSPreference/TaskUtil.h
-@@ -16,4 +16,5 @@
- +(NSString*) executeTaskSearchingPath:(NSString*)unixCommand args:(NSArray*)args;
- +(NSString*) executeTask:(NSString*) taskName arguments:(NSArray *)args;
- +(int) executeTaskWithAuth:(NSString*) taskName arguments:(NSArray *)args authExtForm:(NSData*)auth;
-++(int) executeTaskWithAuth:(NSString*) taskName arguments:(NSArray *)args helper:(NSString *)helper withAuthRef:(AuthorizationRef)authRef;
- @end
-diff --git a/src/platform/DARWIN/AFSPreference/TaskUtil.m b/src/platform/DARWIN/AFSPreference/TaskUtil.m
-index c27ee8f..3c94524 100644
---- a/src/platform/DARWIN/AFSPreference/TaskUtil.m
-+++ b/src/platform/DARWIN/AFSPreference/TaskUtil.m
-@@ -7,6 +7,7 @@
- //
- 
- #import "TaskUtil.h"
-+#import "AuthUtil.h"
- 
- 
- @implementation TaskUtil
-@@ -75,6 +76,36 @@
- // -------------------------------------------------------------------------------
- //  executeTask:
- // -------------------------------------------------------------------------------
-++(int) executeTaskWithAuth:(NSString*) taskName arguments:(NSArray *)args helper:(NSString *)helper withAuthRef:(AuthorizationRef)authRef {
-+    const char *rootHelperApp = [helper fileSystemRepresentation];
-+    OSStatus status;
-+    AuthorizationFlags flags = kAuthorizationFlagDefaults;
-+    int count = [args count];
-+    char **myArguments = calloc(count + 2, sizeof(char *));
-+    int i=0;
-+
-+    myArguments[0] = strdup([taskName UTF8String]);
-+    for(i=0;i < count;i++) {
-+	const char *string = [[args objectAtIndex:i] UTF8String];
-+	if(!string)
-+	    break;
-+	myArguments[1+i] = strdup(string);
-+    }
-+    myArguments[1+i] = NULL;
-+
-+    // should use SMJobBless but we need to sign things...
-+    status = AuthorizationExecuteWithPrivileges(authRef, rootHelperApp, flags, myArguments, NULL);
-+
-+    i = 0;
-+    while (myArguments[i] != NULL) {
-+        free(myArguments[i]);
-+        i++;
-+    }
-+
-+    free(myArguments);
-+    return status;
-+}
-+
- +(int) executeTaskWithAuth:(NSString*) taskName arguments:(NSArray *)args authExtForm:(NSData*)auth {
- 	NSString *result = nil;
- 	int status = 0;
-diff --git a/src/platform/DARWIN/AFSPreference/afshlp.m b/src/platform/DARWIN/AFSPreference/afshlp.m
-index ad59d94..5d2f702 100644
---- a/src/platform/DARWIN/AFSPreference/afshlp.m
-+++ b/src/platform/DARWIN/AFSPreference/afshlp.m
-@@ -1,213 +1,11 @@
--//
--//  afshlp.m
--//  AFSCommander
--//
--//  Created by Claudio on 28/06/07.
--//
--
--
--#include <sys/types.h>
--#include <unistd.h>
--#include <Security/Authorization.h>
--#include <Security/AuthorizationTags.h>
--#include <sys/param.h>
--#include <sys/stat.h>
--#include <sys/wait.h>
--#include <sys/types.h>
--#include <sys/fcntl.h>
--#include <sys/errno.h>
- #include <unistd.h>
--#include <stdlib.h>
--#include <string.h>
--#include <asl.h>
--#include <sys/event.h>
--#include <mach-o/dyld.h>
--#import "TaskUtil.h"
--#import "AuthUtil.h"
--#import "PListManager.h"
--
--#define AFS_DAEMON_STARTUPSCRIPT	"/Library/OpenAFS/Tools/root.client/usr/vice/etc/afs.rc"
--#define AFS_DAEMON_PATH				"/Library/LaunchDaemons/org.openafs.filesystems.afs.plist"
--
-- void stopAfs(int argc, char *argv[]);
-- void getPath(char **selfPathPtr);
-- void selfRepair(char *selfPath);
-- void runWithSelfRepair(char *selfPath,int argc, char *argv[]);
--
--int main(int argc, char *argv[])
--{
--	if (argc < 2)
--		return 1; // nothing to do
--	NSString *cmdString = [NSString stringWithCString:(const char *)argv[1] encoding:NSUTF8StringEncoding];
--
--	if(argc == 2 && [cmdString rangeOfString:@"stop_afs"].location!=NSNotFound ){
--		if (setuid(0) == -1)
--			return 1;
--		const char *stopArgs[] = {"stop", 0L};
--		[[AuthUtil shared] execUnixCommand:AFS_DAEMON_STARTUPSCRIPT
--									  args:stopArgs
--									output:nil];
--	} else 	if(argc == 2 && [cmdString rangeOfString:@"start_afs"].location!=NSNotFound){
--		if (setuid(0) == -1)
--			return 1;
--		const char *startArgs[] = {"start", 0L};
--		[[AuthUtil shared] execUnixCommand:AFS_DAEMON_STARTUPSCRIPT
--									  args:startArgs
--									output:nil];
--	} else if(argc == 4 && [cmdString rangeOfString:@"enable_krb5_startup"].location!=NSNotFound) {
--		int olduid = getuid();
--		setuid(0);
--		int arg2 = atoi(argv[2]);
--		[PListManager krb5TiketAtLoginTime:[[NSNumber numberWithInt:arg2] boolValue]];
--	} else if(argc == 3 && [cmdString rangeOfString:@"start_afs_at_startup"].location!=NSNotFound){
--		if (setuid(0) == -1)
--			return 1;
--		BOOL enable = strcmp("enable", argv[2])==0;
--		NSLog(@"Manage start_afs_at_startup with option %s from helper", argv[2]);
--		[PListManager launchctlStringCommand:enable?@"load":@"unload"
--									  option:[NSArray arrayWithObjects:@"-w", nil]
--								   plistName:@AFS_DAEMON_PATH];
--#if 0
--	} else if(argc == 2 && [cmdString rangeOfString:@"check_afs_daemon"].location!=NSNotFound) {
--		NSString *fsResult = [TaskUtil executeTaskSearchingPath:@"launchctl" args:[NSArray arrayWithObjects: @"list", nil]];
--		BOOL checkAfsDaemon = (fsResult?([fsResult rangeOfString:@"org.openafs.filesystems.afs"].location != NSNotFound):NO);
--		printf("afshlp:afs daemon registration result:%d",checkAfsDaemon);
--#endif
--	}
--	return 0;
--}
--
--#if 0
--void stopAfs(int argc, char *argv[])
--{
--	const char *umountArgs[] = {"-f", "/afs", 0L};
--	[[AuthUtil shared] execUnixCommand:"/sbin/umount" 
--								  args:umountArgs
--								output:nil];
--	
--	const char *afsdArgs[] = {"-shutdown", 0L};
--	[[AuthUtil shared] execUnixCommand:argv[3]
--								  args:afsdArgs
--								output:nil];
--	
--	const char *kernelExtArgs[] = {argv[2], 0L};
--	[[AuthUtil shared] execUnixCommand:"/sbin/kextunload"
--								  args:kernelExtArgs
--								output:nil];
--	
--	[[AuthUtil shared] deautorize];
--}
--
--// Code to get the path to the executable using _NSGetExecutablePath.
--void getPath(char **selfPathPtr)
--{
--    uint32_t selfPathSize = MAXPATHLEN;
--    if(!(*selfPathPtr = malloc(selfPathSize)))
--    {
--        exit(-1);
--    }
--    if(_NSGetExecutablePath(*selfPathPtr, &selfPathSize) == -1)
--    {
--        // Try reallocating selfPath with the size returned by the function.
--        if(!(*selfPathPtr = realloc(*selfPathPtr, selfPathSize + 1)))
--        {
--            NSLog(@"Could not allocate memory to hold executable path.");
--            exit(-1);
--        }
--        if(_NSGetExecutablePath(*selfPathPtr, &selfPathSize) != 0)
--        {
--            NSLog(@"Could not get executable path.");
--            exit(-1);
--        }
--    }
--}
--
--int main(int argc, char *argv[])
--{
--	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
--    char *selfPath;
--	
--	NSLog(@"num of arguments %d", argc);
--	int status = [[AuthUtil shared] autorize];
--	if(status != noErr) exit(-1);
--	
--    // Get the path to the tool's executable
--    getPath(&selfPath);
--
--    //selfRepair(selfPath);
--    // All done with the executable path
--    if(selfPath) free(selfPath);
--	
--	// Now do the real work of running the command.
--    runCommand(argc, argv);
--    [[AuthUtil shared] deautorize];
--    [pool release];
--	
--	return 0;
--}
--
--// Self-repair code. Found somehwere in internet
--void selfRepair(char *selfPath)
-+int
-+main(int argc, char *argv[], char *envp[])
- {
--    struct stat st;
--    int fdTool;
--	printf("selfRepair"); 
--	
--//    [[AuthUtil shared] autorize];
--    
--    // Open tool exclusively, noone can touch it when we work on it, this idea i kepped somewhere in internet
--    fdTool = open(selfPath, O_NONBLOCK | O_RDONLY | O_EXLOCK, 0);
--    
--    if(fdTool == -1)
--    {
--        NSLog(@"Open Filed: %d.", errno);
--        exit(-1);
--    }
--    
--    if(fstat(fdTool, &st))
--    {
--        NSLog(@"fstat failed.");
--        exit(-1);
--    }
--    
--    // Disable group and world writability and make setuid root.
--    if ((st.st_uid != 0) || (st.st_mode & S_IWGRP) || (st.st_mode & S_IWOTH) ||
--	!(st.st_mode & S_ISUID))
--    {
--        fchown(fdTool, 0, st.st_gid);
--	fchmod(fdTool, (st.st_mode & (~(S_IWGRP | S_IWOTH))) | S_ISUID);
--    } else  NSLog(@"st_uid = 0");
--    
--    close(fdTool);
--    
--    NSLog(@"Self-repair done.");
-+    int euid;
-+    euid = geteuid();
-+    if (setuid(euid) != 0)
-+	return -1;
-+    return execve(argv[1], &argv[1], envp);
- }
- 
--
--// Code to execute the tool in self-repair mode.
--void runWithSelfRepair(char *selfPath, int argc, char *argv[])
--{
--    int status;
--    int pid;
--	
--      
--	// Make the qargs array for passing to child the same args of father
--    const char *arguments[] = {argv[1], argv[2], argv[3], "--self-repair", 0L};
--	
--	// Get the privileged AuthorizationRef
--    [[AuthUtil shared] autorize];
--	[[AuthUtil shared] execUnixCommand:selfPath 
--								  args:arguments 
--								output:nil];
--
--    pid = wait(&status);
--    if(pid == -1 || !WIFEXITED(status))
--    {
--        NSLog(@"Error returned from wait().");
--        exit(-1);
--    }
--    
--    // Exit with the same exit code as the self-repair child
--    exit(WEXITSTATUS(status));
--}
--#endif
-diff --git a/src/ptserver/db_verify.c b/src/ptserver/db_verify.c
-index e998639..0e76765 100644
---- a/src/ptserver/db_verify.c
-+++ b/src/ptserver/db_verify.c
-@@ -536,17 +536,13 @@ WalkNextChain(char map[],		/* one byte per db entry */
- 	    if (id == PRBADID)
- 		continue;
- 	    else if (id) {
--		int eid_s, id_s;
-+		int id_s;
- 		sgcount++;
- 		/* in case the ids are large, convert to pure sign. */
- 		if (id > 0)
- 		    id_s = 1;
- 		else
- 		    id_s = -1;
--		if (eid > 0)
--		    eid_s = 1;
--		else
--		    eid_s = -1;
- 		if (id_s > 0) {
- 		    fprintf(stderr,
- 			    "User can't be member of supergroup list\n");
-diff --git a/src/rx/rx.c b/src/rx/rx.c
-index 0ef85e5..f35bf83 100644
---- a/src/rx/rx.c
-+++ b/src/rx/rx.c
-@@ -3171,11 +3171,13 @@ rxi_ReceivePacket(struct rx_packet *np, osi_socket socket,
- 			   np->header.cid, np->header.epoch, type,
- 			   np->header.securityIndex);
- 
-+    /* To avoid having 2 connections just abort at each other,
-+       don't abort an abort. */
-     if (!conn) {
--	/* If no connection found or fabricated, just ignore the packet.
--	 * (An argument could be made for sending an abort packet for
--	 * the conn) */
--	return np;
-+        if (np->header.type != RX_PACKET_TYPE_ABORT)
-+            rxi_SendRawAbort(socket, host, port, RX_INVALID_OPERATION,
-+                             np, 0);
-+        return np;
-     }
- 
-     /* If the connection is in an error state, send an abort packet and ignore
-@@ -4921,12 +4923,11 @@ rxi_AttachServerProc(struct rx_call *call,
- 	if (call->flags & RX_CALL_WAIT_PROC) {
- 	    /* Conservative:  I don't think this should happen */
- 	    call->flags &= ~RX_CALL_WAIT_PROC;
-+	    MUTEX_ENTER(&rx_waiting_mutex);
-+	    rx_nWaiting--;
-+	    MUTEX_EXIT(&rx_waiting_mutex);
- 	    if (queue_IsOnQueue(call)) {
- 		queue_Remove(call);
--
--                MUTEX_ENTER(&rx_waiting_mutex);
--                rx_nWaiting--;
--                MUTEX_EXIT(&rx_waiting_mutex);
- 	    }
- 	}
- 	call->state = RX_STATE_ACTIVE;
-@@ -5428,6 +5429,11 @@ rxi_ResetCall(struct rx_call *call, int newcall)
- 	osi_rxWakeup(&call->twind);
- #endif
- 
-+    if (flags & RX_CALL_WAIT_PROC) {
-+	MUTEX_ENTER(&rx_stats_mutex);
-+	rx_nWaiting--;
-+	MUTEX_EXIT(&rx_stats_mutex);
-+    }
- #ifdef RX_ENABLE_LOCKS
-     /* The following ensures that we don't mess with any queue while some
-      * other thread might also be doing so. The call_queue_lock field is
-@@ -5442,12 +5448,6 @@ rxi_ResetCall(struct rx_call *call, int newcall)
- 	MUTEX_ENTER(call->call_queue_lock);
- 	if (queue_IsOnQueue(call)) {
- 	    queue_Remove(call);
--	    if (flags & RX_CALL_WAIT_PROC) {
--
--                MUTEX_ENTER(&rx_waiting_mutex);
--                rx_nWaiting--;
--                MUTEX_EXIT(&rx_waiting_mutex);
--	    }
- 	}
- 	MUTEX_EXIT(call->call_queue_lock);
- 	CLEAR_CALL_QUEUE_LOCK(call);
-@@ -5455,8 +5455,6 @@ rxi_ResetCall(struct rx_call *call, int newcall)
- #else /* RX_ENABLE_LOCKS */
-     if (queue_IsOnQueue(call)) {
- 	queue_Remove(call);
--	if (flags & RX_CALL_WAIT_PROC)
--	    rx_nWaiting--;
-     }
- #endif /* RX_ENABLE_LOCKS */
- 
-diff --git a/src/rx/rx_packet.c b/src/rx/rx_packet.c
-index 314504a..4d733de 100644
---- a/src/rx/rx_packet.c
-+++ b/src/rx/rx_packet.c
-@@ -2548,6 +2548,41 @@ rxi_SendPacketList(struct rx_call *call, struct rx_connection *conn,
-     }
- }
- 
-+/* Send a raw abort packet, without any call or connection structures */
-+void
-+rxi_SendRawAbort(osi_socket socket, afs_uint32 host, u_short port,
-+		 afs_int32 error, struct rx_packet *source, int istack)
-+{
-+    struct rx_header theader;
-+    struct sockaddr_in addr;
-+    struct iovec iov[2];
-+
-+    memset(&theader, 0, sizeof(theader));
-+    theader.epoch = htonl(source->header.epoch);
-+    theader.callNumber = htonl(source->header.callNumber);
-+    theader.serial = htonl(1);
-+    theader.type = RX_PACKET_TYPE_ABORT;
-+    theader.serviceId = htons(source->header.serviceId);
-+    theader.securityIndex = source->header.securityIndex;
-+    theader.cid = htonl(source->header.cid);
-+
-+    error = htonl(error);
-+
-+    iov[0].iov_base = &theader;
-+    iov[0].iov_len = sizeof(struct rx_header);
-+    iov[1].iov_base = &error;
-+    iov[1].iov_len = sizeof(error);
-+
-+    addr.sin_family = AF_INET;
-+    addr.sin_addr.s_addr = host;
-+    addr.sin_port = port;
-+#ifdef STRUCT_SOCKADDR_HAS_SA_LEN
-+    addr.sin_len = sizeof(struct sockaddr_in);
-+#endif
-+
-+    osi_NetSend(socket, &addr, iov, 2,
-+		sizeof(struct rx_header) + sizeof(error), istack);
-+}
- 
- /* Send a "special" packet to the peer connection.  If call is
-  * specified, then the packet is directed to a specific call channel
-diff --git a/src/rx/rx_prototypes.h b/src/rx/rx_prototypes.h
-index 3315116..d433dfe 100644
---- a/src/rx/rx_prototypes.h
-+++ b/src/rx/rx_prototypes.h
-@@ -564,6 +564,9 @@ extern void rxi_SendPacket(struct rx_call *call, struct rx_connection *conn,
- extern void rxi_SendPacketList(struct rx_call *call,
- 			       struct rx_connection *conn,
- 			       struct rx_packet **list, int len, int istack);
-+extern void rxi_SendRawAbort(osi_socket socket, afs_uint32 host, u_short port,
-+			     afs_int32 error, struct rx_packet *source,
-+			     int istack);
- extern struct rx_packet *rxi_SendSpecial(struct rx_call *call,
- 					 struct rx_connection *conn,
- 					 struct rx_packet *optionalPacket,
-diff --git a/src/rxgen/rpc_parse.c b/src/rxgen/rpc_parse.c
-index a88a069..a19ca54 100644
---- a/src/rxgen/rpc_parse.c
-+++ b/src/rxgen/rpc_parse.c
-@@ -1658,11 +1658,6 @@ ss_ProcTail_setup(definition * defp, int somefrees)
-     for (plist = defp->pc.plists; plist; plist = plist->next) {
- 	if (plist->component_kind == DEF_PARAM
- 	    && (plist->pl.param_flag & FREETHIS_PARAM)) {
--	    char *dot = "", *extens = "";
--	    if (plist->pl.string_name) {
--		dot = ".";
--		extens = plist->pl.string_name;
--	    }
- 	    f_print(fout, "\tif (!%s) goto fail1;\n", plist->scode);
- 	}
-     }
-diff --git a/src/rxkad/v5gen.c b/src/rxkad/v5gen.c
-index fe8ab6b..eb576fb 100644
---- a/src/rxkad/v5gen.c
-+++ b/src/rxkad/v5gen.c
-@@ -14,9 +14,8 @@ encode_krb5int32(unsigned char *p, size_t len, const krb5int32 * data, size_t *
- {
-     size_t ret = 0;
-     size_t l;
--    int i, e;
-+    int e;
- 
--    i = 0;
-     e = der_put_integer(p, len, data, &l);
-     if (e)
- 	return e;
-@@ -117,9 +116,8 @@ encode_Ticket(unsigned char *p, size_t len, const Ticket * data, size_t * size)
- {
-     size_t ret = 0;
-     size_t l;
--    int i, e;
-+    int e;
- 
--    i = 0;
- /* enc-part */
-     {
- 	size_t Top_tag_tag_oldret = ret;
-@@ -460,9 +458,8 @@ encode_AuthorizationDataElement(unsigned char *p, size_t len, const Authorizatio
- {
-     size_t ret = 0;
-     size_t l;
--    int i, e;
-+    int e;
- 
--    i = 0;
- /* ad-data */
-     {
- 	size_t Top_tag_oldret = ret;
-@@ -691,9 +688,8 @@ encode_EncryptedData(unsigned char *p, size_t len, const EncryptedData * data, s
- {
-     size_t ret = 0;
-     size_t l;
--    int i, e;
-+    int e;
- 
--    i = 0;
- /* cipher */
-     {
- 	size_t Top_tag_oldret = ret;
-@@ -1463,9 +1459,8 @@ encode_HostAddress(unsigned char *p, size_t len, const HostAddress * data, size_
- {
-     size_t ret = 0;
-     size_t l;
--    int i, e;
-+    int e;
- 
--    i = 0;
- /* address */
-     {
- 	size_t Top_tag_oldret = ret;
-@@ -1890,9 +1885,8 @@ encode_EncTicketPart(unsigned char *p, size_t len, const EncTicketPart * data, s
- {
-     size_t ret = 0;
-     size_t l;
--    int i, e;
-+    int e;
- 
--    i = 0;
- /* authorization-data */
-     if ((data)->authorization_data) {
- 	size_t Top_tag_tag_oldret = ret;
-@@ -2692,9 +2686,8 @@ encode_KerberosTime(unsigned char *p, size_t len, const KerberosTime * data, siz
- {
-     size_t ret = 0;
-     size_t l;
--    int i, e;
-+    int e;
- 
--    i = 0;
-     e = der_put_generalized_time(p, len, data, &l);
-     if (e)
- 	return e;
-@@ -2795,9 +2788,8 @@ encode_TransitedEncoding(unsigned char *p, size_t len, const TransitedEncoding *
- {
-     size_t ret = 0;
-     size_t l;
--    int i, e;
-+    int e;
- 
--    i = 0;
- /* contents */
-     {
- 	size_t Top_tag_oldret = ret;
-@@ -3026,9 +3018,8 @@ encode_EncryptionKey(unsigned char *p, size_t len, const EncryptionKey * data, s
- {
-     size_t ret = 0;
-     size_t l;
--    int i, e;
-+    int e;
- 
--    i = 0;
- /* keyvalue */
-     {
- 	size_t Top_tag_oldret = ret;
-@@ -3257,9 +3248,8 @@ encode_TicketFlags(unsigned char *p, size_t len, const TicketFlags * data, size_
- {
-     size_t ret = 0;
-     size_t l;
--    int i, e;
-+    int e;
- 
--    i = 0;
-     {
- 	unsigned char c = 0;
- 	if (len < 1)
-@@ -3519,9 +3509,8 @@ encode_Realm(unsigned char *p, size_t len, const Realm * data, size_t * size)
- {
-     size_t ret = 0;
-     size_t l;
--    int i, e;
-+    int e;
- 
--    i = 0;
-     e = der_put_general_string(p, len, data, &l);
-     if (e)
- 	return e;
-@@ -3627,9 +3616,8 @@ encode_ENCTYPE(unsigned char *p, size_t len, const ENCTYPE * data, size_t * size
- {
-     size_t ret = 0;
-     size_t l;
--    int i, e;
-+    int e;
- 
--    i = 0;
-     {
- 	int enumint = (int) *data;
- 	e = der_put_integer(p, len, &enumint, &l);
-@@ -3741,9 +3729,8 @@ encode_NAME_TYPE(unsigned char *p, size_t len, const NAME_TYPE * data, size_t *
- {
-     size_t ret = 0;
-     size_t l;
--    int i, e;
-+    int e;
- 
--    i = 0;
-     {
- 	int enumint = (int) *data;
- 	e = der_put_integer(p, len, &enumint, &l);
-diff --git a/src/scout/scout.c b/src/scout/scout.c
-index 9877ae1..2c2b392 100644
---- a/src/scout/scout.c
-+++ b/src/scout/scout.c
-@@ -1031,7 +1031,6 @@ mini_PrintDiskStats(struct mini_line *a_srvline,
- {				/*mini_PrintDiskStats */
- 
-     static char rn[] = "mini_PrintDiskStats";	/*Routine name */
--    int code;			/*Return code */
-     char s[128];		/*String buffer */
-     struct onode *curr_disklight;	/*Ptr to current disk light */
-     struct onode *srvname_light;	/*Ptr to server name light */
-@@ -1087,13 +1086,13 @@ mini_PrintDiskStats(struct mini_line *a_srvline,
- 			used_disk_idx, diskdata->label);
- 		fflush(scout_debugfd);
- 	    }
--	    code = mini_justify(" ",	/*Src buffer */
-+	    mini_justify(" ",	/*Src buffer */
- 				diskdata->label,	/*Dest buffer */
- 				scout_col_width[COL_DISK],	/*Dest's width */
- 				SCOUT_RIGHT_JUSTIFY,	/*Right-justify */
- 				SCOUT_LEFT_TRUNC,	/*Left-truncate */
- 				SCOUT_ISNT_LDISK);	/*Not a labeled disk */
--	    code = gator_light_set(curr_disklight, 0);
-+	    gator_light_set(curr_disklight, 0);
- 	    if (a_fix_line_num) {
- 		curr_disklight->o_y += a_delta_line_num;
- 		disk_strparams = (struct gwin_strparams *)(diskdata->llrock);
-@@ -1199,14 +1198,14 @@ mini_PrintDiskStats(struct mini_line *a_srvline,
- 			    rn, s, found_idx, diskdata->label);
- 		    fflush(scout_debugfd);
- 		}
--		code = mini_justify(s,	/*Src buffer */
-+		mini_justify(s,	/*Src buffer */
- 				    diskdata->label,	/*Dest buffer */
- 				    scout_col_width[COL_DISK],	/*Dest's width */
- 				    SCOUT_LEFT_JUSTIFY,	/*Left-justify */
- 				    SCOUT_LEFT_TRUNC,	/*Left-truncate */
- 				    SCOUT_IS_LDISK);	/*Labeled disk */
- 
--		code = gator_light_set(sc_disk->disk_lp, pastthreshold);
-+		gator_light_set(sc_disk->disk_lp, pastthreshold);
- 
- 	    }			/*Found disk record */
- 	}
-diff --git a/src/tptserver/Makefile.in b/src/tptserver/Makefile.in
-index 379dc61..a2f38c5 100644
---- a/src/tptserver/Makefile.in
-+++ b/src/tptserver/Makefile.in
-@@ -105,11 +105,13 @@ pthread_glock.o: ${UTIL}/pthread_glock.c
- ptserver.o: ${PTSERVER}/ptserver.c ${INCLS}
- 	${CCRULE} ${srcdir}/${PTSERVER}/ptserver.c
- 
-+# When supergroups is enabled, some parts of ptserver cast between
-+# # incompatible structs.
- ptutils.o: ${PTSERVER}/ptutils.c ${INCLS}
--	${CCRULE} ${srcdir}/${PTSERVER}/ptutils.c
-+	${CCRULE} @CFLAGS_NOSTRICT@ ${srcdir}/${PTSERVER}/ptutils.c
- 
- ptprocs.o: ${PTSERVER}/ptprocs.c ${INCLS}
--	${CCRULE} ${srcdir}/${PTSERVER}/ptprocs.c
-+	${CCRULE} @CFLAGS_NOSTRICT@ ${srcdir}/${PTSERVER}/ptprocs.c
- 
- utils.o: ${PTSERVER}/utils.c ${INCLS}
- 	${CCRULE} ${srcdir}/${PTSERVER}/utils.c
-diff --git a/src/ubik/recovery.c b/src/ubik/recovery.c
-index f0b09ae..b17d054 100644
---- a/src/ubik/recovery.c
-+++ b/src/ubik/recovery.c
-@@ -453,7 +453,7 @@ urecovery_Interact(void *dummy)
-     struct ubik_server *bestServer = NULL;
-     struct ubik_server *ts;
-     int dbok, doingRPC, now;
--    afs_int32 lastProbeTime, lastDBVCheck;
-+    afs_int32 lastProbeTime;
-     /* if we're the sync site, the best db version we've found yet */
-     static struct ubik_version bestDBVersion;
-     struct ubik_version tversion;
-@@ -466,14 +466,13 @@ urecovery_Interact(void *dummy)
-     char hoststr[16];
- #ifndef OLD_URECOVERY
-     char pbuffer[1028];
--    int flen, fd = -1;
-+    int fd = -1;
-     afs_int32 pass;
- #endif
- 
-     /* otherwise, begin interaction */
-     urecovery_state = 0;
-     lastProbeTime = 0;
--    lastDBVCheck = 0;
-     while (1) {
- 	/* Run through this loop every 4 seconds */
- 	tv.tv_sec = 4;
-@@ -552,7 +551,6 @@ urecovery_Interact(void *dummy)
- 		 */
- 		urecovery_state &= ~UBIK_RECHAVEDB;
- 	    }
--	    lastDBVCheck = FT_ApproxTime();
- 	    urecovery_state |= UBIK_RECFOUNDDB;
- 	    urecovery_state &= ~UBIK_RECSENTDB;
- 	}
-@@ -616,7 +614,6 @@ urecovery_Interact(void *dummy)
- 		goto FetchEndCall;
- 	    }
- #ifndef OLD_URECOVERY
--	    flen = length;
- 	    afs_snprintf(pbuffer, sizeof(pbuffer), "%s.DB%s%d.TMP", ubik_dbase->pathName, (file<0)?"SYS":"", (file<0)?-file:file);
- 	    fd = open(pbuffer, O_CREAT | O_RDWR | O_TRUNC, 0600);
- 	    if (fd < 0) {
-diff --git a/src/ubik/remote.c b/src/ubik/remote.c
-index 9fa996d..a669da2 100644
---- a/src/ubik/remote.c
-+++ b/src/ubik/remote.c
-@@ -487,7 +487,7 @@ SDISK_SendFile(struct rx_call *rxcall, afs_int32 file,
-     char hoststr[16];
- #ifndef OLD_URECOVERY
-     char pbuffer[1028];
--    int flen, fd = -1;
-+    int fd = -1;
-     afs_int32 epoch = 0;
-     afs_int32 pass;
- #endif
-@@ -537,7 +537,6 @@ SDISK_SendFile(struct rx_call *rxcall, afs_int32 file,
-     tversion.epoch = 0;		/* start off by labelling in-transit db as invalid */
-     (*dbase->setlabel) (dbase, file, &tversion);	/* setlabel does sync */
- #ifndef OLD_URECOVERY
--    flen = length;
-     afs_snprintf(pbuffer, sizeof(pbuffer), "%s.DB%s%d.TMP", ubik_dbase->pathName, (file<0)?"SYS":"", (file<0)?-file:file);
-     fd = open(pbuffer, O_CREAT | O_RDWR | O_TRUNC, 0600);
-     if (fd < 0) {
-diff --git a/src/update/server.c b/src/update/server.c
-index a7fc60f..7c44ab9 100644
---- a/src/update/server.c
-+++ b/src/update/server.c
-@@ -249,10 +249,8 @@ main(int argc, char *argv[])
- 	  usage:
- 	    Quit("Usage: upserver [<directory>+] [-crypt <directory>+] [-clear <directory>+] [-auth <directory>+] [-rxbind] [-help]\n");
- 	} else {
--	    int dirlen;
- 	    if (nDirs >= sizeof(dirName) / sizeof(dirName[0]))
- 		Quit("Too many dirs");
--	    dirlen = strlen(argv[a]);
- 	    if (AddObject(&dirName[nDirs], argv[a])) {
- 		printf("%s: Unable to export dir %s. Skipping\n", whoami,
- 		       argv[a]);
-diff --git a/src/uss/uss.c b/src/uss/uss.c
-index f551715..1163fc1 100644
---- a/src/uss/uss.c
-+++ b/src/uss/uss.c
-@@ -1792,7 +1792,6 @@ main(int argc, char *argv[])
- {				/*Main routine */
- 
-     struct cmd_syndesc *cs;	/*Command line syntax descriptor */
--    afs_int32 code;	/*Return code */
- 
- #ifdef	AFS_AIX32_ENV
-     /*
-@@ -1979,7 +1978,7 @@ main(int argc, char *argv[])
-     /*
-      * Execute the parsed command.
-      */
--    code = cmd_Dispatch(argc, argv);
-+    cmd_Dispatch(argc, argv);
- #if 0
-     if (code) {
- 	fprintf(stderr, "%s: Call to cmd_Dispatch() failed; code is %d\n",
-@@ -1988,7 +1987,7 @@ main(int argc, char *argv[])
-     }
- #endif /* 0 */
-     if (doUnlog) {
--	code = uss_fs_UnlogToken(uss_Cell);
-+	uss_fs_UnlogToken(uss_Cell);
-     }
-     return 0;
- }				/*Main routine */
-diff --git a/src/uss/uss_acl.c b/src/uss/uss_acl.c
-index 9ed9aeb..30a696e 100644
---- a/src/uss/uss_acl.c
-+++ b/src/uss/uss_acl.c
-@@ -672,7 +672,6 @@ uss_acl_SetDiskQuota(char *a_path, int a_q)
-     static char rn[] = "uss_acl_SetDiskQuota";
- #endif
-     uss_VolumeStatus_t *status;
--    char *name, *motd, *offmsg;
-     char *input;
-     char tmp_str[AFS_PIOCTL_MAXSIZE];
- 
-@@ -683,7 +682,6 @@ uss_acl_SetDiskQuota(char *a_path, int a_q)
- 
-     status = (uss_VolumeStatus_t *) tmp_str;
-     status->MinQuota = status->MaxQuota = -1;
--    name = motd = offmsg = NULL;
-     status->MaxQuota = a_q;
- 
-     input = (char *)status + sizeof(*status);
-diff --git a/src/venus/fs.c b/src/venus/fs.c
-index 31b2f56..5ffa27b 100644
---- a/src/venus/fs.c
-+++ b/src/venus/fs.c
-@@ -2367,10 +2367,8 @@ CallBackRxConnCmd(struct cmd_syndesc *as, void *arock)
-     struct cmd_item *ti;
-     afs_int32 hostAddr;
-     struct hostent *thp;
--    int setp;
- 
-     ti = as->parms[0].items;
--    setp = 1;
-     if (ti) {
-         thp = hostutil_GetHostByName(ti->data);
- 	if (!thp) {
-@@ -2380,7 +2378,6 @@ CallBackRxConnCmd(struct cmd_syndesc *as, void *arock)
- 	else memcpy(&hostAddr, thp->h_addr, sizeof(afs_int32));
-     } else {
-         hostAddr = 0;   /* means don't set host */
--	setp = 0;       /* aren't setting host */
-     }
- 
-     /* now do operation */
-@@ -2751,7 +2748,7 @@ ExportAfsCmd(struct cmd_syndesc *as, void *arock)
-     afs_int32 code;
-     struct ViceIoctl blob;
-     struct cmd_item *ti;
--    int export = 0, type = 0, mode = 0, exp = 0, exportcall, pwsync =
-+    int export = 0, type = 0, mode = 0, exportcall, pwsync =
- 	0, smounts = 0, clipags = 0, pagcb = 0;
- 
-     ti = as->parms[0].items;
-@@ -2773,7 +2770,6 @@ ExportAfsCmd(struct cmd_syndesc *as, void *arock)
- 	    fprintf(stderr, "Illegal argument %s\n", ti->data);
- 	    return 1;
- 	}
--	exp = 1;
-     }
-     if ((ti = as->parms[2].items)) {	/* -noconvert */
- 	if (strcmp(ti->data, "on") == 0)
-@@ -3305,6 +3301,7 @@ StoreBehindCmd(struct cmd_syndesc *as, void *arock)
-     afs_int32 allfiles;
-     char *t;
-     int error = 0;
-+    int async_default = -1;
- 
-     tsb.sb_thisfile = -1;
-     ti = as->parms[0].items;	/* -kbytes */
-@@ -3365,14 +3362,18 @@ StoreBehindCmd(struct cmd_syndesc *as, void *arock)
- 	    continue;
- 	}
- 
--	if (verbose && (blob.out_size == sizeof(tsb2))) {
--	    if (tsb2.sb_thisfile == -1) {
--		fprintf(stdout, "Will store %s according to default.\n",
--			ti->data);
-+	if (blob.out_size == sizeof(tsb2)) {
-+	    async_default = tsb2.sb_default;
-+
-+	    if (verbose) {
-+		if (tsb2.sb_thisfile == -1) {
-+		    fprintf(stdout, "Will store %s according to default.\n",
-+			    ti->data);
- 	    } else {
--		fprintf(stdout,
--			"Will store up to %d kbytes of %s asynchronously.\n",
--			(tsb2.sb_thisfile / 1024), ti->data);
-+		    fprintf(stdout,
-+			    "Will store up to %d kbytes of %s asynchronously.\n",
-+			    (tsb2.sb_thisfile / 1024), ti->data);
-+		}
- 	    }
- 	}
-     }
-@@ -3380,7 +3381,7 @@ StoreBehindCmd(struct cmd_syndesc *as, void *arock)
-     /* If no files - make at least one pioctl call, or
-      * set the allfiles default if we need to.
-      */
--    if (!as->parms[1].items || (allfiles != -1)) {
-+    if (async_default < 0 || (allfiles != -1)) {
- 	tsb.sb_default = allfiles;
-         memset(&tsb2, 0, sizeof(tsb2));
- 	blob.out = (char *)&tsb2;
-@@ -3389,13 +3390,16 @@ StoreBehindCmd(struct cmd_syndesc *as, void *arock)
- 	if (code) {
- 	    Die(errno, ((allfiles == -1) ? 0 : "-allfiles"));
- 	    error = 1;
-+
-+	} else if (blob.out_size == sizeof(tsb2)) {
-+	    async_default = tsb2.sb_default;
- 	}
-     }
- 
-     /* Having no arguments also reports the default store asynchrony */
--    if (!error && verbose && (blob.out_size == sizeof(tsb2))) {
-+    if (async_default >= 0 && verbose) {
- 	fprintf(stdout, "Default store asynchrony is %d kbytes.\n",
--		(tsb2.sb_default / 1024));
-+		(async_default / 1024));
-     }
- 
-     return error;
-@@ -4075,12 +4079,10 @@ FlushMountCmd(struct cmd_syndesc *as, void *arock)
-     char *last_component;	/*Last component of true name */
-     struct stat statbuff;	/*Buffer for status info */
-     int link_chars_read;	/*Num chars read in readlink() */
--    int thru_symlink;		/*Did we get to a mount point via a symlink? */
-     int error = 0;
- 
-     for (ti = as->parms[0].items; ti; ti = ti->next) {
- 	/* once per file */
--	thru_symlink = 0;
- 	sprintf(orig_name, "%s%s", (ti->data[0] == '/') ? "" : "./",
- 		ti->data);
- 
-@@ -4096,7 +4098,6 @@ FlushMountCmd(struct cmd_syndesc *as, void *arock)
- 	 * the file name with the link name.
- 	 */
- 	if ((statbuff.st_mode & S_IFMT) == S_IFLNK) {
--	    thru_symlink = 1;
- 	    /*
- 	     * Read name of resolved file.
- 	     */
-diff --git a/src/viced/afsfileprocs.c b/src/viced/afsfileprocs.c
-index 17224b9..cf0dd0b 100644
---- a/src/viced/afsfileprocs.c
-+++ b/src/viced/afsfileprocs.c
-@@ -1247,7 +1247,7 @@ RXStore_AccessList(Vnode * targetptr, struct AFSOpaque *AccessList)
- static int
- CopyOnWrite(Vnode * targetptr, Volume * volptr, afs_foff_t off, afs_fsize_t len)
- {
--    Inode ino, nearInode;
-+    Inode ino, nearInode AFS_UNUSED;
-     ssize_t rdlen;
-     ssize_t wrlen;
-     afs_fsize_t size;
-@@ -1347,7 +1347,7 @@ CopyOnWrite(Vnode * targetptr, Volume * volptr, afs_foff_t off, afs_fsize_t len)
- 		IH_RELEASE(newH);
- 		FDH_REALLYCLOSE(targFdP);
- 		rc = IH_DEC(V_linkHandle(volptr), ino, V_parentId(volptr));
--		if (!rc) {
-+		if (rc) {
- 		    ViceLog(0,
- 			    ("CopyOnWrite failed: error %u after i_dec on disk full, volume %u in partition %s needs salvage\n",
- 			     rc, V_id(volptr), volptr->partition->name));
-@@ -1824,7 +1824,7 @@ Alloc_NewVnode(Vnode * parentptr, DirHandle * dir, Volume * volptr,
-     Error errorCode = 0;		/* Error code returned back */
-     Error temp;
-     Inode inode = 0;
--    Inode nearInode;		/* hint for inode allocation in solaris */
-+    Inode nearInode AFS_UNUSED;		/* hint for inode allocation in solaris */
-     afs_ino_str_t stmp;
- 
-     if ((errorCode =
-@@ -2045,8 +2045,8 @@ RXGetVolumeStatus(AFSFetchVolumeStatus * status, char **name, char **offMsg,
-     status->MinQuota = V_minquota(volptr);
-     status->MaxQuota = V_maxquota(volptr);
-     status->BlocksInUse = V_diskused(volptr);
--    status->PartBlocksAvail = RoundInt64ToInt32(volptr->partition->free);
--    status->PartMaxBlocks = RoundInt64ToInt32(volptr->partition->totalUsable);
-+    status->PartBlocksAvail = RoundInt64ToInt31(volptr->partition->free);
-+    status->PartMaxBlocks = RoundInt64ToInt31(volptr->partition->totalUsable);
- 
-     /* now allocate and copy these things; they're freed by the RXGEN stub */
-     temp = strlen(V_name(volptr)) + 1;
-@@ -5741,8 +5741,8 @@ SetVolumeStats(struct AFSStatistics *stats)
- 
-     for (part = DiskPartitionList; part && i < AFS_MSTATDISKS;
- 	 part = part->next) {
--	stats->Disks[i].TotalBlocks = RoundInt64ToInt32(part->totalUsable);
--	stats->Disks[i].BlocksAvailable = RoundInt64ToInt32(part->free);
-+	stats->Disks[i].TotalBlocks = RoundInt64ToInt31(part->totalUsable);
-+	stats->Disks[i].BlocksAvailable = RoundInt64ToInt31(part->free);
- 	memset(stats->Disks[i].Name, 0, AFS_DISKNAMESIZE);
- 	strncpy(stats->Disks[i].Name, part->name, AFS_DISKNAMESIZE);
- 	i++;
-@@ -6019,7 +6019,7 @@ SRXAFS_XStatsVersion(struct rx_call * a_call, afs_int32 * a_versionP)
- static void
- FillPerfValues(struct afs_PerfStats *a_perfP)
- {				/*FillPerfValues */
--    afs_uint32 hi, lo;
-+    afs_uint32 hi AFS_UNUSED, lo;
-     int dir_Buffers;		/*# buffers in use by dir package */
-     int dir_Calls;		/*# read calls in dir package */
-     int dir_IOs;		/*# I/O ops in dir package */
-diff --git a/src/vlserver/vldb_check.c b/src/vlserver/vldb_check.c
-index 01645ae..64b1ca7 100644
---- a/src/vlserver/vldb_check.c
-+++ b/src/vlserver/vldb_check.c
-@@ -87,6 +87,14 @@ struct er {
- } *record;
- afs_int32 maxentries;
- int serveraddrs[MAXSERVERID + 2];
-+u_char serverxref[MAXSERVERID + 2];  /**< to resolve cross-linked mh entries */
-+int serverref[MAXSERVERID + 2];      /**< which addrs are referenced by vl entries */
-+
-+struct mhinfo {
-+    afs_uint32 addr;			/**< vldb file record */
-+    char orphan[VL_MHSRV_PERBLK];	/**< unreferenced mh enties */
-+} mhinfo[VL_MAX_ADDREXTBLKS];
-+
- 
- /*  Used to control what goes to stdout based on quiet flag */
- void
-@@ -277,7 +285,7 @@ readheader(struct vlheader *headerp)
- 	    ntohl(headerp->vital_header.totalEntries[1]);
- 
-     headerp->SIT = ntohl(headerp->SIT);
--    for (i = 0; i < MAXSERVERID; i++)
-+    for (i = 0; i <= MAXSERVERID; i++)
- 	headerp->IpMappedAddr[i] = ntohl(headerp->IpMappedAddr[i]);
-     for (i = 0; i < HASHSIZE; i++)
- 	headerp->VolnameHash[i] = ntohl(headerp->VolnameHash[i]);
-@@ -341,7 +349,7 @@ writeheader(struct vlheader *headerp)
- 	    htonl(headerp->vital_header.totalEntries[1]);
- 
-     headerp->SIT = htonl(headerp->SIT);
--    for (i = 0; i < MAXSERVERID; i++)
-+    for (i = 0; i <= MAXSERVERID; i++)
- 	headerp->IpMappedAddr[i] = htonl(headerp->IpMappedAddr[i]);
-     for (i = 0; i < HASHSIZE; i++)
- 	headerp->VolnameHash[i] = htonl(headerp->VolnameHash[i]);
-@@ -353,18 +361,20 @@ writeheader(struct vlheader *headerp)
- }
- 
- void
--readMH(afs_int32 addr, struct extentaddr *mhblockP)
-+readMH(afs_uint32 addr, int block, struct extentaddr *mhblockP)
- {
-     int i, j;
-     struct extentaddr *e;
- 
-     vldbread(addr, (char *)mhblockP, VL_ADDREXTBLK_SIZE);
- 
--    mhblockP->ex_count = ntohl(mhblockP->ex_count);
--    mhblockP->ex_flags = ntohl(mhblockP->ex_flags);
--    for (i = 0; i < VL_MAX_ADDREXTBLKS; i++)
--	mhblockP->ex_contaddrs[i] = ntohl(mhblockP->ex_contaddrs[i]);
--
-+    if (block == 0) {
-+        mhblockP->ex_count = ntohl(mhblockP->ex_count);
-+        mhblockP->ex_flags = ntohl(mhblockP->ex_flags);
-+        for (i = 0; i < VL_MAX_ADDREXTBLKS; i++) {
-+	    mhblockP->ex_contaddrs[i] = ntohl(mhblockP->ex_contaddrs[i]);
-+        }
-+    }
-     for (i = 1; i < VL_MHSRV_PERBLK; i++) {
- 	e = &(mhblockP[i]);
- 
-@@ -469,6 +479,33 @@ readentry(afs_int32 addr, struct nvlentry *vlentryp, afs_int32 *type)
- }
- 
- void
-+writeMH(afs_int32 addr, int block, struct extentaddr *mhblockP)
-+{
-+    int i, j;
-+    struct extentaddr *e;
-+
-+    if (verbose) {
-+	quiet_println("Writing back MH block % at addr %u\n", block,  addr);
-+    }
-+    if (block == 0) {
-+	mhblockP->ex_count = htonl(mhblockP->ex_count);
-+	mhblockP->ex_flags = htonl(mhblockP->ex_flags);
-+	for (i = 0; i < VL_MAX_ADDREXTBLKS; i++) {
-+	    mhblockP->ex_contaddrs[i] = htonl(mhblockP->ex_contaddrs[i]);
-+	}
-+    }
-+    for (i = 1; i < VL_MHSRV_PERBLK; i++) {
-+	e = &(mhblockP[i]);
-+	/* hostuuid was not converted */
-+	e->ex_uniquifier = htonl(e->ex_uniquifier);
-+	for (j = 0; j < VL_MAXIPADDRS_PERMH; j++) {
-+	    e->ex_addrs[j] = htonl(e->ex_addrs[j]);
-+	}
-+    }
-+    vldbwrite(addr, (char *)mhblockP, VL_ADDREXTBLK_SIZE);
-+}
-+
-+void
- writeentry(afs_int32 addr, struct nvlentry *vlentryp)
- {
-     int i;
-@@ -890,7 +927,6 @@ CheckIpAddrs(struct vlheader *header)
-     int mhblocks = 0;
-     afs_int32 i, j, m, rindex;
-     afs_int32 mhentries, regentries;
--    afs_uint32 caddrs[VL_MAX_ADDREXTBLKS];
-     char mhblock[VL_ADDREXTBLK_SIZE];
-     struct extentaddr *MHblock = (struct extentaddr *)mhblock;
-     struct extentaddr *e;
-@@ -906,7 +942,7 @@ CheckIpAddrs(struct vlheader *header)
- 	/* Read the first MH block and from it, gather the
- 	 * addresses of all the mh blocks.
- 	 */
--	readMH(header->SIT, MHblock);
-+	readMH(header->SIT, 0, MHblock);
- 	if (MHblock->ex_flags != VLCONTBLOCK) {
- 	   log_error
- 		(VLDB_CHECK_ERROR,"Multihomed Block 0: Bad entry at %u: Not a valid multihomed block\n",
-@@ -914,32 +950,32 @@ CheckIpAddrs(struct vlheader *header)
- 	}
- 
- 	for (i = 0; i < VL_MAX_ADDREXTBLKS; i++) {
--	    caddrs[i] = MHblock->ex_contaddrs[i];
-+	    mhinfo[i].addr = MHblock->ex_contaddrs[i];
- 	}
- 
--	if (header->SIT != caddrs[0]) {
-+	if (header->SIT != mhinfo[0].addr) {
- 	   log_error
- 		(VLDB_CHECK_ERROR,"MH block does not point to self %u in header, %u in block\n",
--		 header->SIT, caddrs[0]);
-+		 header->SIT, mhinfo[0].addr);
- 	}
- 
- 	/* Now read each MH block and record it in the record array */
- 	for (i = 0; i < VL_MAX_ADDREXTBLKS; i++) {
--	    if (!caddrs[i])
-+	    if (!mhinfo[i].addr)
- 		continue;
- 
--	    readMH(caddrs[i], MHblock);
-+	    readMH(mhinfo[i].addr, i, MHblock);
- 	    if (MHblock->ex_flags != VLCONTBLOCK) {
- 	        log_error
- 		    (VLDB_CHECK_ERROR,"Multihomed Block 0: Bad entry at %u: Not a valid multihomed block\n",
- 		     header->SIT);
- 	    }
- 
--	    rindex = caddrs[i] / sizeof(vlentry);
--	    if (record[rindex].addr != caddrs[i] && record[rindex].addr) {
-+	    rindex = mhinfo[i].addr / sizeof(vlentry);
-+	    if (record[rindex].addr != mhinfo[i].addr && record[rindex].addr) {
- 	        log_error
- 		    (VLDB_CHECK_ERROR,"INTERNAL VLDB_CHECK_ERROR: addresses %u and %u use same record slot %d\n",
--		     record[rindex].addr, caddrs[i], rindex);
-+		     record[rindex].addr, mhinfo[i].addr, rindex);
- 	    }
- 	    if (record[rindex].type & FRC) {
- 	        log_error
-@@ -957,23 +993,24 @@ CheckIpAddrs(struct vlheader *header)
- 	     */
- 	    mhentries = 0;
- 	    for (j = 1; j < VL_MHSRV_PERBLK; j++) {
-+		int first_ipindex = -1;
- 		e = (struct extentaddr *)&(MHblock[j]);
- 
--		/* Search the IpMappedAddr array for the reference to this entry */
--		for (ipindex = 0; ipindex < MAXSERVERID; ipindex++) {
--		    if (((header->IpMappedAddr[ipindex] & 0xff000000) ==
--			 0xff000000)
--			&&
--			(((header->
--			   IpMappedAddr[ipindex] & 0x00ff0000) >> 16) == i)
--			&& ((header->IpMappedAddr[ipindex] & 0x0000ffff) ==
--			    j)) {
--			break;
-+		/* Search the IpMappedAddr array for all the references to this entry. */
-+		/* Use the first reference for checking the ip addresses of this entry. */
-+		for (ipindex = 0; ipindex <= MAXSERVERID; ipindex++) {
-+		    if (((header->IpMappedAddr[ipindex] & 0xff000000) == 0xff000000)
-+			&& (((header-> IpMappedAddr[ipindex] & 0x00ff0000) >> 16) == i)
-+			&& ((header->IpMappedAddr[ipindex] & 0x0000ffff) == j)) {
-+			if (first_ipindex == -1) {
-+			    first_ipindex = ipindex;
-+			} else {
-+			    serverxref[ipindex] = first_ipindex;
-+			}
- 		    }
- 		}
--		if (ipindex >= MAXSERVERID)
--		    ipindex = -1;
--		else
-+		ipindex = first_ipindex;
-+		if (ipindex != -1)
- 		    serveraddrs[ipindex] = -1;
- 
- 		if (memcmp(&e->ex_hostuuid, &nulluuid, sizeof(afsUUID)) == 0) {
-@@ -997,6 +1034,7 @@ CheckIpAddrs(struct vlheader *header)
- 		if (ipaddrs) {
- 		    mhentries++;
- 		    if (ipindex == -1) {
-+		        mhinfo[i].orphan[j] = 1;
- 		        log_error
- 			    (VLDB_CHECK_ERROR,"MH block %d, index %d: Not referenced by server addrs\n",
- 			     i, j);
-@@ -1043,6 +1081,9 @@ CheckIpAddrs(struct vlheader *header)
- 		   log_error
- 			(VLDB_CHECK_ERROR,"IP Addr for entry %d: Multihome block is bad (%d)\n",
- 			 i, ((header->IpMappedAddr[i] & 0x00ff0000) >> 16));
-+		if (mhinfo[(header->IpMappedAddr[i] & 0x00ff0000) >> 16].addr == 0)
-+		    log_error(VLDB_CHECK_ERROR,"IP Addr for entry %d: No such multihome block (%d)\n",
-+			 i, ((header->IpMappedAddr[i] & 0x00ff0000) >> 16));
- 		if (((header->IpMappedAddr[i] & 0x0000ffff) > VL_MHSRV_PERBLK)
- 		    || ((header->IpMappedAddr[i] & 0x0000ffff) < 1))
- 		    log_error
-@@ -1054,6 +1095,17 @@ CheckIpAddrs(struct vlheader *header)
- 			 i);
- 		    serveraddrs[i] = 0;
- 		}
-+		if (serverxref[i] != BADSERVERID) {
-+		    log_error
-+			(VLDB_CHECK_WARNING,
-+			"warning: MH block %d, index %d is cross-linked by server numbers %d and %d.\n",
-+			(header->IpMappedAddr[i] & 0x00ff0000) >> 16,
-+			(header->IpMappedAddr[i] & 0x0000ffff),
-+			i, serverxref[i]);
-+		    /* set addresses found/not found for this server number,
-+		     * using the first index to the mh we found above. */
-+		    serveraddrs[i] = serveraddrs[serverxref[i]];
-+		}
- 		if (listservers) {
- 		    quiet_println("   Server ip addr %d = MH block %d, index %d\n",
- 			   i, (header->IpMappedAddr[i] & 0x00ff0000) >> 16,
-@@ -1147,6 +1199,47 @@ reportHashChanges(struct vlheader *header, afs_uint32 oldnamehash[HASHSIZE], afs
-     }
- }
- 
-+/**
-+ * Remove unreferenced, duplicate multi-home address indices.
-+ *
-+ * Removes entries from IpMappedAddr which where found to be
-+ * duplicates. Only entries which are not referenced by vl entries
-+ * are removed on this pass.
-+ *
-+ * @param[inout] header the vldb header to be updated.
-+ */
-+void
-+removeCrossLinkedAddresses(struct vlheader *header)
-+{
-+    int i;
-+
-+    for (i = 0; i <= MAXSERVERID; i++) {
-+	if (serverref[i] == 0
-+	    && (header->IpMappedAddr[i] & 0xff000000) == 0xff000000
-+	    && serverxref[i] != BADSERVERID) {
-+	    if (serverxref[i] == i) {
-+		log_error(VLDB_CHECK_ERROR,
-+			  "INTERNAL VLDB_CHECK_ERROR: serverxref points to self; index %d\n",
-+			  i);
-+	    } else if (header->IpMappedAddr[serverxref[i]] == 0) {
-+		log_error(VLDB_CHECK_ERROR,
-+			  "INTERNAL VLDB_CHECK_ERROR: serverxref points to empty addr; index %d, value %d\n",
-+			  i, serverxref[i]);
-+	    } else if (header->IpMappedAddr[serverxref[i]] != header->IpMappedAddr[i]) {
-+		log_error(VLDB_CHECK_ERROR,
-+			  "INTERNAL VLDB_CHECK_ERROR: invalid serverxref; index %d, value %d\n",
-+			  i, serverxref[i]);
-+	    } else {
-+		quiet_println
-+		    ("FIX: Removing unreferenced address index %d, which cross-links MH block %d, index %d\n",
-+		     i, (header->IpMappedAddr[i] & 0x00ff0000) >> 16,
-+		     (header->IpMappedAddr[i] & 0x0000ffff));
-+		header->IpMappedAddr[i] = 0;
-+	    }
-+	}
-+    }
-+}
-+
- int
- WorkerBee(struct cmd_syndesc *as, void *arock)
- {
-@@ -1154,7 +1247,7 @@ WorkerBee(struct cmd_syndesc *as, void *arock)
-     afs_int32 type;
-     struct vlheader header;
-     struct nvlentry vlentry, vlentry2;
--    int i, j;
-+    int i, j, k;
-     afs_uint32 oldnamehash[HASHSIZE];
-     afs_uint32 oldidhash[MAXTYPES][HASHSIZE];
- 
-@@ -1195,6 +1288,11 @@ WorkerBee(struct cmd_syndesc *as, void *arock)
-     record = (struct er *)malloc(maxentries * sizeof(struct er));
-     memset(record, 0, (maxentries * sizeof(struct er)));
-     memset(serveraddrs, 0, sizeof(serveraddrs));
-+    memset(mhinfo, 0, sizeof(mhinfo));
-+    memset(serverref, 0, sizeof(serverref));
-+    for (i = 0; i <= MAXSERVERID; i++) {
-+	serverxref[i] = BADSERVERID;
-+    }
- 
-     /* Will fill in the record array of entries it found */
-     ReadAllEntries(&header);
-@@ -1337,11 +1435,17 @@ WorkerBee(struct cmd_syndesc *as, void *arock)
- 	    }
- 
- 	    for (j = 0; j < NMAXNSERVERS; j++) {
--		if ((vlentry.serverNumber[j] != 255)
--		    && (serveraddrs[vlentry.serverNumber[j]] == 0)) {
--		   log_error
--			(VLDB_CHECK_ERROR,"Volume '%s', index %d points to empty server entry %d\n",
--			 vlentry.name, j, vlentry.serverNumber[j]);
-+		if (vlentry.serverNumber[j] != BADSERVERID) {
-+		    serverref[vlentry.serverNumber[j]] = 1;
-+		    if (serveraddrs[vlentry.serverNumber[j]] == 0) {
-+			log_error
-+			    (VLDB_CHECK_ERROR,"Volume '%s', index %d points to empty server entry %d\n",
-+			     vlentry.name, j, vlentry.serverNumber[j]);
-+		    } else if (serverxref[vlentry.serverNumber[j]] != BADSERVERID) {
-+			    log_error
-+			    (VLDB_CHECK_ERROR,"Volume '%s', index %d points to server entry %d, which is cross-linked by %d\n",
-+			     vlentry.name, j, vlentry.serverNumber[j], serverxref[vlentry.serverNumber[j]]);
-+		    }
- 		}
- 	    }
- 
-@@ -1462,15 +1566,70 @@ WorkerBee(struct cmd_syndesc *as, void *arock)
- 			}
- 		    }
- 
-+		    /* Consolidate server numbers which point to the same mh entry.
-+		     * The serverref flags are not reset here, since we want to make
-+		     * sure the data is actually written before the server number is
-+		     * considered unreferenced. */
-+		    for (k = 0; k < NMAXNSERVERS; k++) {
-+			if (vlentry.serverNumber[k] != BADSERVERID
-+			    && serverxref[vlentry.serverNumber[k]] != BADSERVERID) {
-+			    u_char oldsn = vlentry.serverNumber[k];
-+			    u_char newsn = serverxref[oldsn];
-+			    if (newsn == oldsn) {
-+				log_error(VLDB_CHECK_ERROR,
-+					  "INTERNAL VLDB_CHECK_ERROR: serverxref points to self; index %d\n",
-+					  oldsn);
-+			    } else if (header.IpMappedAddr[oldsn] == 0) {
-+				log_error(VLDB_CHECK_ERROR,
-+					  "INTERNAL VLDB_CHECK_ERROR: serverxref; points to empty address; index %d, value %d\n",
-+					  oldsn, newsn);
-+			    } else if (header.IpMappedAddr[newsn] != header.IpMappedAddr[oldsn]) {
-+				log_error(VLDB_CHECK_ERROR,
-+					  "INTERNAL VLDB_CHECK_ERROR: invalid serverxref; index %d\n",
-+					  oldsn);
-+			    } else {
-+				quiet_println
-+				    ("FIX: Volume '%s', index %d, server number was %d, is now %d\n",
-+				     vlentry.name, k, oldsn, newsn);
-+				vlentry.serverNumber[k] = newsn;
-+			    }
-+			}
-+		    }
-+
- 		    vlentry.nextIdHash[j] = header.VolidHash[j][hash];
- 		    header.VolidHash[j][hash] = record[i].addr;
- 		}
- 		writeentry(record[i].addr, &vlentry);
- 	    }
- 	}
-+	else if (record[i].type & MH) {
-+	    int block, index;
-+	    char mhblock[VL_ADDREXTBLK_SIZE];
-+	    struct extentaddr *MHblock = (struct extentaddr *)mhblock;
-+
-+	    if (fix) {
-+		for (block = 0; block < VL_MAX_ADDREXTBLKS; block++) {
-+		    if (mhinfo[block].addr == record[i].addr)
-+			break;
-+		}
-+		if (block == VL_MAX_ADDREXTBLKS) {
-+		    continue;  /* skip orphaned extent block */
-+		}
-+		readMH(record[i].addr, block, MHblock);
-+		for (index = 0; index < VL_MHSRV_PERBLK; index++) {
-+		    if (mhinfo[block].orphan[index]) {
-+			quiet_println("FIX: Removing unreferenced mh entry; block %d, index %d\n",
-+				block, index);
-+			memset(&(MHblock[index]), 0, sizeof(struct extentaddr));
-+		    }
-+		}
-+		writeMH(record[i].addr, block, MHblock);
-+	    }
-+	}
-     }
-     if (fix) {
- 	reportHashChanges(&header, oldnamehash, oldidhash);
-+	removeCrossLinkedAddresses(&header);
- 	writeheader(&header);
-     }
- 
-diff --git a/src/vlserver/vlprocs.c b/src/vlserver/vlprocs.c
-index 9053fcd..3a53a25 100644
---- a/src/vlserver/vlprocs.c
-+++ b/src/vlserver/vlprocs.c
-@@ -2011,7 +2011,16 @@ SVL_GetAddrs(struct rx_call *rxcall,
-     return (ubik_EndTrans(trans));
- }
- 
--#define PADDR(addr) VLog(0,("%d.%d.%d.%d", (addr>>24)&0xff, (addr>>16)&0xff, (addr>>8) &0xff, addr&0xff));
-+static_inline void
-+append_addr(char *buffer, afs_uint32 addr, size_t buffer_size)
-+{
-+    int n = strlen(buffer);
-+    if (buffer_size > n) {
-+	snprintf(buffer + n, buffer_size - n, "%u.%u.%u.%u",
-+		 (addr >> 24) & 0xff, (addr >> 16) & 0xff, (addr >> 8) & 0xff,
-+		 addr & 0xff);
-+    }
-+}
- 
- afs_int32
- SVL_RegisterAddrs(struct rx_call *rxcall, afsUUID *uuidp, afs_int32 spare1,
-@@ -2021,6 +2030,7 @@ SVL_RegisterAddrs(struct rx_call *rxcall, afsUUID *uuidp, afs_int32 spare1,
-     struct ubik_trans *trans;
-     int cnt, h, i, j, k, m, base, index;
-     struct extentaddr *exp = 0, *tex;
-+    char addrbuf[256];
-     afsUUID tuuid;
-     afs_uint32 addrs[VL_MAXIPADDRS_PERMH];
-     afs_int32 fbase;
-@@ -2144,29 +2154,27 @@ SVL_RegisterAddrs(struct rx_call *rxcall, afsUUID *uuidp, afs_int32 spare1,
- 	|| (!foundUuidEntry && (count > 1))) {
- 	VLog(0,
- 	     ("The following fileserver is being registered in the VLDB:\n"));
--	VLog(0, ("      ["));
--	for (k = 0; k < cnt; k++) {
-+	for (addrbuf[0] = '\0', k = 0; k < cnt; k++) {
- 	    if (k > 0)
--		VLog(0,(" "));
--	    PADDR(addrs[k]);
-+		strlcat(addrbuf, " ", sizeof(addrbuf));
-+	    append_addr(addrbuf, addrs[k], sizeof(addrbuf));
- 	}
--	VLog(0,("]\n"));
-+	VLog(0, ("      [%s]\n", addrbuf));
- 
- 	if (foundUuidEntry) {
- 	    VLog(0,
- 		 ("   It would have replaced the existing VLDB server entry:\n"));
--	    VLog(0, ("      entry %d: [", FoundUuid));
- 	    base = (HostAddress[FoundUuid] >> 16) & 0xff;
- 	    index = HostAddress[FoundUuid] & 0x0000ffff;
- 	    exp = &ex_addr[base][index];
--	    for (mhidx = 0; mhidx < VL_MAXIPADDRS_PERMH; mhidx++) {
-+	    for (addrbuf[0] = '\0', mhidx = 0; mhidx < VL_MAXIPADDRS_PERMH; mhidx++) {
- 		if (!exp->ex_addrs[mhidx])
- 		    continue;
- 		if (mhidx > 0)
--		    VLog(0,(" "));
--		PADDR(ntohl(exp->ex_addrs[mhidx]));
-+		    strlcat(addrbuf, " ", sizeof(addrbuf));
-+		append_addr(addrbuf, ntohl(exp->ex_addrs[mhidx]), sizeof(addrbuf));
- 	    }
--	    VLog(0, ("]\n"));
-+	    VLog(0, ("      entry %d: [%s]\n", FoundUuid, addrbuf));
- 	}
- 
- 	if (count == 1)
-@@ -2175,9 +2183,9 @@ SVL_RegisterAddrs(struct rx_call *rxcall, afsUUID *uuidp, afs_int32 spare1,
- 	    VLog(0, ("   Yet other VLDB server entries exist:\n"));
- 	for (j = 0; j < count; j++) {
- 	    srvidx = WillChange[j];
--	    VLog(0, ("      entry %d: ", srvidx));
-+	    addrbuf[0] = '\0';
- 	    if ((HostAddress[srvidx] & 0xff000000) == 0xff000000) {
--		VLog(0, ("["));
-+		strlcat(addrbuf, "[", sizeof(addrbuf));
- 		base = (HostAddress[srvidx] >> 16) & 0xff;
- 		index = HostAddress[srvidx] & 0x0000ffff;
- 		exp = &ex_addr[base][index];
-@@ -2185,14 +2193,14 @@ SVL_RegisterAddrs(struct rx_call *rxcall, afsUUID *uuidp, afs_int32 spare1,
- 		    if (!exp->ex_addrs[mhidx])
- 			continue;
- 		    if (mhidx > 0)
--			VLog(0, (" "));
--		    PADDR(ntohl(exp->ex_addrs[mhidx]));
-+			strlcat(addrbuf, " ", sizeof(addrbuf));
-+		    append_addr(addrbuf, ntohl(exp->ex_addrs[mhidx]), sizeof(addrbuf));
- 		}
--		VLog(0, ("]"));
-+		strlcat(addrbuf, "]", sizeof(addrbuf));
- 	    } else {
--		PADDR(HostAddress[srvidx]);
-+		append_addr(addrbuf, HostAddress[srvidx], sizeof(addrbuf));
- 	    }
--	    VLog(0, ("\n"));
-+	    VLog(0, ("      entry %d: %s\n", srvidx, addrbuf));
- 	}
- 
- 	if (count == 1)
-@@ -2235,26 +2243,24 @@ SVL_RegisterAddrs(struct rx_call *rxcall, afsUUID *uuidp, afs_int32 spare1,
-     }
- 
-     VLog(0, ("The following fileserver is being registered in the VLDB:\n"));
--    VLog(0, ("      ["));
--    for (k = 0; k < cnt; k++) {
-+    for (addrbuf[0] = '\0', k = 0; k < cnt; k++) {
- 	if (k > 0)
--	    VLog(0, (" "));
--	PADDR(addrs[k]);
-+	    strlcat(addrbuf, " ", sizeof(addrbuf));
-+	append_addr(addrbuf, addrs[k], sizeof(addrbuf));
-     }
--    VLog(0, ("]\n"));
-+    VLog(0, ("      [%s]\n", addrbuf));
- 
-     if (foundUuidEntry) {
- 	VLog(0,
- 	    ("   It will replace the following existing entry in the VLDB (same uuid):\n"));
--	VLog(0, ("      entry %d: [", FoundUuid));
--	for (k = 0; k < VL_MAXIPADDRS_PERMH; k++) {
-+	for (addrbuf[0] = '\0', k = 0; k < VL_MAXIPADDRS_PERMH; k++) {
- 	    if (exp->ex_addrs[k] == 0)
- 		continue;
- 	    if (k > 0)
--		VLog(0, (" "));
--	    PADDR(ntohl(exp->ex_addrs[k]));
-+		strlcat(addrbuf, " ", sizeof(addrbuf));
-+	    append_addr(addrbuf, ntohl(exp->ex_addrs[k]), sizeof(addrbuf));
- 	}
--	VLog(0, ("]\n"));
-+	VLog(0, ("      entry %d: [%s]\n", FoundUuid, addrbuf));
-     } else if (willReplaceCnt || (count == 1)) {
- 	/* If we are not replacing an entry and there is only one entry to change,
- 	 * then we will replace that entry.
-@@ -2272,22 +2278,21 @@ SVL_RegisterAddrs(struct rx_call *rxcall, afsUUID *uuidp, afs_int32 spare1,
- 
- 	    VLog(0,
- 		("   It will replace the following existing entry in the VLDB (new uuid):\n"));
--	    VLog(0, ("      entry %d: [", ReplaceEntry));
--	    for (k = 0; k < VL_MAXIPADDRS_PERMH; k++) {
-+	    for (addrbuf[0] = '\0', k = 0; k < VL_MAXIPADDRS_PERMH; k++) {
- 		if (exp->ex_addrs[k] == 0)
- 		    continue;
- 		if (k > 0)
--		    VLog(0, (" "));
--		PADDR(ntohl(exp->ex_addrs[k]));
-+		    strlcat(addrbuf, " ", sizeof(addrbuf));
-+		append_addr(addrbuf, ntohl(exp->ex_addrs[k]), sizeof(addrbuf));
- 	    }
--	    VLog(0, ("]\n"));
-+	    VLog(0, ("      entry %d: [%s]", ReplaceEntry, addrbuf));
- 	} else {
- 	    /* Not a mh entry. So we have to create a new mh entry and
- 	     * put it on the ReplaceEntry slot of the HostAddress array.
- 	     */
--	    VLog(0, ("   It will replace existing entry %d, ", ReplaceEntry));
--	    PADDR(HostAddress[ReplaceEntry]);
--	    VLog(0,(", in the VLDB (new uuid):\n"));
-+	    addrbuf[0] = '\0';
-+	    append_addr(addrbuf, HostAddress[ReplaceEntry], sizeof(addrbuf));
-+	    VLog(0, ("   It will replace existing entry %d, [%s], in the VLDB (new uuid):\n", ReplaceEntry, addrbuf));
- 
- 	    code =
- 		FindExtentBlock(trans, uuidp, 1, ReplaceEntry, &exp, &fbase);
-@@ -2351,12 +2356,11 @@ SVL_RegisterAddrs(struct rx_call *rxcall, afsUUID *uuidp, afs_int32 spare1,
- 	    VLog(0,
- 		("   The following existing entries in the VLDB will be updated:\n"));
- 
--	VLog(0, ("      entry %d: [", WillChange[i]));
--	for (h = j = 0; j < VL_MAXIPADDRS_PERMH; j++) {
-+	for (addrbuf[0] = '\0', h = j = 0; j < VL_MAXIPADDRS_PERMH; j++) {
- 	    if (tex->ex_addrs[j]) {
- 		if (j > 0)
--		    printf(" ");
--		PADDR(ntohl(tex->ex_addrs[j]));
-+		    strlcat(addrbuf, " ", sizeof(addrbuf));
-+		append_addr(addrbuf, ntohl(tex->ex_addrs[j]), sizeof(addrbuf));
- 	    }
- 
- 	    for (k = 0; k < cnt; k++) {
-@@ -2372,7 +2376,7 @@ SVL_RegisterAddrs(struct rx_call *rxcall, afsUUID *uuidp, afs_int32 spare1,
- 	for (j = h; j < VL_MAXIPADDRS_PERMH; j++) {
- 	    tex->ex_addrs[j] = 0;	/* zero rest of mh entry */
- 	}
--	VLog(0, ("]\n"));
-+	VLog(0, ("      entry %d: [%s]\n", WillChange[i], addrbuf));
- 
- 	/* Write out the modified mh entry */
- 	tex->ex_uniquifier = htonl(ntohl(tex->ex_uniquifier) + 1);
-@@ -3213,6 +3217,8 @@ ChangeIPAddr(afs_uint32 ipaddr1, afs_uint32 ipaddr2, struct ubik_trans *atrans)
-     int pollcount = 0;
-     struct nvlentry tentry;
-     int ipaddr1_id = -1, ipaddr2_id = -1;
-+    char addrbuf1[256];
-+    char addrbuf2[256];
- 
-     if (!atrans)
- 	return VL_CREATEFAIL;
-@@ -3312,25 +3318,22 @@ ChangeIPAddr(afs_uint32 ipaddr1, afs_uint32 ipaddr2, struct ubik_trans *atrans)
-     VLog(0,
- 	 ("The following IP address is being %s:\n",
- 	  (ipaddr2 ? "changed" : "removed")));
--    VLog(0, ("      entry %d: ", i));
-+    addrbuf1[0] = addrbuf2[0] = '\0';
-     if (exp) {
--	VLog(0, ("["));
- 	for (mhidx = 0; mhidx < VL_MAXIPADDRS_PERMH; mhidx++) {
- 	    if (!exp->ex_addrs[mhidx])
- 		continue;
- 	    if (mhidx > 0)
--		VLog(0, (" "));
--	    PADDR(ntohl(exp->ex_addrs[mhidx]));
-+		strlcat(addrbuf1, " ", sizeof(addrbuf1));
-+	    append_addr(addrbuf1, ntohl(exp->ex_addrs[mhidx]), sizeof(addrbuf1));
- 	}
--	VLog(0, ("]"));
-     } else {
--	PADDR(ipaddr1);
-+	append_addr(addrbuf1, ipaddr1, sizeof(addrbuf1));
-     }
-     if (ipaddr2) {
--	VLog(0, (" -> "));
--	PADDR(ipaddr2);
-+	append_addr(addrbuf2, ipaddr2, sizeof(addrbuf2));
-     }
--    VLog(0, ("\n"));
-+    VLog(0, ("      entry %d: [%s] -> [%s]\n", i, addrbuf1, addrbuf2));
- 
-     /* Change the registered uuuid addresses */
-     if (exp) {
-diff --git a/src/vlserver/vlserver.c b/src/vlserver/vlserver.c
-index ef51860..1eeae56 100644
---- a/src/vlserver/vlserver.c
-+++ b/src/vlserver/vlserver.c
-@@ -279,16 +279,16 @@ main(int argc, char **argv)
- 
-     tdir = afsconf_Open(AFSDIR_SERVER_ETC_DIRPATH);
-     if (!tdir) {
--	printf
-+	VLog(0,
- 	    ("vlserver: can't open configuration files in dir %s, giving up.\n",
--	     AFSDIR_SERVER_ETC_DIRPATH);
-+	     AFSDIR_SERVER_ETC_DIRPATH));
- 	exit(1);
-     }
- #ifdef AFS_NT40_ENV
-     /* initialize winsock */
-     if (afs_winsockInit() < 0) {
- 	ReportErrorEventAlt(AFSEVT_SVR_WINSOCK_INIT_FAILED, 0, argv[0], 0);
--	fprintf(stderr, "vlserver: couldn't initialize winsock. \n");
-+	VLog(0, ("vlserver: couldn't initialize winsock.\n"));
- 	exit(1);
-     }
- #endif
-@@ -296,8 +296,8 @@ main(int argc, char **argv)
-     gethostname(hostname, sizeof(hostname));
-     th = gethostbyname(hostname);
-     if (!th) {
--	printf("vlserver: couldn't get address of this host (%s).\n",
--	       hostname);
-+	VLog(0, ("vlserver: couldn't get address of this host (%s).\n",
-+	       hostname));
- 	exit(1);
-     }
-     memcpy(&myHost, th->h_addr, sizeof(afs_uint32));
-@@ -310,7 +310,7 @@ main(int argc, char **argv)
- 	afsconf_GetExtendedCellInfo(tdir, NULL, AFSCONF_VLDBSERVICE, &info,
- 				    clones);
-     if (code) {
--	printf("vlserver: Couldn't get cell server list for 'afsvldb'.\n");
-+	VLog(0, ("vlserver: Couldn't get cell server list for 'afsvldb'.\n"));
- 	exit(2);
-     }
- 
-@@ -392,7 +392,7 @@ main(int argc, char **argv)
- 			  securityClasses, numClasses,
- 			  RXSTATS_ExecuteRequest);
-     if (tservice == (struct rx_service *)0) {
--	printf("vlserver: Could not create rpc stats rx service\n");
-+	VLog(0, ("vlserver: Could not create rpc stats rx service\n"));
- 	exit(3);
-     }
-     rx_SetMinProcs(tservice, 2);
-diff --git a/src/vlserver/vlutils.c b/src/vlserver/vlutils.c
-index 18c051d..4ab2478 100644
---- a/src/vlserver/vlutils.c
-+++ b/src/vlserver/vlutils.c
-@@ -329,7 +329,7 @@ UpdateCache(struct ubik_trans *trans, void *rock)
-     /* now, if can't read, or header is wrong, write a new header */
-     if (ubcode || vldbversion == 0) {
- 	if (builddb) {
--	    printf("Can't read VLDB header, re-initialising...\n");
-+	    VLog(0, ("Can't read VLDB header, re-initialising...\n"));
- 
- 	    /* try to write a good header */
- 	    memset(&cheader, 0, sizeof(cheader));
-@@ -344,7 +344,7 @@ UpdateCache(struct ubik_trans *trans, void *rock)
- 	    }
- 	    code = vlwrite(trans, 0, (char *)&cheader, sizeof(cheader));
- 	    if (code) {
--		printf("Can't write VLDB header (error = %d)\n", code);
-+		VLog(0, ("Can't write VLDB header (error = %d)\n", code));
- 		ERROR_EXIT(VL_IO);
- 	    }
- 	    vldbversion = ntohl(cheader.vital_header.vldbversion);
-@@ -355,9 +355,9 @@ UpdateCache(struct ubik_trans *trans, void *rock)
- 
-     if ((vldbversion != VLDBVERSION) && (vldbversion != OVLDBVERSION)
-         && (vldbversion != VLDBVERSION_4)) {
--	printf
-+	VLog(0,
- 	    ("VLDB version %d doesn't match this software version(%d, %d or %d), quitting!\n",
--	     vldbversion, VLDBVERSION_4, VLDBVERSION, OVLDBVERSION);
-+	     vldbversion, VLDBVERSION_4, VLDBVERSION, OVLDBVERSION));
- 	return VL_BADVERSION;
-     }
- 
-diff --git a/src/vol/fssync-server.c b/src/vol/fssync-server.c
-index a9ba378..8678fd5 100644
---- a/src/vol/fssync-server.c
-+++ b/src/vol/fssync-server.c
-@@ -332,14 +332,16 @@ FSYNC_sync(void * args)
- 	    CallHandler(FSYNC_readfds, nfds, POLLIN|POLLPRI);
- #else
- 	int maxfd;
-+#ifdef AFS_PTHREAD_ENV
- 	struct timeval s_timeout;
-+#endif
- 	GetHandler(&FSYNC_readfds, &maxfd);
--	s_timeout.tv_sec = SYNC_SELECT_TIMEOUT;
--	s_timeout.tv_usec = 0;
- 	/* Note: check for >= 1 below is essential since IOMGR_select
- 	 * doesn't have exactly same semantics as select.
- 	 */
- #ifdef AFS_PTHREAD_ENV
-+	s_timeout.tv_sec = SYNC_SELECT_TIMEOUT;
-+	s_timeout.tv_usec = 0;
- 	if (select(maxfd + 1, &FSYNC_readfds, NULL, NULL, &s_timeout) >= 1)
- #else /* AFS_PTHREAD_ENV */
- 	if (IOMGR_Select(maxfd + 1, &FSYNC_readfds, NULL, NULL, NULL) >= 1)
-diff --git a/src/vol/namei_ops.c b/src/vol/namei_ops.c
-index 89d740b..254e9a0 100644
---- a/src/vol/namei_ops.c
-+++ b/src/vol/namei_ops.c
-@@ -2840,6 +2840,8 @@ namei_ConvertROtoRWvolume(char *pname, afs_uint32 volumeId)
-     struct DiskPartition64 *partP;
-     struct ViceInodeInfo info;
-     struct VolumeDiskHeader h;
-+    char *rwpart, *rwname;
-+    Error ec;
- # ifdef AFS_DEMAND_ATTACH_FS
-     int locktype = 0;
- # endif /* AFS_DEMAND_ATTACH_FS */
-@@ -2869,6 +2871,19 @@ namei_ConvertROtoRWvolume(char *pname, afs_uint32 volumeId)
- 	goto done;
-     }
- 
-+    /* check for existing RW on any partition on this server; */
-+    /* if found, return EXDEV - invalid cross-device link */
-+    VOL_LOCK;
-+    VGetVolumePath(&ec, h.parent, &rwpart, &rwname);
-+    if (ec == 0) {
-+	Log("1 namei_ConvertROtoRWvolume: RW volume %lu already exists on server partition %s.\n",
-+	    afs_printable_uint32_lu(h.parent), rwpart);
-+	code = EXDEV;
-+	VOL_UNLOCK;
-+	goto done;
-+    }
-+    VOL_UNLOCK;
-+
-     FSYNC_VolOp(volumeId, pname, FSYNC_VOL_BREAKCBKS, 0, NULL);
- 
-     ino = namei_MakeSpecIno(h.parent, VI_LINKTABLE);
-diff --git a/src/vol/vol-salvage.c b/src/vol/vol-salvage.c
-index e21630c..21b4198 100644
---- a/src/vol/vol-salvage.c
-+++ b/src/vol/vol-salvage.c
-@@ -2580,7 +2580,6 @@ SalvageIndex(struct SalvInfo *salvinfo, Inode ino, VnodeClass class, int RW,
- 	     struct ViceInodeInfo *ip, int nInodes,
-              struct VolumeSummary *volSummary, int check)
- {
--    VolumeId volumeNumber;
-     char buf[SIZEOF_LARGEDISKVNODE];
-     struct VnodeDiskObject *vnode = (struct VnodeDiskObject *)buf;
-     int err = 0;
-@@ -2594,7 +2593,6 @@ SalvageIndex(struct SalvInfo *salvinfo, Inode ino, VnodeClass class, int RW,
-     IHandle_t *handle;
-     FdHandle_t *fdP;
- 
--    volumeNumber = volSummary->header.id;
-     IH_INIT(handle, salvinfo->fileSysDevice, volSummary->header.parent, ino);
-     fdP = IH_OPEN(handle);
-     osi_Assert(fdP != NULL);
-@@ -3685,7 +3683,7 @@ CreateRootDir(struct SalvInfo *salvinfo, VolumeDiskData *volHeader,
-     Inode *ip;
-     afs_sfsize_t bytes;
-     struct VnodeEssence *vep;
--    Inode readmeinode;
-+    Inode readmeinode = 0;
-     time_t now = time(NULL);
- 
-     if (!salvinfo->vnodeInfo[vLarge].vnodes && !salvinfo->vnodeInfo[vSmall].vnodes) {
-diff --git a/src/vol/volume.c b/src/vol/volume.c
-index c6fa1e8..e11e6c4 100644
---- a/src/vol/volume.c
-+++ b/src/vol/volume.c
-@@ -3005,6 +3005,9 @@ attach_volume_header(Error *ec, Volume *vp, struct DiskPartition64 *partp,
-     }
- 
-     if (*ec) {
-+	VOL_LOCK;
-+	FreeVolumeHeader(vp);
-+	VOL_UNLOCK;
- 	return;
-     }
-     if (retry) {
-@@ -3136,11 +3139,11 @@ attach2(Error * ec, VolId volumeId, char *path, struct DiskPartition64 *partp,
-     /* have we read in the header successfully? */
-     int read_header = 0;
- 
-+#ifdef AFS_DEMAND_ATTACH_FS
-     /* should we FreeVolume(vp) instead of VCheckFree(vp) in the error
-      * cleanup? */
-     int forcefree = 0;
- 
--#ifdef AFS_DEMAND_ATTACH_FS
-     /* in the case of an error, to what state should the volume be
-      * transitioned? */
-     VolState error_state = VOL_STATE_ERROR;
-@@ -3327,10 +3330,10 @@ attach2(Error * ec, VolId volumeId, char *path, struct DiskPartition64 *partp,
- 	VRequestSalvage_r(ec, vp, SALVSYNC_ERROR, VOL_SALVAGE_NO_OFFLINE);
- 	VChangeState_r(vp, VOL_STATE_ERROR);
- 	vp->nUsers = 0;
-+	forcefree = 1;
- #endif /* AFS_DEMAND_ATTACH_FS */
- 	Log("VAttachVolume: volume %s is junk; it should be destroyed at next salvage\n", path);
- 	*ec = VNOVOL;
--	forcefree = 1;
- 	goto locked_error;
-     }
- 
-@@ -3980,18 +3983,18 @@ GetVolume(Error * ec, Error * client_ec, VolId volumeId, Volume * hint,
- 	 *   - VOL_STATE_SHUTTING_DOWN
- 	 */
- 	if ((V_attachState(vp) == VOL_STATE_ERROR) ||
--	    (V_attachState(vp) == VOL_STATE_SHUTTING_DOWN) ||
--	    (V_attachState(vp) == VOL_STATE_GOING_OFFLINE)) {
-+	    (V_attachState(vp) == VOL_STATE_SHUTTING_DOWN)) {
- 	    *ec = VNOVOL;
- 	    vp = NULL;
- 	    break;
- 	}
- 
- 	/*
--	 * short circuit with VOFFLINE for VOL_STATE_UNATTACHED and
-+	 * short circuit with VOFFLINE for VOL_STATE_UNATTACHED/GOING_OFFLINE and
- 	 *                    VNOVOL   for VOL_STATE_DELETED
- 	 */
-        if ((V_attachState(vp) == VOL_STATE_UNATTACHED) ||
-+           (V_attachState(vp) == VOL_STATE_GOING_OFFLINE) ||
-            (V_attachState(vp) == VOL_STATE_DELETED)) {
- 	   if (vp->specialStatus) {
- 	       *ec = vp->specialStatus;
-@@ -4044,9 +4047,17 @@ GetVolume(Error * ec, Error * client_ec, VolId volumeId, Volume * hint,
- 		    if (!vp->pending_vol_op) {
- 			endloop = 1;
- 		    }
-+		    if (vp->specialStatus) {
-+			*ec = vp->specialStatus;
-+		    }
- 		    break;
-+
- 		default:
--		    *ec = VNOVOL;
-+		    if (vp->specialStatus) {
-+			*ec = vp->specialStatus;
-+		    } else {
-+			*ec = VNOVOL;
-+		    }
- 		    endloop = 1;
- 		}
- 		if (endloop) {
-@@ -4107,14 +4118,7 @@ GetVolume(Error * ec, Error * client_ec, VolId volumeId, Volume * hint,
- 	       }
- 	   } else {
- 	       if (client_ec) {
--		   /* see CheckVnode() in afsfileprocs.c for an explanation
--		    * of this error code logic */
--		   afs_uint32 now = FT_ApproxTime();
--		   if ((vp->stats.last_vol_op + (10 * 60)) >= now) {
--		       *client_ec = VBUSY;
--		   } else {
--		       *client_ec = VRESTARTING;
--		   }
-+		   *client_ec = VOFFLINE;
- 	       }
- 	       *ec = VOFFLINE;
- 	   }
-@@ -4466,12 +4470,12 @@ VOffline(Volume * vp, char *message)
- void
- VDetachVolume_r(Error * ec, Volume * vp)
- {
-+#ifdef FSSYNC_BUILD_CLIENT
-     VolumeId volume;
-     struct DiskPartition64 *tpartp;
-     int notifyServer = 0;
-     int  useDone = FSYNC_VOL_ON;
- 
--    *ec = 0;			/* always "succeeds" */
-     if (VCanUseFSSYNC()) {
- 	notifyServer = vp->needsPutBack;
- 	if (V_destroyMe(vp) == DESTROY_ME)
-@@ -4489,6 +4493,8 @@ VDetachVolume_r(Error * ec, Volume * vp)
- # endif
-     tpartp = vp->partition;
-     volume = V_id(vp);
-+#endif /* FSSYNC_BUILD_CLIENT */
-+    *ec = 0;			/* always "succeeds" */
-     DeleteVolumeFromHashTable(vp);
-     vp->shuttingDown = 1;
- #ifdef AFS_DEMAND_ATTACH_FS
-@@ -8628,7 +8634,7 @@ VVByPListWait_r(struct DiskPartition64 * dp)
- void
- VPrintCacheStats_r(void)
- {
--    afs_uint32 get_hi, get_lo, load_hi, load_lo;
-+    afs_uint32 get_hi AFS_UNUSED, get_lo, load_hi AFS_UNUSED, load_lo;
-     struct VnodeClassInfo *vcp;
-     vcp = &VnodeClassInfo[vLarge];
-     Log("Large vnode cache, %d entries, %d allocs, %d gets (%d reads), %d writes\n", vcp->cacheSize, vcp->allocs, vcp->gets, vcp->reads, vcp->writes);
-diff --git a/src/vol/vutil.c b/src/vol/vutil.c
-index acda92a..7b2cd8b 100644
---- a/src/vol/vutil.c
-+++ b/src/vol/vutil.c
-@@ -136,7 +136,7 @@ VCreateVolume_r(Error * ec, char *partname, VolId volumeId, VolId parentId)
-     struct VolumeDiskHeader diskHeader;
-     IHandle_t *handle;
-     FdHandle_t *fdP;
--    Inode nearInode = 0;
-+    Inode nearInode AFS_UNUSED = 0;
-     char *part, *name;
-     struct stat st;
-     afs_ino_str_t stmp;
-diff --git a/src/volser/dumpstuff.c b/src/volser/dumpstuff.c
-index caa2c40..53aa8b8 100644
---- a/src/volser/dumpstuff.c
-+++ b/src/volser/dumpstuff.c
-@@ -1312,7 +1312,7 @@ ReadVnodes(struct iod *iodp, Volume * vp, int incremental,
-     struct VnodeClassInfo *vcp;
-     IHandle_t *tmpH;
-     FdHandle_t *fdP;
--    Inode nearInode;
-+    Inode nearInode AFS_UNUSED;
-     afs_int32 critical = 0;
- 
-     tag = iod_getc(iodp);
-diff --git a/src/volser/restorevol.c b/src/volser/restorevol.c
-index f8f198e..86d720e 100644
---- a/src/volser/restorevol.c
-+++ b/src/volser/restorevol.c
-@@ -147,7 +147,7 @@ ReadDumpHeader(struct DumpHeader *dh)
- {
-     int i, done;
-     char tag, c;
--    afs_int32 magic;
-+    afs_int32 magic AFS_UNUSED;
- 
- /*  memset(&dh, 0, sizeof(dh)); */
- 
-diff --git a/src/volser/vol_split.c b/src/volser/vol_split.c
-index 7522b9b..d486e24 100644
---- a/src/volser/vol_split.c
-+++ b/src/volser/vol_split.c
-@@ -404,7 +404,7 @@ afs_int32 copyVnodes(struct Msg *m, Volume *vol, Volume *newvol,
- 	        ino = VNDISK_GET_INO(vnode);
- 	        if (ino) {
- 		    IHandle_t *h, *newh;
--		    Inode nearInode;
-+		    Inode nearInode AFS_UNUSED;
- #if defined(NEARINODE_HINT) && !defined(AFS_NAMEI_ENV)
- 		    V_pref(vol,nearInode)
- #endif
-diff --git a/src/volser/volprocs.c b/src/volser/volprocs.c
-index 95339ad..46b43b7 100644
---- a/src/volser/volprocs.c
-+++ b/src/volser/volprocs.c
-@@ -129,6 +129,21 @@ static afs_int32 VolSetIdsTypes(struct rx_call *, afs_int32, char [],
- 				afs_uint32);
- static afs_int32 VolSetDate(struct rx_call *, afs_int32, afs_int32);
- 
-+/**
-+ * Return the host address of the caller as a string.
-+ *
-+ * @param[in]  acid    incoming rx call
-+ * @param[out] buffer  buffer to be filled with the addess string
-+ *
-+ * @return address as formatted by inet_ntoa
-+ */
-+static_inline char *
-+callerAddress(struct rx_call *acid, char *buffer)
-+{
-+    afs_uint32 ip = rx_HostOf(rx_PeerOf(rx_ConnectionOf(acid)));
-+    return afs_inet_ntoa_r(ip, buffer);
-+}
-+
- /* this call unlocks all of the partition locks we've set */
- int
- VPFullUnlock_r(void)
-@@ -327,7 +342,7 @@ ViceCreateRoot(Volume *vp)
-     DirHandle dir;
-     struct acl_accessList *ACL;
-     AFSFid did;
--    Inode inodeNumber, nearInode;
-+    Inode inodeNumber, nearInode AFS_UNUSED;
-     struct VnodeDiskObject *vnode;
-     struct VnodeClassInfo *vcp = &VnodeClassInfo[vLarge];
-     IHandle_t *h;
-@@ -486,8 +501,11 @@ VolNukeVolume(struct rx_call *acid, afs_int32 apartID, afs_uint32 avolID)
-     /* check for access */
-     if (!afsconf_SuperUser(tdir, acid, caller))
- 	return VOLSERBAD_ACCESS;
--    if (DoLogging)
--	Log("%s is executing VolNukeVolume %u\n", caller, avolID);
-+    if (DoLogging) {
-+	char buffer[16];
-+	Log("%s on %s is executing VolNukeVolume %u\n", caller,
-+	    callerAddress(acid, buffer), avolID);
-+    }
- 
-     if (volutil_PartitionName2_r(apartID, partName, sizeof(partName)) != 0)
- 	return VOLSERNOVOL;
-@@ -541,8 +559,11 @@ VolCreateVolume(struct rx_call *acid, afs_int32 apart, char *aname,
- 	return VOLSERBADNAME;
-     if (!afsconf_SuperUser(tdir, acid, caller))
- 	return VOLSERBAD_ACCESS;
--    if (DoLogging)
--	Log("%s is executing CreateVolume '%s'\n", caller, aname);
-+    if (DoLogging) {
-+	char buffer[16];
-+	Log("%s on %s is executing CreateVolume '%s'\n", caller,
-+	    callerAddress(acid, buffer), aname);
-+    }
-     if ((error = ConvertPartition(apart, ppath, sizeof(ppath))))
- 	return error;		/*a standard unix error */
-     if (atype != readwriteVolume && atype != readonlyVolume
-@@ -643,8 +664,11 @@ VolDeleteVolume(struct rx_call *acid, afs_int32 atrans)
- 	TRELE(tt);
- 	return ENOENT;
-     }
--    if (DoLogging)
--	Log("%s is executing Delete Volume %u\n", caller, tt->volid);
-+    if (DoLogging) {
-+	char buffer[16];
-+	Log("%s on %s is executing Delete Volume %u\n", caller,
-+	    callerAddress(acid, buffer), tt->volid);
-+    }
-     TSetRxCall(tt, acid, "DeleteVolume");
-     VPurgeVolume(&error, tt->volume);	/* don't check error code, it is not set! */
-     V_destroyMe(tt->volume) = DESTROY_ME;
-@@ -703,8 +727,11 @@ VolClone(struct rx_call *acid, afs_int32 atrans, afs_uint32 purgeId,
- 	return VOLSERBADNAME;
-     if (!afsconf_SuperUser(tdir, acid, caller))
- 	return VOLSERBAD_ACCESS;	/*not a super user */
--    if (DoLogging)
--	Log("%s is executing Clone Volume new name=%s\n", caller, newName);
-+    if (DoLogging) {
-+	char buffer[16];
-+	Log("%s on %s is executing Clone Volume new name=%s\n", caller,
-+	    callerAddress(acid, buffer), newName);
-+    }
-     error = 0;
-     originalvp = (Volume *) 0;
-     purgevp = (Volume *) 0;
-@@ -886,8 +913,11 @@ VolReClone(struct rx_call *acid, afs_int32 atrans, afs_int32 cloneId)
-     /*not a super user */
-     if (!afsconf_SuperUser(tdir, acid, caller))
- 	return VOLSERBAD_ACCESS;
--    if (DoLogging)
--	Log("%s is executing Reclone Volume %u\n", caller, cloneId);
-+    if (DoLogging) {
-+	char buffer[16];
-+	Log("%s on %s is executing Reclone Volume %u\n", caller,
-+	    callerAddress(acid, buffer), cloneId);
-+    }
-     error = 0;
-     clonevp = originalvp = (Volume *) 0;
-     tt = (struct volser_trans *)0;
-diff --git a/src/volser/vos.c b/src/volser/vos.c
-index 3ee98e4..20fe319 100644
---- a/src/volser/vos.c
-+++ b/src/volser/vos.c
-@@ -5457,13 +5457,13 @@ SetAddrs(struct cmd_syndesc *as, void *arock)
-     if (vcode) {
- 	if (vcode == VL_MULTIPADDR) {
- 	    fprintf(STDERR, "vos: VL_RegisterAddrs rpc failed; The IP address exists on a different server; repair it\n");
--	    PrintError("", vcode);
--	    return vcode;
- 	} else if (vcode == RXGEN_OPCODE) {
- 	    fprintf(STDERR, "vlserver doesn't support VL_RegisterAddrs rpc; ignored\n");
--	    PrintError("", vcode);
--	    return vcode;
-+	} else {
-+	    fprintf(STDERR, "vos: VL_RegisterAddrs rpc failed\n");
- 	}
-+	PrintError("", vcode);
-+	return vcode;
-     }
-     if (verbose) {
- 	fprintf(STDOUT, "vos: Changed UUID with addresses:\n");
-@@ -5506,7 +5506,7 @@ ConvertRO(struct cmd_syndesc *as, void *arock)
-     afs_uint32 volid;
-     afs_uint32 server;
-     afs_int32 code, i, same;
--    struct nvldbentry entry, storeEntry;
-+    struct nvldbentry entry, checkEntry, storeEntry;
-     afs_int32 vcode;
-     afs_int32 rwindex = 0;
-     afs_uint32 rwserver = 0;
-@@ -5545,23 +5545,23 @@ ConvertRO(struct cmd_syndesc *as, void *arock)
- 	    PrintError("", code);
- 	else
- 	    fprintf(STDERR, "Unknown volume ID or name '%s'\n",
--		    as->parms[0].items->data);
-+		    as->parms[2].items->data);
- 	return -1;
-     }
-     if (as->parms[3].items)
- 	force = 1;
- 
-+    memset(&entry, 0, sizeof(entry));
-     vcode = VLDB_GetEntryByID(volid, -1, &entry);
-     if (vcode) {
- 	fprintf(STDERR,
- 		"Could not fetch the entry for volume %lu from VLDB\n",
- 		(unsigned long)volid);
--	PrintError("convertROtoRW", code);
-+	PrintError("convertROtoRW ", vcode);
- 	return vcode;
-     }
- 
-     /* use RO volid even if user specified RW or BK volid */
--
-     if (volid != entry.volumeId[ROVOL])
- 	volid = entry.volumeId[ROVOL];
- 
-@@ -5571,8 +5571,9 @@ ConvertRO(struct cmd_syndesc *as, void *arock)
- 	    rwindex = i;
- 	    rwserver = entry.serverNumber[i];
- 	    rwpartition = entry.serverPartition[i];
--	}
--	if (entry.serverFlags[i] & ITSROVOL) {
-+	    if (roserver)
-+		break;
-+	} else if ((entry.serverFlags[i] & ITSROVOL) && !roserver) {
- 	    same = VLDB_IsSameAddrs(server, entry.serverNumber[i], &code);
- 	    if (code) {
- 		fprintf(STDERR,
-@@ -5584,14 +5585,15 @@ ConvertRO(struct cmd_syndesc *as, void *arock)
- 		roindex = i;
- 		roserver = entry.serverNumber[i];
- 		ropartition = entry.serverPartition[i];
--		break;
-+		if (rwserver)
-+		     break;
- 	    }
- 	}
-     }
-     if (!roserver) {
- 	fprintf(STDERR, "Warning: RO volume didn't exist in vldb!\n");
-     }
--    if (ropartition != partition) {
-+    if (roserver && (ropartition != partition)) {
- 	fprintf(STDERR,
- 		"Warning: RO volume should be in partition %d instead of %d (vldb)\n",
- 		ropartition, partition);
-@@ -5617,6 +5619,37 @@ ConvertRO(struct cmd_syndesc *as, void *arock)
-     vcode =
- 	ubik_VL_SetLock(cstruct, 0, entry.volumeId[RWVOL], RWVOL,
- 		  VLOP_MOVE);
-+    if (vcode) {
-+	fprintf(STDERR,
-+		"Unable to lock volume %lu, code %d\n",
-+		(unsigned long)entry.volumeId[RWVOL],vcode);
-+	PrintError("", vcode);
-+	return -1;
-+    }
-+
-+    /* make sure the VLDB entry hasn't changed since we started */
-+    memset(&checkEntry, 0, sizeof(checkEntry));
-+    vcode = VLDB_GetEntryByID(volid, -1, &checkEntry);
-+    if (vcode) {
-+	fprintf(STDERR,
-+                "Could not fetch the entry for volume %lu from VLDB\n",
-+                (unsigned long)volid);
-+	PrintError("convertROtoRW ", vcode);
-+	code = vcode;
-+	goto error_exit;
-+    }
-+
-+    MapHostToNetwork(&checkEntry);
-+    entry.flags &= ~VLOP_ALLOPERS;  /* clear any stale lock operation flags */
-+    entry.flags |= VLOP_MOVE;        /* set to match SetLock operation above */
-+    if (memcmp(&entry, &checkEntry, sizeof(entry)) != 0) {
-+        fprintf(STDERR,
-+                "VLDB entry for volume %lu has changed; please reissue the command.\n",
-+                (unsigned long)volid);
-+        code = -1;
-+        goto error_exit;
-+    }
-+
-     aconn = UV_Bind(server, AFSCONF_VOLUMEPORT);
-     code = AFSVolConvertROtoRWvolume(aconn, partition, volid);
-     if (code) {
-@@ -5624,11 +5657,31 @@ ConvertRO(struct cmd_syndesc *as, void *arock)
- 		"Converting RO volume %lu to RW volume failed with code %d\n",
- 		(unsigned long)volid, code);
- 	PrintError("convertROtoRW ", code);
--	return -1;
-+	goto error_exit;
-+    }
-+    /* Update the VLDB to match what we did on disk as much as possible.  */
-+    /* If the converted RO was in the VLDB, make it look like the new RW. */
-+    if (roserver) {
-+	entry.serverFlags[roindex] = ITSRWVOL;
-+    } else {
-+	/* Add a new site entry for the newly created RW.  It's possible
-+	 * (but unlikely) that we are already at MAXNSERVERS and that this
-+	 * new site will invalidate the whole VLDB entry;  however,
-+	 * VLDB_ReplaceEntry will detect this and return VL_BADSERVER,
-+	 * so we need no extra guard logic here.
-+	 */
-+	afs_int32 newrwindex = entry.nServers;
-+	(entry.nServers)++;
-+	entry.serverNumber[newrwindex] = server;
-+	entry.serverPartition[newrwindex] = partition;
-+	entry.serverFlags[newrwindex] = ITSRWVOL;
-     }
--    entry.serverFlags[roindex] = ITSRWVOL;
-     entry.flags |= RW_EXISTS;
-     entry.flags &= ~BACK_EXISTS;
-+
-+    /* if the old RW was in the VLDB, remove it by decrementing the number */
-+    /* of servers, replacing the RW entry with the last entry, and zeroing */
-+    /* out the last entry. */
-     if (rwserver) {
- 	(entry.nServers)--;
- 	if (rwindex != entry.nServers) {
-@@ -5658,9 +5711,14 @@ ConvertRO(struct cmd_syndesc *as, void *arock)
- 		"Warning: volume converted, but vldb update failed with code %d!\n",
- 		code);
-     }
-+
-+  error_exit:
-     vcode = UV_LockRelease(entry.volumeId[RWVOL]);
-     if (vcode) {
--	PrintDiagnostics("unlock", vcode);
-+	fprintf(STDERR,
-+		"Unable to unlock volume %lu, code %d\n",
-+		(unsigned long)entry.volumeId[RWVOL],vcode);
-+	PrintError("", vcode);
-     }
-     return code;
- }
-diff --git a/src/xstat/xstat_fs_test.c b/src/xstat/xstat_fs_test.c
-index 3be314e..ba9677b 100644
---- a/src/xstat/xstat_fs_test.c
-+++ b/src/xstat/xstat_fs_test.c
-@@ -279,14 +279,6 @@ PrintOverallPerfInfo(struct afs_PerfStats *a_ovP)
- void
- PrintOpTiming(int a_opIdx, struct fs_stats_opTimingData *a_opTimeP)
- {
--    double fSumTime, avg;
--
--    fSumTime =
--	((double)(a_opTimeP->sumTime.tv_sec)) +
--	(((double)(a_opTimeP->sumTime.tv_usec)) / ((double)(1000000)));
--/*    printf("Double sum time is %f\n", fSumTime);*/
--    avg = fSumTime / ((double)(a_opTimeP->numSuccesses));
--
-     printf
- 	("%15s: %u ops (%u OK); sum=%lu.%06lu, sqr=%lu.%06lu, min=%lu.%06lu, max=%lu.%06lu\n",
- 	 opNames[a_opIdx], a_opTimeP->numOps, a_opTimeP->numSuccesses,
-@@ -320,14 +312,6 @@ PrintOpTiming(int a_opIdx, struct fs_stats_opTimingData *a_opTimeP)
- void
- PrintXferTiming(int a_opIdx, struct fs_stats_xferData *a_xferP)
- {
--    double fSumTime, avg;
--
--    fSumTime =
--	((double)(a_xferP->sumTime.tv_sec)) +
--	((double)(a_xferP->sumTime.tv_usec)) / ((double)(1000000));
--
--    avg = fSumTime / ((double)(a_xferP->numSuccesses));
--
-     printf
- 	("%s: %u xfers (%u OK), time sum=%lu.%06lu, sqr=%lu.%06lu, min=%lu.%06lu, max=%lu.%06lu\n",
- 	 xferOpNames[a_opIdx], a_xferP->numXfers, a_xferP->numSuccesses,
Index: trunk/server/common/patches/openafs-systemd-remote-fs.patch
===================================================================
--- trunk/server/common/patches/openafs-systemd-remote-fs.patch	(revision 2337)
+++ trunk/server/common/patches/openafs-systemd-remote-fs.patch	(revision 2337)
@@ -0,0 +1,25 @@
+commit 1ad0974334feb0a46c8f806654a0592e91011da5
+Author: Edward Z. Yang <ezyang@mit.edu>
+Date:   Sun Nov 20 15:48:33 2011 -0500
+
+    Add OpenAFS to the dependencies of remote-fs.
+    
+    Signed-off-by: Edward Z. Yang <ezyang@mit.edu>
+    
+    Reviewed-on: http://gerrit.openafs.org/6093
+    Tested-by: BuildBot <buildbot@rampaginggeek.com>
+    Reviewed-by: Derrick Brashear <shadow@dementix.org>
+    (cherry picked from commit 3328770612b7205abb92df5b5f4737eb3349c910)
+    
+    Change-Id: I16b7b0ac6e68bf91c48652faab339871f18549a5
+
+diff --git a/src/packaging/RedHat/openafs-client.service b/src/packaging/RedHat/openafs-client.service
+index bc95057..936762e 100644
+--- a/src/packaging/RedHat/openafs-client.service
++++ b/src/packaging/RedHat/openafs-client.service
+@@ -15,4 +15,4 @@ ExecStop=/sbin/rmmod openafs
+ KillMode=none
+ 
+ [Install]
+-WantedBy=multi-user.target
++WantedBy=multi-user.target remote-fs.target
