diff -Naurd silo-1.4.10.orig/first-isofs/isofs.c silo-1.4.10/first-isofs/isofs.c
--- silo-1.4.10.orig/first-isofs/isofs.c	2005-12-03 03:37:05.000000000 +0100
+++ silo-1.4.10/first-isofs/isofs.c	2006-06-19 07:00:58.000000000 +0200
@@ -101,6 +101,23 @@
 	return 0;
 }
 
+static void cd_fini(void)
+{
+	switch (prom_vers) {
+	case PROM_V0:
+		romvec->pv_v0devops.v0_devclose(fd);
+		break;
+
+	case PROM_V2:
+	case PROM_V3:
+		romvec->pv_v2devops.v2_dev_close(fd);
+		break;
+
+	case PROM_P1275:
+		p1275_cmd("close", 1, fd);
+		break;
+	};
+}
 
 static int cd_read_block(unsigned long long offset, int size, void *data)
 {
@@ -445,6 +462,8 @@
 	sinfo->conf_part = 1;
 	strcpy(sinfo->conf_file, silo_conf);
 
+	cd_fini();
+
 	prom_putchar(sinfo->id);
 
 	return dest;
