As long as mnt_ref is not zero there can be a consumer that might try
to access mnt_vnodecovered. For this reason the covered vnode must not
be freed until mnt_ref goes to zero.
So, move the release of the covered vnode to vfs_mount_destroy.
Details
Details
Diff Detail
Diff Detail
- Repository
- rS FreeBSD src repository - subversion
- Lint
Lint Not Applicable - Unit
Tests Not Applicable
Event Timeline
Comment Actions
There is also one use of vfs_mount_destroy() in zfs, but I did not looked at it. You should know it much better.
sys/kern/vfs_mount.c | ||
---|---|---|
826 ↗ | (On Diff #32946) | Look at this fragment. I believe that you need vref(vp) before the call to vfs_mount_destroy() at line 822. |
sys/kern/vfs_mount.c | ||
---|---|---|
826 ↗ | (On Diff #32946) | Maybe setting mnt_vnodecovered to NULL would be a better solution? |
sys/kern/vfs_mount.c | ||
---|---|---|
826 ↗ | (On Diff #32946) | Fine with me. |
Comment Actions
clear mnt_vnodecovered before calling vfs_mount_destroy in case of the mount failure,
that's safe to do because the new struct mount is not visible to the outside world