summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2008-05-23 16:36:39 +0000
committerkib <kib@FreeBSD.org>2008-05-23 16:36:39 +0000
commitad73989e217fc422c2aef5d60cdf23baee9b9489 (patch)
tree04729ab938094e74531d05d59bcd34ea48fb68cf /sys
parentbdc5be605fed4eb12994b4b1324963a5527e8bd8 (diff)
downloadFreeBSD-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')
-rw-r--r--sys/fs/devfs/devfs_vnops.c7
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);
OpenPOWER on IntegriCloud