mountd: Warn when a broken junction is encountered
authorChuck Lever <chuck.lever@oracle.com>
Fri, 19 Oct 2012 14:24:07 +0000 (10:24 -0400)
committerSteve Dickson <steved@redhat.com>
Mon, 22 Oct 2012 13:44:02 +0000 (09:44 -0400)
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>
utils/mountd/cache.c

index 7d80432..942fdbd 100644 (file)
@@ -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;
 }