rem: AllocationGroup::Allocate(Transaction *transaction, uint16 start, int32 length)
add: AllocationBlock::Allocate(uint16 start, uint16 numBlocks)
context: AllocationGroup::Allocate(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	// Note, the fFirstFree block doesn't have to be really free	if (start == fFirstFree)		fFirstFree = start + length;	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);		uint32 numBlocks = length;		if (start + numBlocks > cached.NumBlockBits())			numBlocks = cached.NumBlockBits() - start;		cached.Allocate(start, numBlocks);		if (cached.WriteBack(transaction) < B_OK)			return B_IO_ERROR;		length -= numBlocks;		start = 0;		block++;	}	return B_OK;}