On Sun, Jun 03, 2018 at 10:37:30AM -0700, Philip Guenther wrote:
> @@ -1602,7 +1607,7 @@ vfs_stall(struct proc *p, int stall)
> */
> TAILQ_FOREACH_REVERSE(mp, &mountlist, mntlist, mnt_list) {
> if (stall) {
> - error = vfs_busy(mp, VB_WRITE|VB_WAIT);
> + error = vfs_busy(mp, VB_WRITE|VB_WAIT|VB_DUPOK);
> if (error) {
> printf("%s: busy\n", mp->mnt_stat.f_mntonname);
> allerror = error;
dounmount() does the vfs busy in the forward direction of the mnt_list.
while ((mp = TAILQ_NEXT(mp, mnt_list)) != NULL) {
error = vfs_busy(mp, VB_WRITE|VB_WAIT);
Then it unmounts all nested mount points in the reverse direction.
So I think we should remove the _REVERSE in vfs_stall().
bluhm