diff --git a/sys/tools/vnode_if.awk b/sys/tools/vnode_if.awk
--- a/sys/tools/vnode_if.awk
+++ b/sys/tools/vnode_if.awk
@@ -473,8 +473,6 @@
 	printc("\t\tpanic(\"%s: vop_vector %p already registered\",")
 	printc("\t\t    __func__, orig_vop);");
 	printc("");
-	printc("\tcache_vop_vector_register(orig_vop);");
-	printc("");
 	for (name in funcarr) {
 		printc("\tvop = orig_vop;");
 		printc("\twhile (vop != NULL && \\");
@@ -484,6 +482,8 @@
 		printc("\t\torig_vop->"name" = vop->"name";");
 		printc("");
 	}
+	printc("\tcache_vop_vector_register(orig_vop);");
+	printc("");
 	printc("\tvop = orig_vop;");
 	printc("\twhile (vop != NULL && vop->vop_bypass == NULL)")
 	printc("\t\tvop = vop->vop_default;")