private void createInodeTables(Program program, BinaryReader reader, Ext4SuperBlock superBlock,
			Ext4GroupDescriptor[] groupDescriptors, boolean is64Bit, TaskMonitor monitor)
			throws DuplicateNameException, Exception {

		int inodeCount = superBlock.getS_inodes_count();
		Ext4Inode[] inodes = new Ext4Inode[inodeCount];
		int inodeIndex = 0;

		for (int i = 0; i < groupDescriptors.length; i++) {
			monitor.checkCancelled();
			long inodeTableBlockOffset = groupDescriptors[i].getBg_inode_table_lo() & 0xffffffffL;
			if (is64Bit) {
				inodeTableBlockOffset =
					(((long) groupDescriptors[i].getBg_inode_table_hi()) << 32) |
						inodeTableBlockOffset;
			}
			long offset = inodeTableBlockOffset * blockSize;
			reader.setPointerIndex(offset);
			Address address = null;
			try {
				address = toAddr(program, offset);
			}
			catch (Exception e) {
				throw new IOException("offset " + offset + " not in program.");
			}

			int inodesPerGroup = superBlock.getS_inodes_per_group();
			monitor.setMessage(
				"Creating inode table " + i + " of " + (groupDescriptors.length - 1) + "...");
			monitor.setMaximum(inodesPerGroup);
			monitor.setProgress(0);
			for (int j = 0; j < inodesPerGroup; j++) {
				monitor.checkCancelled();

				Ext4Inode inode = new Ext4Inode(reader);
				DataType dataType = inode.toDataType();
				createData(program, address, dataType);

				String comment = "Inode: 0x" + Integer.toHexString(inodeIndex + 1) + "\n";
				comment += "Group Descriptor ID: 0x" + Integer.toHexString(i) + "\n";
				comment += "Inode Offset Into Group: 0x" + Integer.toHexString(j) + "\n";

//				Ext4IBlock iBlock = inode.getI_block( );
//				if ( iBlock != null ) {
//					for ( Ext4Extent extent : iBlock.getExtentEntries( ) ) {
//						monitor.checkCanceled( );
//						long destination = extent.getExtentStartBlockNumber() * blockSize;
//						comment += "Extent: 0x" + Long.toHexString( destination ) + "\n";
//					}
//				}

				setPlateComment(program, address, comment);
				createLabel(program, address,
					"INODE_" + "0x" + Integer.toHexString(inodeIndex + 1));
				address = address.add(superBlock.getS_inode_size());
				reader.setPointerIndex(address.getOffset());
				monitor.incrementProgress(1);
				inodes[inodeIndex++] = inode; //inodes[ inodesPerGroup * i + j ] = inode;
			}
		}

		processInodes(program, reader, superBlock, inodes, monitor);
	}
This method allows for EXT4 files larger than 2GB to be imported as 2 (or 3) separate programs.
Then if both programs are opened (and have the same base name), then both will be analyzed.
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ext4/NewExt4Analyzer.java