diff options
author | Fred Isaman <iisaman@citi.umich.edu> | 2007-02-22 15:48:53 +1100 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2007-02-22 15:48:53 +1100 |
commit | 5fb04a376e6d5ba940e66507e4a615f4e94116e6 (patch) | |
tree | fc75ece9014d7fd730cae73792adb681fc473d5f /utils/mountd/cache.c | |
parent | 66d8e2870b8d3e91c27a66ebc85e012a3cda9c69 (diff) | |
download | nfs-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.c | 25 |
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); } |