ffs_update(): Do not assume that EBUSY can only come LK_NOWAIT trylock
Instead do protective check for the local flags and do not interpret EBUSY specially if we did not request trylock mode for bread(). Reviewed by: mckusick Reported and tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week
This commit is contained in:
parent
f822d4feb8
commit
bb536de6c0
@ -153,9 +153,14 @@ ffs_update(vp, waitfor)
|
||||
error = ffs_breadz(VFSTOUFS(vp->v_mount), ITODEVVP(ip), bn, bn,
|
||||
(int) fs->fs_bsize, NULL, NULL, 0, NOCRED, flags, NULL, &bp);
|
||||
if (error != 0) {
|
||||
if (error != EBUSY)
|
||||
/*
|
||||
* If EBUSY was returned without GB_LOCK_NOWAIT (which
|
||||
* requests trylock for buffer lock), it is for some
|
||||
* other reason and we should not handle it specially.
|
||||
*/
|
||||
if (error != EBUSY || (flags & GB_LOCK_NOWAIT) == 0)
|
||||
return (error);
|
||||
KASSERT((IS_SNAPSHOT(ip)), ("EBUSY from non-snapshot"));
|
||||
|
||||
/*
|
||||
* Wait for our inode block to become available.
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user