indirectFree( blockNr, blockOffset, indirectionLevel-1);  if(offset==0) {   fs.freeBlock( dataBlockNr ); long block512 = fs.getBlockSize()/512; setBlocks( getBlocks()-block512 ); } }
long blockIndex = offset / (long) Math.pow(getIndirectCount(), indirectionLevel - 1); long blockOffset = offset % (long) Math.pow(getIndirectCount(), indirectionLevel - 1); long blockNr = Ext2Utils.get32(data, (int) blockIndex * 4);  indirectFree(blockNr, blockOffset, indirectionLevel - 1);  if (offset == 0) {    fs.freeBlock(dataBlockNr); long block512 = fs.getBlockSize() / 512; setBlocks(getBlocks() - block512); } }
	private final void indirectFree(long dataBlockNr, long offset, int indirectionLevel)		throws IOException, FileSystemException {			log.debug("indirectFree(datablockNr="+dataBlockNr+", offset="+offset+", ind="+indirectionLevel+")"); 			if(indirectionLevel==0) {				fs.freeBlock( dataBlockNr );				return;			}			byte[] data = fs.getBlock( dataBlockNr );								long blockIndex = offset / (long)Math.pow(getIndirectCount(), indirectionLevel-1);			long blockOffset= offset % (long)Math.pow(getIndirectCount(), indirectionLevel-1);			long blockNr = Ext2Utils.get32(data, (int)blockIndex*4);			indirectFree( blockNr, blockOffset, indirectionLevel-1);						if(offset==0) {				//block blockNr has been the last block pointer on the indirect block,				//so the indirect block can be freed up as well				fs.freeBlock( dataBlockNr );				long block512 = fs.getBlockSize()/512;				setBlocks( getBlocks()-block512 );			}	}