summaryrefslogtreecommitdiff
path: root/nuttx
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-04-23 23:21:30 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-04-23 23:21:30 +0000
commitaee2480fc6f591ac4b0d62cbba3770a033331819 (patch)
tree462a51b8aff86cae0d449394d56e3720da7a5565 /nuttx
parenta8aed07667d2a225ca6b09fadb91e66d7c554312 (diff)
downloadpx4-nuttx-aee2480fc6f591ac4b0d62cbba3770a033331819.tar.gz
px4-nuttx-aee2480fc6f591ac4b0d62cbba3770a033331819.tar.bz2
px4-nuttx-aee2480fc6f591ac4b0d62cbba3770a033331819.zip
NFS update
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4650 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx')
-rw-r--r--nuttx/fs/nfs/nfs.h113
-rw-r--r--nuttx/fs/nfs/nfs_mount.h5
-rw-r--r--nuttx/fs/nfs/nfs_node.h2
-rw-r--r--nuttx/fs/nfs/nfs_proto.h6
-rw-r--r--nuttx/fs/nfs/nfs_socket.c2
-rwxr-xr-xnuttx/fs/nfs/nfs_util.c5
-rw-r--r--nuttx/fs/nfs/nfs_vfsops.c4
-rw-r--r--nuttx/include/nuttx/fs/nfs.h249
8 files changed, 77 insertions, 309 deletions
diff --git a/nuttx/fs/nfs/nfs.h b/nuttx/fs/nfs/nfs.h
index a88e5b91c..600e53350 100644
--- a/nuttx/fs/nfs/nfs.h
+++ b/nuttx/fs/nfs/nfs.h
@@ -53,31 +53,32 @@
* Pre-processor Definitions
****************************************************************************/
-#define NFS_TICKINTVL 5 /* Desired time for a tick (msec) */
+#define NFS_TICKINTVL 5 /* Desired time for a tick (msec) */
#define NFS_HZ (CLOCKS_PER_SEC / nfs_ticks) /* Ticks/sec */
#define NFS_TIMEO (1 * NFS_HZ) /* Default timeout = 1 second */
#define NFS_MINTIMEO (1 * NFS_HZ) /* Min timeout to use */
#define NFS_MAXTIMEO (60 * NFS_HZ) /* Max timeout to backoff to */
#define NFS_MINIDEMTIMEO (5 * NFS_HZ) /* Min timeout for non-idempotent ops */
-#define NFS_TIMEOUTMUL 2 /* Timeout/Delay multiplier */
-#define NFS_MAXREXMIT 100 /* Stop counting after this many */
-#define NFS_RETRANS 10 /* Num of retrans for soft mounts */
-#define NFS_MAXGRPS 16 /* Max. size of groups list */
-#define NFS_MINATTRTIMO 5 /* Attribute cache timeout in sec */
+#define NFS_TIMEOUTMUL 2 /* Timeout/Delay multiplier */
+#define NFS_MAXREXMIT 100 /* Stop counting after this many */
+#define NFS_RETRANS 10 /* Num of retrans for soft mounts */
+#define NFS_MAXGRPS 16 /* Max. size of groups list */
+#define NFS_MINATTRTIMO 5 /* Attribute cache timeout in sec */
#define NFS_MAXATTRTIMO 60
-#define NFS_WSIZE 8192 /* Def. write data size <= 8192 */
-#define NFS_RSIZE 8192 /* Def. read data size <= 8192 */
-#define NFS_READDIRSIZE 8192 /* Def. readdir size */
-#define NFS_DEFRAHEAD 1 /* Def. read ahead # blocks */
-#define NFS_MAXRAHEAD 4 /* Max. read ahead # blocks */
-#define NFS_MAXASYNCDAEMON 20 /* Max. number async_daemons runable */
+#define NFS_WSIZE 8192 /* Def. write data size <= 8192 */
+#define NFS_RSIZE 8192 /* Def. read data size <= 8192 */
+#define NFS_READDIRSIZE 8192 /* Def. readdir size */
+#define NFS_DEFRAHEAD 1 /* Def. read ahead # blocks */
+#define NFS_MAXRAHEAD 4 /* Max. read ahead # blocks */
+#define NFS_MAXASYNCDAEMON 20 /* Max. number async_daemons runable */
+#define NFS_NPROCS 23
/* Ideally, NFS_DIRBLKSIZ should be bigger, but I've seen servers with
* broken NFS/ethernet drivers that won't work with anything bigger (Linux..)
*/
-#define NFS_DIRBLKSIZ 1024 /* Must be a multiple of DIRBLKSIZ */
-#define NFS_READDIRBLKSIZ 512 /* Size of read dir blocks. XXX */
+#define NFS_DIRBLKSIZ 1024 /* Must be a multiple of DIRBLKSIZ */
+#define NFS_READDIRBLKSIZ 512 /* Size of read dir blocks. XXX */
/* Oddballs */
@@ -189,13 +190,14 @@
/* Bits for "nd_flag" */
#define ND_NFSV3 0x08
-
#define NFSD_CHECKSLP 0x01
/****************************************************************************
* Public Types
****************************************************************************/
+#undef COMP
+#ifdef COMP
/* Structures for the nfssvc(2) syscall.
* Not that anyone besides nfsd(8) should ever use it.
*/
@@ -220,46 +222,6 @@ struct nfsd_srvargs
uint32_t nsd_ttl; /* credential ttl (sec) */
};
-/* Stats structure */
-
-struct nfsstats
-{
- uint64_t attrcache_hits;
- uint64_t attrcache_misses;
- uint64_t lookupcache_hits;
- uint64_t lookupcache_misses;
- uint64_t direofcache_hits;
- uint64_t direofcache_misses;
- uint64_t biocache_reads;
- uint64_t read_bios;
- uint64_t read_physios;
- uint64_t biocache_writes;
- uint64_t write_bios;
- uint64_t write_physios;
- uint64_t biocache_readlinks;
- uint64_t readlink_bios;
- uint64_t biocache_readdirs;
- uint64_t readdir_bios;
- uint64_t rpccnt[NFS_NPROCS];
- uint64_t rpcretries;
- uint64_t srvrpccnt[NFS_NPROCS];
- uint64_t srvrpc_errs;
- uint64_t srv_errs;
- uint64_t rpcrequests;
- uint64_t rpctimeouts;
- uint64_t rpcunexpected;
- uint64_t rpcinvalid;
- uint64_t srvcache_inproghits;
- uint64_t srvcache_idemdonehits;
- uint64_t srvcache_nonidemdonehits;
- uint64_t srvcache_misses;
- uint64_t forcedsync;
- uint64_t srvnqnfs_leases;
- uint64_t srvnqnfs_maxleases;
- uint64_t srvnqnfs_getleases;
- uint64_t srvvop_writes;
-};
-
/* The set of signals the interrupt an I/O in progress for NFSMNT_INT mounts.
* What should be in this set is open to debate, but I believe that since
* I/O system calls on ufs are never interrupted by signals the set should
@@ -330,6 +292,47 @@ struct nfsrv_descript
int nd_repstat; /* Reply status */
uint32_t nd_retxid; /* Reply xid */
};
+#endif
+
+/* Stats structure */
+
+struct nfsstats
+{
+ uint64_t attrcache_hits;
+ uint64_t attrcache_misses;
+ uint64_t lookupcache_hits;
+ uint64_t lookupcache_misses;
+ uint64_t direofcache_hits;
+ uint64_t direofcache_misses;
+ uint64_t biocache_reads;
+ uint64_t read_bios;
+ uint64_t read_physios;
+ uint64_t biocache_writes;
+ uint64_t write_bios;
+ uint64_t write_physios;
+ uint64_t biocache_readlinks;
+ uint64_t readlink_bios;
+ uint64_t biocache_readdirs;
+ uint64_t readdir_bios;
+ uint64_t rpccnt[NFS_NPROCS];
+ uint64_t rpcretries;
+ uint64_t srvrpccnt[NFS_NPROCS];
+ uint64_t srvrpc_errs;
+ uint64_t srv_errs;
+ uint64_t rpcrequests;
+ uint64_t rpctimeouts;
+ uint64_t rpcunexpected;
+ uint64_t rpcinvalid;
+ uint64_t srvcache_inproghits;
+ uint64_t srvcache_idemdonehits;
+ uint64_t srvcache_nonidemdonehits;
+ uint64_t srvcache_misses;
+ uint64_t forcedsync;
+ uint64_t srvnqnfs_leases;
+ uint64_t srvnqnfs_maxleases;
+ uint64_t srvnqnfs_getleases;
+ uint64_t srvvop_writes;
+};
/****************************************************************************
* Public Data
diff --git a/nuttx/fs/nfs/nfs_mount.h b/nuttx/fs/nfs/nfs_mount.h
index 7ca070b9d..bfd5035bd 100644
--- a/nuttx/fs/nfs/nfs_mount.h
+++ b/nuttx/fs/nfs/nfs_mount.h
@@ -47,6 +47,8 @@
* Included Files
****************************************************************************/
+ #include <nuttx/fs/nfs.h>
+
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
@@ -68,7 +70,6 @@ struct nfsmount
{
int nm_flag; /* Flags for soft/hard... */
int nm_state; /* Internal state flags */
-//struct inode *nm_blkdriver; /* Vfs structure for this filesystem */
struct nfsnode *nm_head; /* A list to all files opened on this mountpoint */
bool nm_mounted; /* true: The file system is ready */
sem_t nm_sem; /* Used to assume thread-safe access */
@@ -98,8 +99,6 @@ struct nfsmount
int nm_acregmin; /* Reg file attr cache min lifetime */
int nm_acregmax; /* Reg file attr cache max lifetime */
unsigned char *nm_verf; /* V3 write verifier */
-//char nm_mntonname[90]; /* directory on which mounted */
-//uint8_t *nm_buffer; /* This is an allocated buffer to hold one sector*/
};
#endif
diff --git a/nuttx/fs/nfs/nfs_node.h b/nuttx/fs/nfs/nfs_node.h
index 55148d181..98867c900 100644
--- a/nuttx/fs/nfs/nfs_node.h
+++ b/nuttx/fs/nfs/nfs_node.h
@@ -49,6 +49,8 @@
#include <nuttx/fs/nfs.h>
+#include "nfs.h"
+
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
diff --git a/nuttx/fs/nfs/nfs_proto.h b/nuttx/fs/nfs/nfs_proto.h
index b82b2e104..7fecb60b4 100644
--- a/nuttx/fs/nfs/nfs_proto.h
+++ b/nuttx/fs/nfs/nfs_proto.h
@@ -47,8 +47,10 @@
* Included Files
****************************************************************************/
- #include <nuttx/fs/nfs.h>
+#include <nuttx/fs/nfs.h>
+#include "nfs.h"
+
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
@@ -302,7 +304,7 @@ typedef struct fhandle fhandle_t;
/*
union nfsfh
{
-fhandle_t fh_generic;
+ fhandle_t fh_generic;
unsigned char fh_bytes[NFS_MAXFHSIZE];
};
typedef union nfsfh nfsfh_t;
diff --git a/nuttx/fs/nfs/nfs_socket.c b/nuttx/fs/nfs/nfs_socket.c
index d659a097e..53a68ef1a 100644
--- a/nuttx/fs/nfs/nfs_socket.c
+++ b/nuttx/fs/nfs/nfs_socket.c
@@ -46,8 +46,6 @@
#include <string.h>
#include <debug.h>
-#include <nuttx/fs/nfs.h>
-
#include "nfs.h"
#include "rpc.h"
#include "rpc_v2.h"
diff --git a/nuttx/fs/nfs/nfs_util.c b/nuttx/fs/nfs/nfs_util.c
index a6c82ab22..3aedfc65c 100755
--- a/nuttx/fs/nfs/nfs_util.c
+++ b/nuttx/fs/nfs/nfs_util.c
@@ -134,7 +134,10 @@ int nfs_checkmount(struct nfsmount *nmp)
{
file->n_open = false;
}
+
+ return -ENODEV;
}
- return -ENODEV;
+
+ return 0;
}
diff --git a/nuttx/fs/nfs/nfs_vfsops.c b/nuttx/fs/nfs/nfs_vfsops.c
index 478271419..4679239c1 100644
--- a/nuttx/fs/nfs/nfs_vfsops.c
+++ b/nuttx/fs/nfs/nfs_vfsops.c
@@ -1016,6 +1016,7 @@ int mountnfs(struct nfs_args *argp, struct sockaddr *nam, void **handle)
sem_init(&nmp->nm_sem, 0, 0); /* Initialize the semaphore that controls access */
//nmp->nm_blkdriver = blkdriver; /* Save the block driver reference */
+ nfs_init();
nmp->nm_timeo = NFS_TIMEO;
nmp->nm_retry = NFS_RETRANS;
nmp->nm_wsize = NFS_WSIZE;
@@ -1053,8 +1054,7 @@ int mountnfs(struct nfs_args *argp, struct sockaddr *nam, void **handle)
/* Mounted! */
nmp->nm_mounted = true;
- nfs_init();
- *handle /*= blkdriver->i_private*/ = &nmp;
+ *handle = &nmp;
nfs_semgive(nmp);
return 0;
diff --git a/nuttx/include/nuttx/fs/nfs.h b/nuttx/include/nuttx/fs/nfs.h
index 93b0b780c..977736390 100644
--- a/nuttx/include/nuttx/fs/nfs.h
+++ b/nuttx/include/nuttx/fs/nfs.h
@@ -51,145 +51,7 @@
* Pre-processor Definitions
****************************************************************************/
-#define NFS_TICKINTVL 5 /* Desired time for a tick (msec) */
-#define NFS_HZ (CLOCKS_PER_SEC / nfs_ticks) /* Ticks/sec */
-#define NFS_TIMEO (1 * NFS_HZ) /* Default timeout = 1 second */
-#define NFS_MINTIMEO (1 * NFS_HZ) /* Min timeout to use */
-#define NFS_MAXTIMEO (60 * NFS_HZ) /* Max timeout to backoff to */
-#define NFS_MINIDEMTIMEO (5 * NFS_HZ) /* Min timeout for non-idempotent ops */
-#define NFS_TIMEOUTMUL 2 /* Timeout/Delay multiplier */
-#define NFS_MAXREXMIT 100 /* Stop counting after this many */
-#define NFS_RETRANS 10 /* Num of retrans for soft mounts */
-#define NFS_MAXGRPS 16 /* Max. size of groups list */
-#define NFS_MINATTRTIMO 5 /* Attribute cache timeout in sec */
-#define NFS_MAXATTRTIMO 60
-#define NFS_WSIZE 8192 /* Def. write data size <= 8192 */
-#define NFS_RSIZE 8192 /* Def. read data size <= 8192 */
-#define NFS_READDIRSIZE 8192 /* Def. readdir size */
-#define NFS_DEFRAHEAD 1 /* Def. read ahead # blocks */
-#define NFS_MAXRAHEAD 4 /* Max. read ahead # blocks */
-#define NFS_MAXASYNCDAEMON 20 /* Max. number async_daemons runable */
-
-/* Ideally, NFS_DIRBLKSIZ should be bigger, but I've seen servers with
- * broken NFS/ethernet drivers that won't work with anything bigger (Linux..)
- */
-
-#define NFS_DIRBLKSIZ 1024 /* Must be a multiple of DIRBLKSIZ */
-#define NFS_READDIRBLKSIZ 512 /* Size of read dir blocks. XXX */
-
-/* Oddballs */
-
-#define NFS_CMPFH(n, f, s) \
- ((n)->n_fhsize == (s) && !bcmp((void *)(n)->n_fhp, (void *)(f), (s)))
-#define NFS_ISV3(i) (VFSTONFS((i)->f_inode)->nm_flag & NFSMNT_NFSV3)
-#define NFS_SRVMAXDATA(n) \
- (((n)->nd_flag & ND_NFSV3) ? (((n)->nd_nam2) ? \
- NFS_MAXDGRAMDATA : NFS_MAXDATA) : NFS_V2MAXDATA)
-
-/* sys/malloc.h needs M_NFSDIROFF, M_NFSRVDESC and M_NFSBIGFH added. */
-
-#ifndef M_NFSRVDESC
-# define M_NFSRVDESC M_TEMP
-#endif
-#ifndef M_NFSDIROFF
-# define M_NFSDIROFF M_TEMP
-#endif
-#ifndef M_NFSBIGFH
-# define M_NFSBIGFH M_TEMP
-#endif
-
-/* The B_INVAFTERWRITE flag should be set to whatever is required by the
- * buffer cache code to say "Invalidate the block after it is written back".
- */
-
-#define B_INVAFTERWRITE B_INVAL
-
-/* Flags for nfssvc() system call. */
-
-#define NFSSVC_BIOD 0x002
-#define NFSSVC_NFSD 0x004
-#define NFSSVC_ADDSOCK 0x008
-#define NFSSVC_AUTHIN 0x010
-#define NFSSVC_GOTAUTH 0x040
-#define NFSSVC_AUTHINFAIL 0x080
-#define NFSSVC_MNTD 0x100
-
-/* fs.nfs sysctl(3) identifiers */
-
-#define NFS_NFSSTATS 1 /* struct: struct nfsstats */
-#define NFS_NIOTHREADS 2 /* number of i/o threads */
-#define NFS_MAXID 3
-
-#define FS_NFS_NAMES { \
- { 0, 0 }, \
- { "nfsstats", CTLTYPE_STRUCT }, \
- { "iothreads", CTLTYPE_INT } \
-}
-
-#define NFSINT_SIGMASK (sigmask(SIGINT)|sigmask(SIGTERM)|sigmask(SIGKILL)| \
- sigmask(SIGHUP)|sigmask(SIGQUIT))
-
-/* Socket errors ignored for connectionless sockets??
- * For now, ignore them all
- */
-
-#define NFSIGNORE_SOERROR(s, e) \
- ((e) != EINTR && (e) != ERESTART && (e) != EWOULDBLOCK && \
- ((s) & PR_CONNREQUIRED) == 0)
-
-/* Flag values for r_flags */
-
-#define R_TIMING 0x01/* timing request (in mntp) */
-#define R_SENT 0x02/* request has been sent */
-#define R_SOFTTERM 0x04/* soft mnt, too many retries */
-#define R_INTR 0x08/* intr mnt, signal pending */
-#define R_SOCKERR 0x10/* Fatal error on socket */
-#define R_TPRINTFMSG 0x20/* Did a tprintf msg. */
-#define R_MUSTRESEND 0x40/* Must resend request */
-
-/* On fast networks, the estimator will try to reduce the
- * timeout lower than the latency of the server's disks,
- * which results in too many timeouts, so cap the lower
- * bound.
- */
-
-#define NFS_MINRTO (NFS_HZ >> 2)
-
-/* Keep the RTO from increasing to unreasonably large values
- * when a server is not responding.
- */
-
-#define NFS_MAXRTO (20 * NFS_HZ)
-
-#define NFS_MAX_TIMER (NFS_WRITE_TIMER)
-#define NFS_INITRTT (NFS_HZ << 3)
-
-/* Bits for "ns_flag" */
-
-#define SLP_VALID 0x01/* connection is usable */
-#define SLP_DOREC 0x02/* receive operation required */
-#define SLP_NEEDQ 0x04/* connection has data to queue from socket */
-#define SLP_DISCONN 0x08/* connection is closed */
-#define SLP_GETSTREAM 0x10/* extracting RPC from TCP connection */
-#define SLP_LASTFRAG 0x20/* last fragment received on TCP connection */
-#define SLP_ALLFLAGS 0xff/* convenience */
-
-#define SLP_INIT 0x01/* NFS data undergoing initialization */
-#define SLP_WANTINIT 0x02/* thread waiting on NFS initialization */
-
-/* Bits for "nfsd_flag" */
-
-#define NFSD_WAITING 0x01
-#define NFSD_REQINPROG 0x02
-#define NFSD_NEEDAUTH 0x04
-#define NFSD_AUTHFAIL 0x08
-
-/* Bits for "nd_flag" */
-
-#define ND_NFSV3 0x08
-#define NFSD_CHECKSLP 0x01
-
-/* NFS mount option flags */
+ /* NFS mount option flags */
#define NFSMNT_SOFT 0x00000001 /* soft mount (hard is default) */
#define NFSMNT_WSIZE 0x00000002 /* set write size */
@@ -227,14 +89,14 @@
#define NFSMNT_NOAC 0x00080000 /* Turn off attribute cache */
#define NFS_ARGSVERSION 3 /* change when nfs_args changes */
-#define NFS_NPROCS 23
-#define NFS_MAXFHSIZE 64
-
+#define NFS_MAXFHSIZE 64
+#define NFS_PORT 2049
+
/****************************************************************************
* Public Types
****************************************************************************/
-/* File Handle (32 bytes for version 2), variable up to 64 for version 3. */
+ /* File Handle (32 bytes for version 2), variable up to 64 for version 3. */
union nfsfh
{
@@ -242,106 +104,6 @@ union nfsfh
};
typedef union nfsfh nfsfh_t;
-#undef COMP
-#ifdef COMP
-/* Structures for the nfssvc(2) syscall.
- * Not that anyone besides nfsd(8) should ever use it.
- */
-
-struct nfsd_args
-{
- int sock; /* Socket to serve */
- void *name; /* Client addr for connection based sockets */
- int namelen; /* Length of name */
-};
-
-struct nfsd_srvargs
-{
- struct nfsd *nsd_nfsd; /* Pointer to in kernel nfsd struct */
- uid_t nsd_uid; /* Effective uid mapped to cred */
- uint32_t nsd_haddr; /* IP address of client */
- int nsd_authlen; /* Length of auth string (ret) */
- unsigned char *nsd_authstr; /* Auth string (ret) */
- int nsd_verflen; /* and the verifier */
- unsigned char *nsd_verfstr;
- struct timeval nsd_timestamp; /* timestamp from verifier */
- uint32_t nsd_ttl; /* credential ttl (sec) */
-};
-#endif
-
-#ifdef COMP
-/* The set of signals the interrupt an I/O in progress for NFSMNT_INT mounts.
- * What should be in this set is open to debate, but I believe that since
- * I/O system calls on ufs are never interrupted by signals the set should
- * be minimal. My reasoning is that many current programs that use signals
- * such as SIGALRM will not expect file I/O system calls to be interrupted
- * by them and break.
- */
-
-/* Nfs outstanding request list element */
-
-struct nfsmount;
-struct nfsreq
-{
- dq_entry_t r_chain;
- struct nfsmount *r_nmp;
- uint32_t r_xid;
- int r_flags; /* flags on request, see below */
- int r_rexmit; /* current retrans count */
- int r_timer; /* tick counter on reply */
- int r_procnum; /* NFS procedure number */
- int r_rtt; /* RTT for rpc */
-};
-
-enum nfs_rto_timers
-{
- NFS_DEFAULT_TIMER,
- NFS_GETATTR_TIMER,
- NFS_LOOKUP_TIMER,
- NFS_READ_TIMER,
- NFS_WRITE_TIMER,
-};
-
-/* Network address hash list element */
-
-union nethostaddr
-{
- uint32_t had_inetaddr;
-};
-
-struct nfssvc_sock
-{
- // TAILQ_ENTRY(nfssvc_sock) ns_chain; /* List of all nfssvc_sock's */
- struct file *ns_fp; /* fp from the... */
- struct socket *ns_so; /* ...socket this struct wraps */
- int ns_flag; /* socket status flags */
- int ns_solock; /* lock for connected socket */
- int ns_cc; /* actual chars queued */
- int ns_reclen; /* length of first queued record */
- uint32_t ns_sref; /* # of refs to this struct */
-};
-
-/* One of these structures is allocated for each nfsd. */
-
-struct nfsd
-{
- //TAILQ_ENTRY(nfsd) nfsd_chain; /* List of all nfsd's */
- int nfsd_flag; /* NFSD_ flags */
- struct nfssvc_sock *nfsd_slp; /* Current socket */
- struct nfsrv_descript *nfsd_nd; /* Associated nfsrv_descript */
-};
-
-/* This structure is used by the server for describing each request. */
-
-struct nfsrv_descript
-{
- unsigned int nd_procnum; /* RPC # */
- int nd_flag; /* nd_flag */
- int nd_repstat; /* Reply status */
- uint32_t nd_retxid; /* Reply xid */
-};
-#endif
-
/* Arguments to mount NFS */
struct nfs_args
@@ -363,7 +125,6 @@ struct nfs_args
int readahead; /* # of blocks to readahead */
int leaseterm; /* Term (sec) of lease */
int deadthresh; /* Retrans threshold */
-//char *hostname; /* server's name */
int acregmin; /* cache attrs for reg files min time */
int acregmax; /* cache attrs for reg files max time */
int acdirmin; /* cache attrs for dirs min time */