Commit Diff


commit - 751ff8ab61cc89cc7c351e1874720a61b865077f
commit + 9bbcb80d35f8868a90603368078f91ba56cfe0d3
blob - 8473aa34c934d17c074a05022cfd95dd7fa3ee7a
blob + ddd3d7b87d90290a7001c427c115aa53d3a28d05
--- src/libdiskfs/ext2.c
+++ src/libdiskfs/ext2.c
@@ -88,7 +88,7 @@ ext2blockread(Fsys *fsys, u64int vbno)
 	Group *g;
 	Block *gb;
 	uchar *bits;
-	u32int bno, boff;
+	u32int bno, boff, bitpos;
 	Ext2 *fs;
 
 	fs = fsys->priv;
@@ -115,11 +115,12 @@ ext2blockread(Fsys *fsys, u64int vbno)
 	if(debug)
 		fprint(2, "group %d bitblock=%d...", bno/fs->blockspergroup, g->bitblock);
 */
+	bitpos = (u64int)g->bitblock*fs->blocksize;
+	blockput(gb);
 
-	if((bitb = diskread(fs->disk, fs->blocksize, (u64int)g->bitblock*fs->blocksize)) == nil){
+	if((bitb = diskread(fs->disk, fs->blocksize, bitpos)) == nil){
 		if(debug)
 			fprint(2, "loading bitblock: %r...");
-		blockput(gb);
 		return nil;
 	}
 	bits = bitb->data;
@@ -128,9 +129,9 @@ ext2blockread(Fsys *fsys, u64int vbno)
 		if(debug)
 			fprint(2, "block %d not allocated...", bno);
 		blockput(bitb);
-		blockput(gb);
 		return nil;
 	}
+	blockput(bitb);
 
 	bno += fs->firstblock;
 	return diskread(fs->disk, fs->blocksize, (u64int)bno*fs->blocksize);