From 1e153b6d049294fddffea1bc000a25226bc073c9 Mon Sep 17 00:00:00 2001 From: obrien Date: Mon, 25 Mar 2002 21:30:50 +0000 Subject: Commit work-around for panics when mounting FS's that are auto-loaded as modules (ie. procfs.ko). When the kernel loads dynamic filesystem module, it looks for any of the VOP operations specified by the new filesystem that have not been registered already by the currently known filesystems. If any of such operations exist, vfs_add_vnops function calls vfs_opv_recalc function, which rebuilds vop_t vectors for each filesystem and sets all global pointers like ufs_vnops_p, devfs_specop_p, etc to the new values and then frees the old pointers. This behavior is bad because there might be already active vnodes whose v_op fields will be left pointing to the random garbage, leading to inevitable crash soon. Submitted by: Alexander Kabaev --- sys/kern/vfs_init.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'sys') diff --git a/sys/kern/vfs_init.c b/sys/kern/vfs_init.c index ce0ad37..7446258 100644 --- a/sys/kern/vfs_init.c +++ b/sys/kern/vfs_init.c @@ -129,8 +129,10 @@ vfs_opv_recalc(void) for (i = 0; i < vnodeopv_num; i++) { opv = vnodeopv_descs[i]; opv_desc_vector_p = opv->opv_desc_vector_p; +#ifdef WANT_BAD_JUJU if (*opv_desc_vector_p) FREE(*opv_desc_vector_p, M_VNODE); +#endif MALLOC(*opv_desc_vector_p, vop_t **, vfs_opv_numops * sizeof(vop_t *), M_VNODE, M_WAITOK | M_ZERO); -- cgit v1.1