public FileSystemRef getFilesystem(FSRLRoot fsFSRL, TaskMonitor monitor)
			throws IOException, CancelledException {
		synchronized (fsInstanceManager) {
			FileSystemRef ref = fsInstanceManager.getRef(fsFSRL);
			if (ref == null) {
				if (!fsFSRL.hasContainer()) {
					throw new IOException("Bad FSRL " + fsFSRL);
				}

				ByteProvider containerByteProvider = getByteProvider(fsFSRL.getContainer(), true, monitor);
				GFileSystem fs =
					fsFactoryMgr.mountFileSystem(fsFSRL.getProtocol(), containerByteProvider, this, monitor);
				ref = fs.getRefManager().create();
				fsInstanceManager.add(fs);
			}
			return ref;
		}
	}
Returns a filesystem instance for the requested {@link FSRLRoot}, either from an already
loaded instance in the global fscache, or by instantiating the requested filesystem
from its container file (in a possibly recursive manner, depending on the depth
of the FSLR)
<p>
Never returns NULL, instead throws IOException if there is a problem.
<p>
The caller is responsible for releasing the {@link FileSystemRef}.

@param fsFSRL {@link FSRLRoot} of file system you want a reference to.
@param monitor {@link TaskMonitor} to allow the user to cancel.
@return a new {@link FileSystemRef} that the caller is responsible for closing when
no longer needed, never {@code null}.
@throws IOException if there was an io problem.
@throws CancelledException if the user cancels.
Ghidra/Features/Base/src/main/java/ghidra/formats/gfilesystem/FileSystemService.java