HomeFreeBSD

vfs: fix device count leak on vrele racing with vgone

Description

vfs: fix device count leak on vrele racing with vgone

The race is:

CPU1 CPU2

devfs_reclaim_vchr

make v_usecount 0

VI_LOCK
sees v_usecount == 0, no updates
vp->v_rdev = NULL;
...
VI_UNLOCK

VI_LOCK
v_decr_devcount

sees v_rdev == NULL, no updates

In this scenario si_devcount decrement is not performed.

Note this can only happen if the vnode lock is not held.

Reviewed by: kib
Tested by: pho
Differential Revision: https://reviews.freebsd.org/D23529

Details