diff --git a/pkg/sympath/walk.go b/pkg/sympath/walk.go
index b2500284a54a79b3b568c1f4a596f182450dcbe6..175d3fa95b1c8b35d740aa69b4d8b06c2d3aacde 100644
--- a/pkg/sympath/walk.go
+++ b/pkg/sympath/walk.go
@@ -72,9 +72,10 @@ func symwalk(path string, info os.FileInfo, walkFn filepath.WalkFunc) error {
 		if info, err = os.Lstat(resolved); err != nil {
 			return err
 		}
-		if err := symwalk(resolved, info, walkFn); err != nil && err != filepath.SkipDir {
+		if err := symwalk(path, info, walkFn); err != nil && err != filepath.SkipDir {
 			return err
 		}
+		return nil
 	}
 
 	if err := walkFn(path, info, nil); err != nil {
diff --git a/pkg/sympath/walk_test.go b/pkg/sympath/walk_test.go
index ab8e0eb4c9465ebf2087517d1b9633269a8ce39d..824da7ddc0f411fe0fb8d35330c041a98ad5e537 100644
--- a/pkg/sympath/walk_test.go
+++ b/pkg/sympath/walk_test.go
@@ -27,36 +27,45 @@ import (
 )
 
 type Node struct {
-	name    string
-	entries []*Node // nil if the entry is a file
-	mark    int
+	name          string
+	entries       []*Node // nil if the entry is a file
+	marks         int
+	expectedMarks int
+	symLinkedTo   string
 }
 
 var tree = &Node{
 	"testdata",
 	[]*Node{
-		{"a", nil, 0},
-		{"b", []*Node{}, 0},
-		{"c", nil, 0},
+		{"a", nil, 0, 1, ""},
+		{"b", []*Node{}, 0, 1, ""},
+		{"c", nil, 0, 2, ""},
+		{"d", nil, 0, 0, "c"},
 		{
-			"d",
+			"e",
 			[]*Node{
-				{"x", nil, 0},
-				{"y", []*Node{}, 0},
+				{"x", nil, 0, 1, ""},
+				{"y", []*Node{}, 0, 1, ""},
 				{
 					"z",
 					[]*Node{
-						{"u", nil, 0},
-						{"v", nil, 0},
-						{"w", nil, 0},
+						{"u", nil, 0, 1, ""},
+						{"v", nil, 0, 1, ""},
+						{"w", nil, 0, 1, ""},
 					},
 					0,
+					1,
+					"",
 				},
 			},
 			0,
+			1,
+			"",
 		},
 	},
 	0,
+	1,
+	"",
 }
 
 func walkTree(n *Node, path string, f func(path string, n *Node)) {
@@ -69,24 +78,32 @@ func walkTree(n *Node, path string, f func(path string, n *Node)) {
 func makeTree(t *testing.T) {
 	walkTree(tree, tree.name, func(path string, n *Node) {
 		if n.entries == nil {
-			fd, err := os.Create(path)
-			if err != nil {
-				t.Errorf("makeTree: %v", err)
-				return
+			if n.symLinkedTo != "" {
+				if err := os.Symlink(n.symLinkedTo, path); err != nil {
+					t.Fatalf("makeTree: %v", err)
+				}
+			} else {
+				fd, err := os.Create(path)
+				if err != nil {
+					t.Fatalf("makeTree: %v", err)
+					return
+				}
+				fd.Close()
 			}
-			fd.Close()
 		} else {
-			os.Mkdir(path, 0770)
+			if err := os.Mkdir(path, 0770); err != nil {
+				t.Fatalf("makeTree: %v", err)
+			}
 		}
 	})
 }
 
 func checkMarks(t *testing.T, report bool) {
 	walkTree(tree, tree.name, func(path string, n *Node) {
-		if n.mark != 1 && report {
-			t.Errorf("node %s mark = %d; expected 1", path, n.mark)
+		if n.marks != n.expectedMarks && report {
+			t.Errorf("node %s mark = %d; expected %d", path, n.marks, n.expectedMarks)
 		}
-		n.mark = 0
+		n.marks = 0
 	})
 }
 
@@ -104,7 +121,7 @@ func mark(info os.FileInfo, err error, errors *[]error, clear bool) error {
 	name := info.Name()
 	walkTree(tree, tree.name, func(path string, n *Node) {
 		if n.name == name {
-			n.mark++
+			n.marks++
 		}
 	})
 	return nil