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 <ak03@gte.com>
This commit is contained in:
David E. O'Brien 2002-03-25 21:30:50 +00:00
parent ea4122d2bf
commit 0beb3ecc6c

View File

@ -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);