mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-07 00:50:50 +00:00
vinvalbuf: do not panic if we were unable to flush dirty buffers
Return EBUSY instead and let caller to handle the issue. For vgone()/vnode reclamation, caller first does vinvalbuf(V_SAVE), which return EBUSY in case dirty buffers where not flushed. Then caller calls vinvalbuf(0) due to non-zero return, which gets rid of all dirty buffers without dependencies. PR: 238565 Reviewed by: asomers, mckusick Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D30555
This commit is contained in:
parent
a4b07a2701
commit
27006229f7
|
@ -2032,13 +2032,11 @@ bufobj_invalbuf(struct bufobj *bo, int flags, int slpflag, int slptimeo)
|
|||
} while (error == ERELOOKUP);
|
||||
if (error != 0)
|
||||
return (error);
|
||||
/*
|
||||
* XXX We could save a lock/unlock if this was only
|
||||
* enabled under INVARIANTS
|
||||
*/
|
||||
BO_LOCK(bo);
|
||||
if (bo->bo_numoutput > 0 || bo->bo_dirty.bv_cnt > 0)
|
||||
panic("vinvalbuf: dirty bufs");
|
||||
if (bo->bo_numoutput > 0 || bo->bo_dirty.bv_cnt > 0) {
|
||||
BO_UNLOCK(bo);
|
||||
return (EBUSY);
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue