diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2016-11-05 10:22:51 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2016-11-05 10:22:51 +0000 |
commit | ebbace6eb1546c6f567dcd4384826025488231fb (patch) | |
tree | f00d95b362d471cabfa0e139949d14ebb0e08569 | |
parent | bb9258e781a391903443da9d97fcf26736afb70f (diff) |
Notes
-rw-r--r-- | sys/vm/vm_fault.c | 30 |
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) |