add: if (partition->IsFileSystem()) continue;
context: mount_file_systems(stage2_args *args){	// mount other partitions on boot device (if any)	NodeIterator iterator = gPartitions.Iterator();	Partition *partition = NULL;	while ((partition = (Partition *)iterator.Next()) != NULL) {		// remove the partition if it doesn't contain a (known) file system		if (partition->Scan(true) != B_OK && !partition->IsFileSystem()) {			gPartitions.Remove(partition);			delete partition;		}	}	// add all block devices the platform has for us	status_t status = platform_add_block_devices(args, &gBootDevices);	if (status < B_OK)		return status;	iterator = gBootDevices.Iterator();	Node *device = NULL, *last = NULL;	while ((device = iterator.Next()) != NULL) {		// don't scan former boot device again		if (device == sBootDevice)			continue;		if (add_partitions_for(device, true) == B_OK) {			// ToDo: we can't delete the object here, because it must			//	be removed from the list before we know that it was			//	deleted./*			// if the Release() deletes the object, we need to skip it			if (device->Release() > 0) {				list_remove_item(&gBootDevices, device);				device = last;			}*/		}		last = device;	}	if (gPartitions.IsEmpty())		return B_ENTRY_NOT_FOUND;	void *cookie;	if (gRoot->Open(&cookie, O_RDONLY) == B_OK) {		Directory *directory;		while (gRoot->GetNextNode(cookie, (Node **)&directory) == B_OK) {			char name[256];			if (directory->GetName(name, sizeof(name)) == B_OK)				printf(":: %s (%p)\n", name, directory);			void *subCookie;			if (directory->Open(&subCookie, O_RDONLY) == B_OK) {				while (directory->GetNextEntry(subCookie, name, sizeof(name)) == B_OK) {					printf("\t%s\n", name);				}				directory->Close(subCookie);			}		}		gRoot->Close(cookie);	}	return B_OK;}