summaryrefslogtreecommitdiffstats
path: root/utils/mountd/cache.c
diff options
context:
space:
mode:
authorFred Isaman <iisaman@citi.umich.edu>2007-02-22 15:48:53 +1100
committerNeil Brown <neilb@suse.de>2007-02-22 15:48:53 +1100
commit5fb04a376e6d5ba940e66507e4a615f4e94116e6 (patch)
treefc75ece9014d7fd730cae73792adb681fc473d5f /utils/mountd/cache.c
parent66d8e2870b8d3e91c27a66ebc85e012a3cda9c69 (diff)
downloadnfs-utils-5fb04a376e6d5ba940e66507e4a615f4e94116e6.tar.gz
nfs-utils-5fb04a376e6d5ba940e66507e4a615f4e94116e6.tar.xz
nfs-utils-5fb04a376e6d5ba940e66507e4a615f4e94116e6.zip
Extend the exportfs interface to pass fslocations info into the kernel.
Extend exportfs interface to pass fslocations info into the kernel, using syntax modelled after AIX. Adds "refer=" and "replicas=" options to /etc/exports to enable use of the kernel fslocation code. Signed-off-by: Fred Isaman <iisaman@citi.umich.edu> Signed-off-by: Kevin Coffman <kwc@citi.umich.edu> Signed-off-by: Neil Brown <neilb@suse.de>
Diffstat (limited to 'utils/mountd/cache.c')
-rw-r--r--utils/mountd/cache.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c
index 629d567..a14f4f2 100644
--- a/utils/mountd/cache.c
+++ b/utils/mountd/cache.c
@@ -28,6 +28,7 @@
#include "exportfs.h"
#include "mountd.h"
#include "xmalloc.h"
+#include "fsloc.h"
#include "blkid/blkid.h"
@@ -421,6 +422,29 @@ void nfsd_fh(FILE *f)
return;
}
+static void write_fsloc(FILE *f, struct exportent *ep, char *path)
+{
+ struct servers *servers;
+
+ if (ep->e_fslocmethod == FSLOC_NONE)
+ return;
+
+ servers = replicas_lookup(ep->e_fslocmethod, ep->e_fslocdata, path);
+ if (!servers)
+ return;
+ qword_print(f, "fsloc");
+ qword_printint(f, servers->h_num);
+ if (servers->h_num >= 0) {
+ int i;
+ for (i=0; i<servers->h_num; i++) {
+ qword_print(f, servers->h_mp[i]->h_host);
+ qword_print(f, servers->h_mp[i]->h_path);
+ }
+ }
+ qword_printint(f, servers->h_referral);
+ release_replicas(servers);
+}
+
static int dump_to_cache(FILE *f, char *domain, char *path, struct exportent *exp)
{
qword_print(f, domain);
@@ -441,6 +465,7 @@ static int dump_to_cache(FILE *f, char *domain, char *path, struct exportent *ex
qword_print(f, "uuid");
qword_printhex(f, exp->e_uuid, 16);
}
+ write_fsloc(f, &exp, path);
}
return qword_eol(f);
}