DragonFlyBSD Kernel Audit
DF-0819 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/vfs/hammer/hammer_blockmap.c b/sys/vfs/hammer/hammer_blockmap.c
--- a/sys/vfs/hammer/hammer_blockmap.c
+++ b/sys/vfs/hammer/hammer_blockmap.c
@@ -374,6 +374,7 @@
 				errorp, &buffer3);
 		if (*errorp) {
 			result_offset = 0;
+			hammer_unlock(&hmp->blkmap_lock);
 			goto failed;
 		}
 	}
@@ -602,8 +603,10 @@
 	if (bytes < HAMMER_BUFSIZE && (next_offset & HAMMER_BUFMASK) == 0) {
 		if (!vm_paging_min_dnc(HAMMER_BUFSIZE / PAGE_SIZE)) {
 			hammer_bnew(hmp, next_offset, errorp, &buffer3);
-			if (*errorp)
+			if (*errorp) {
+				hammer_unlock(&hmp->blkmap_lock);
 				goto failed;
+			}
 		}
 	}