diff --git a/include/nfsc/libnfs.h b/include/nfsc/libnfs.h index f13cdfd..c1e55bc 100755 --- a/include/nfsc/libnfs.h +++ b/include/nfsc/libnfs.h @@ -233,6 +233,7 @@ EXTERN void nfs_set_pagecache_ttl(struct nfs_context *nfs, uint32_t v); EXTERN void nfs_set_readahead(struct nfs_context *nfs, uint32_t v); EXTERN void nfs_set_debug(struct nfs_context *nfs, int level); EXTERN void nfs_set_dircache(struct nfs_context *nfs, int enabled); +EXTERN void nfs_set_autoreconnect(struct nfs_context *nfs, int enabled); /* * Invalidate the pagecache diff --git a/lib/libnfs-win32.def b/lib/libnfs-win32.def index b4cc13d..2feec82 100644 --- a/lib/libnfs-win32.def +++ b/lib/libnfs-win32.def @@ -72,6 +72,7 @@ nfs_rmdir nfs_rmdir_async nfs_service nfs_set_auth +nfs_set_autoreconnect nfs_set_debug nfs_set_dircache nfs_set_gid diff --git a/lib/libnfs.c b/lib/libnfs.c index 5c435fc..1f01c28 100755 --- a/lib/libnfs.c +++ b/lib/libnfs.c @@ -148,6 +148,7 @@ struct nfs_context { uint64_t writemax; char *cwd; int dircache_enabled; + int auto_reconnect_enabled; struct nfsdir *dircache; uint16_t mask; @@ -360,6 +361,8 @@ static int nfs_set_context_args(struct nfs_context *nfs, const char *arg, const nfs->auto_traverse_mounts = atoi(val); } else if (!strcmp(arg, "dircache")) { nfs_set_dircache(nfs, atoi(val)); + } else if (!strcmp(arg, "autoreconnect")) { + nfs_set_autoreconnect(nfs, atoi(val)); #ifdef HAVE_SO_BINDTODEVICE } else if (!strcmp(arg, "if")) { nfs_set_interface(nfs, val); @@ -529,6 +532,7 @@ struct nfs_context *nfs_init_context(void) nfs->mask = 022; nfs->auto_traverse_mounts = 1; nfs->dircache_enabled = 1; + nfs->auto_reconnect_enabled = 1; return nfs; } @@ -1022,7 +1026,8 @@ static void nfs_mount_9_cb(struct rpc_context *rpc, int status, void *command_da /* NFS TCP connections should be autoreconnected after sessions have * been torn down (due to inactivity or error) */ - rpc_set_autoreconnect(rpc); + if (nfs->auto_reconnect_enabled) + rpc_set_autoreconnect(rpc); args.fsroot = nfs->rootfh; if (rpc_nfs3_fsinfo_async(rpc, nfs_mount_10_cb, &args, data) != 0) { @@ -5599,6 +5604,10 @@ void nfs_set_dircache(struct nfs_context *nfs, int enabled) { nfs->dircache_enabled = enabled; } +void nfs_set_autoreconnect(struct nfs_context *nfs, int enabled) { + nfs->auto_reconnect_enabled = enabled; +} + void nfs_set_error(struct nfs_context *nfs, char *error_string, ...) { va_list ap;