summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2016-11-05 10:22:51 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2016-11-05 10:22:51 +0000
commitebbace6eb1546c6f567dcd4384826025488231fb (patch)
treef00d95b362d471cabfa0e139949d14ebb0e08569
parentbb9258e781a391903443da9d97fcf26736afb70f (diff)
Notes
-rw-r--r--sys/vm/vm_fault.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c
index f07b12767520..904839a36d33 100644
--- a/sys/vm/vm_fault.c
+++ b/sys/vm/vm_fault.c
@@ -153,6 +153,16 @@ unlock_map(struct faultstate *fs)
}
static void
+unlock_vp(struct faultstate *fs)
+{
+
+ if (fs->vp != NULL) {
+ vput(fs->vp);
+ fs->vp = NULL;
+ }
+}
+
+static void
unlock_and_deallocate(struct faultstate *fs)
{
@@ -168,11 +178,8 @@ unlock_and_deallocate(struct faultstate *fs)
fs->first_m = NULL;
}
vm_object_deallocate(fs->first_object);
- unlock_map(fs);
- if (fs->vp != NULL) {
- vput(fs->vp);
- fs->vp = NULL;
- }
+ unlock_map(fs);
+ unlock_vp(fs);
}
static void
@@ -320,8 +327,7 @@ RetryFault:;
growstack = FALSE;
goto RetryFault;
}
- if (fs.vp != NULL)
- vput(fs.vp);
+ unlock_vp(&fs);
return (result);
}
@@ -338,10 +344,7 @@ RetryFault:;
vm_map_lock(fs.map);
if (vm_map_lookup_entry(fs.map, vaddr, &fs.entry) &&
(fs.entry->eflags & MAP_ENTRY_IN_TRANSITION)) {
- if (fs.vp != NULL) {
- vput(fs.vp);
- fs.vp = NULL;
- }
+ unlock_vp(&fs);
fs.entry->eflags |= MAP_ENTRY_NEEDS_WAKEUP;
vm_map_unlock_and_wait(fs.map, 0);
} else
@@ -628,10 +631,7 @@ readrest:
vp = fs.object->handle;
if (vp == fs.vp)
goto vnode_locked;
- else if (fs.vp != NULL) {
- vput(fs.vp);
- fs.vp = NULL;
- }
+ unlock_vp(&fs);
locked = VOP_ISLOCKED(vp);
if (locked != LK_EXCLUSIVE)