rem: AllocationGroup::Free(Transaction *transaction, uint16 start, int32 length)
add: AllocationBlock::Free(uint16 start, uint16 numBlocks)
context: AllocationGroup::Free(Transaction *transaction, uint16 start, int32 length){	if (start > fNumBits)		return B_ERROR;	// Update the allocation group info	// ToDo: this info will be incorrect if something goes wrong later	if (fFirstFree > start)		fFirstFree = start;	fFreeBits += length;	Volume *volume = transaction->GetVolume();	// calculate block in the block bitmap and position within	uint32 bitsPerBlock = volume->BlockSize() << 3;	uint32 block = start / bitsPerBlock;	start = start % bitsPerBlock;	AllocationBlock cached(volume);	while (length > 0) {		if (cached.SetTo(*this, block) < B_OK)			RETURN_ERROR(B_IO_ERROR);		uint16 freeLength = length;		if (uint32(start + length) > cached.NumBlockBits())			freeLength = cached.NumBlockBits() - start;		cached.Free(start, freeLength);		if (cached.WriteBack(transaction) < B_OK)			return B_IO_ERROR;		length -= freeLength;		start = 0;		block++;	}	return B_OK;}