summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2012-10-19 10:24:07 -0400
committerSteve Dickson <steved@redhat.com>2012-10-22 09:44:02 -0400
commitd69795533b0c8906e42aa2eb1cf4628cda42a766 (patch)
tree71fc590980f480c51957cfcdb6326e7318375143
parent8213acaf93f748d7d0efe085aded3ab9b6871e9b (diff)
downloadnfs-utils-d69795533b0c8906e42aa2eb1cf4628cda42a766.zip
nfs-utils-d69795533b0c8906e42aa2eb1cf4628cda42a766.tar.gz
nfs-utils-d69795533b0c8906e42aa2eb1cf4628cda42a766.tar.xz
mountd: Warn when a broken junction is encountered
A broken junction is a problem that administrators will want to know about and correct. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r--utils/mountd/cache.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c
index 7d80432..942fdbd 100644
--- a/utils/mountd/cache.c
+++ b/utils/mountd/cache.c
@@ -975,8 +975,8 @@ static struct exportent *locations_to_export(struct jp_ops *ops,
static struct exportent *invoke_junction_ops(void *handle,
const char *junction)
{
+ struct exportent *exp = NULL;
nfs_fsloc_set_t locations;
- struct exportent *exp;
enum jp_status status;
struct jp_ops *ops;
char *error;
@@ -1002,15 +1002,24 @@ static struct exportent *invoke_junction_ops(void *handle,
}
status = ops->jp_get_locations(junction, &locations);
- if (status != JP_OK) {
- xlog(D_GENERAL, "%s: failed to resolve %s: %s",
- __func__, junction, ops->jp_error(status));
- return NULL;
+ switch (status) {
+ case JP_OK:
+ break;
+ case JP_NOTJUNCTION:
+ xlog(D_GENERAL, "%s: %s is not a junction",
+ __func__, junction);
+ goto out;
+ default:
+ xlog(L_WARNING, "Dangling junction %s: %s",
+ junction, ops->jp_error(status));
+ goto out;
}
exp = locations_to_export(ops, locations, junction);
ops->jp_put_locations(locations);
+
+out:
ops->jp_done();
return exp;
}