patch-2.4.0-test2 linux/drivers/block/z2ram.c

Next file: linux/drivers/cdrom/aztcd.c
Previous file: linux/drivers/block/xor.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test1/linux/drivers/block/z2ram.c linux/drivers/block/z2ram.c
@@ -165,12 +165,16 @@
 	sizeof( z2ram_map[0] );
     int max_chip_map = ( amiga_chip_size / Z2RAM_CHUNKSIZE ) *
 	sizeof( z2ram_map[0] );
+    int rc = -ENOMEM;
+
+    MOD_INC_USE_COUNT;
 
     device = DEVICE_NR( inode->i_rdev );
 
     if ( current_device != -1 && current_device != device )
     {
-	return -EBUSY;
+	rc = -EBUSY;
+	goto err_out;
     }
 
     if ( current_device == -1 )
@@ -188,7 +192,7 @@
 		if (index >= m68k_realnum_memory) {
 			printk( KERN_ERR DEVICE_NAME
 				": no such entry in z2ram_map\n" );
-			return -ENOMEM;
+		        goto err_out;
 		}
 
 		paddr = m68k_memory[index].addr;
@@ -215,7 +219,7 @@
 		{
 		    printk( KERN_ERR DEVICE_NAME
 			": cannot get mem for z2ram_map\n" );
-		    return -ENOMEM;
+		    goto err_out;
 		}
 
 		while (size) {
@@ -240,7 +244,7 @@
 		{
 		    printk( KERN_ERR DEVICE_NAME
 			": cannot get mem for z2ram_map\n" );
-		    return -ENOMEM;
+		    goto err_out;
 		}
 
 		get_z2ram();
@@ -261,7 +265,7 @@
 		{
 		    printk( KERN_ERR DEVICE_NAME
 			": cannot get mem for z2ram_map\n" );
-		    return -ENOMEM;
+		    goto err_out;
 		}
 
 		get_z2ram();
@@ -279,7 +283,7 @@
 		{
 		    printk( KERN_ERR DEVICE_NAME
 			": cannot get mem for z2ram_map\n" );
-		    return -ENOMEM;
+		    goto err_out;
 		}
 
 		get_chipram();
@@ -292,15 +296,17 @@
 	    break;
 
 	    default:
-		return -ENODEV;
+		rc = -ENODEV;
+		goto err_out;
+	
+	    break;
 	}
 
 	if ( z2ram_size == 0 )
 	{
-	    kfree( z2ram_map );
 	    printk( KERN_NOTICE DEVICE_NAME
 		": no unused ZII/Chip RAM found\n" );
-	    return -ENOMEM;
+	    goto err_out_kfree;
 	}
 
 	current_device = device;
@@ -309,9 +315,13 @@
 	blk_size[ MAJOR_NR ] = z2_sizes;
     }
 
-    MOD_INC_USE_COUNT;
-
     return 0;
+
+err_out_kfree:
+    kfree( z2ram_map );
+err_out:
+    MOD_DEC_USE_COUNT;
+    return rc;
 }
 
 static int

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)