diff options
author | kib <kib@FreeBSD.org> | 2008-05-23 16:36:39 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2008-05-23 16:36:39 +0000 |
commit | ad73989e217fc422c2aef5d60cdf23baee9b9489 (patch) | |
tree | 04729ab938094e74531d05d59bcd34ea48fb68cf /sys/fs | |
parent | bdc5be605fed4eb12994b4b1324963a5527e8bd8 (diff) | |
download | FreeBSD-src-ad73989e217fc422c2aef5d60cdf23baee9b9489.zip FreeBSD-src-ad73989e217fc422c2aef5d60cdf23baee9b9489.tar.gz |
When vget() fails (because the vnode has been reclaimed), there is no
sense to loop trying to vget() the vnode again.
PR: 122977
Submitted by: Arthur Hartwig <arthur.hartwig nokia com>
Tested by: pho
Reviewed by: jhb
MFC after: 1 week
Diffstat (limited to 'sys/fs')
-rw-r--r-- | sys/fs/devfs/devfs_vnops.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/fs/devfs/devfs_vnops.c b/sys/fs/devfs/devfs_vnops.c index 6c3f8fb..80f2dba 100644 --- a/sys/fs/devfs/devfs_vnops.c +++ b/sys/fs/devfs/devfs_vnops.c @@ -280,7 +280,6 @@ devfs_allocv(struct devfs_dirent *de, struct mount *mp, struct vnode **vpp, stru sx_xunlock(&dmp->dm_lock); return (ENOENT); } - loop: DEVFS_DE_HOLD(de); DEVFS_DMP_HOLD(dmp); mtx_lock(&devfs_de_interlock); @@ -296,8 +295,10 @@ devfs_allocv(struct devfs_dirent *de, struct mount *mp, struct vnode **vpp, stru vput(vp); return (ENOENT); } - else if (error) - goto loop; + else if (error) { + sx_xunlock(&dmp->dm_lock); + return (error); + } sx_xunlock(&dmp->dm_lock); *vpp = vp; return (0); |