Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/compat/common When using SYSCTL_SETUP there is no guaran...



details:   https://anonhg.NetBSD.org/src/rev/153c9bcfea0c
branches:  trunk
changeset: 1008550:153c9bcfea0c
user:      pgoyette <pgoyette%NetBSD.org@localhost>
date:      Thu Mar 26 13:39:29 2020 +0000

description:
When using SYSCTL_SETUP there is no guarantee of the order in which
the set-up functions will be called, so it is perfectly acceptable
for a compat code's routine to be called ahead of the code in other
parts of the kernel.

So make sure that the 2nd level sysctl node ``vfs.generic'' exists
before trying to add the 3rd level entries.

XXX Rather than creating the 2nd level node in two places, we could
XXX add the shared ``vfs.generic'' node to sysctl_init_base.c but
XXX this is left for another day.

diffstat:

 sys/compat/common/compat_sysctl_09_43.c |  15 +++++++++++++--
 1 files changed, 13 insertions(+), 2 deletions(-)

diffs (36 lines):

diff -r 624fe029c91f -r 153c9bcfea0c sys/compat/common/compat_sysctl_09_43.c
--- a/sys/compat/common/compat_sysctl_09_43.c   Thu Mar 26 13:37:44 2020 +0000
+++ b/sys/compat/common/compat_sysctl_09_43.c   Thu Mar 26 13:39:29 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: compat_sysctl_09_43.c,v 1.5 2020/02/27 17:42:33 pgoyette Exp $ */
+/*     $NetBSD: compat_sysctl_09_43.c,v 1.6 2020/03/26 13:39:29 pgoyette Exp $ */
 
 /*
  * Copyright (c) 1989, 1993
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: compat_sysctl_09_43.c,v 1.5 2020/02/27 17:42:33 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: compat_sysctl_09_43.c,v 1.6 2020/03/26 13:39:29 pgoyette Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_netbsd.h"
@@ -106,6 +106,17 @@
        int error;
 
        error = sysctl_createv(clog, 0, NULL, NULL,
+                       CTLFLAG_PERMANENT, 
+                       CTLTYPE_NODE, "generic",
+                       SYSCTL_DESCR("Non-specific vfs related information"),
+                       NULL, 0, NULL, 0,
+                       CTL_VFS, VFS_GENERIC, CTL_EOL);
+       if (error == EEXIST)
+               error = 0;
+       if (error != 0)
+               return;
+
+       error = sysctl_createv(clog, 0, NULL, NULL,
                       CTLFLAG_PERMANENT|CTLFLAG_IMMEDIATE,
                       CTLTYPE_INT, "maxtypenum",
                       SYSCTL_DESCR("Highest valid filesystem type number"),



Home | Main Index | Thread Index | Old Index