vfs: fix freevnodes count update race against preemption
vdbatch_process leaves the critical section too early, openign a time window where another thread can get scheduled and modify vd->freevnodes. Once it the preempted thread gets back it overrides the value with 0. Just move critical_exit to the end of the function.
This commit is contained in:
parent
6c44a3e019
commit
6d69e665dd
@ -3324,10 +3324,10 @@ vdbatch_process(struct vdbatch *vd)
|
||||
vp->v_dbatchcpu = NOCPU;
|
||||
}
|
||||
mtx_unlock(&vnode_list_mtx);
|
||||
critical_exit();
|
||||
vd->freevnodes = 0;
|
||||
bzero(vd->tab, sizeof(vd->tab));
|
||||
vd->index = 0;
|
||||
critical_exit();
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
Reference in New Issue
Block a user