fix args
diff --git a/src/libdiskfs/part.c b/src/libdiskfs/part.c
index d156457..5d44747 100644
--- a/src/libdiskfs/part.c
+++ b/src/libdiskfs/part.c
@@ -28,7 +28,9 @@
 {
 	DiskPart *d = (DiskPart*)dd;
 	
-	return disksync(d->subdisk);
+	if(d->subdisk)
+		return disksync(d->subdisk);
+	return 0;
 }
 
 static void
@@ -36,12 +38,13 @@
 {
 	DiskPart *d = (DiskPart*)dd;
 	
-	diskclose(d->subdisk);
+	if(d->subdisk)
+		diskclose(d->subdisk);
 	free(d);
 }
 
 Disk*
-diskpart(Disk *subdisk, u64int size, u64int offset)
+diskpart(Disk *subdisk, u64int offset, u64int size)
 {
 	DiskPart *d;
 	
@@ -58,3 +61,11 @@
 	
 	return &d->disk;
 }
+
+void
+diskpartabandon(Disk *d)
+{
+	if(d->_read != diskpartread)
+		abort();
+	d->subdisk = nil;
+}