rem: int32 block = start >> 5;
add: AllocationBlock cached(volume);
context: AllocationBlock::Free(uint16 start, uint16 numBlocks){	start = start % fNumBits;	if (numBlocks == 0xffff) {		// free all blocks after "start"		numBlocks = fNumBits - start;	} else if (start + numBlocks > fNumBits) {		FATAL(("Allocation::Free(): tried to free too many blocks: %u (numBlocks = %u)!\n", numBlocks, fNumBits));		DEBUGGER(("Allocation::Free(): tried to free too many blocks"));		numBlocks = fNumBits - start;	}	int32 block = start >> 5;	while (numBlocks > 0) {		uint32 mask = 0;		for (int32 i = start % 32; i < 32 && numBlocks; i++, numBlocks--)			mask |= 1UL << (i % 32);		Block(block++) &= ~mask;		start = 0;	}}