diff --git a/sys/dev/drm/linux_shmem.c b/sys/dev/drm/linux_shmem.c --- a/sys/dev/drm/linux_shmem.c +++ b/sys/dev/drm/linux_shmem.c @@ -53,10 +53,13 @@ if (object->type == OBJT_MGTDEVICE) { m = NULL; rv = vm_pager_get_page(object, pindex, &m, 1); - if (m == NULL) + if (m == NULL) { + VM_OBJECT_UNLOCK(object); return ERR_PTR(-ENOMEM); + } if (rv != VM_PAGER_OK) { vm_page_free(m); + VM_OBJECT_UNLOCK(object); return ERR_PTR(-ENOMEM); } } else { @@ -66,10 +69,13 @@ if (vm_pager_has_page(object, pindex)) { rv = vm_pager_get_page(object, pindex, &m, 1); m = vm_page_lookup(object, pindex); - if (m == NULL) + if (m == NULL) { + VM_OBJECT_UNLOCK(object); return ERR_PTR(-ENOMEM); + } if (rv != VM_PAGER_OK) { vm_page_free(m); + VM_OBJECT_UNLOCK(object); return ERR_PTR(-ENOMEM); } } else {