Skip to contentSkip to conversation

remove BKL from ieee1394_core release function

PATCH In review Dave Hansen 2 participants 2 messages Apr 5, 2002

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 remove BKL from ieee1394_core release function

I produced a similar patch for 2.5 which I discussed on the ieee1394 mailing list a few weeks ago. We decided that this was a safe and BKL-free approach. Here is a patch to do the same thing for 2.4.19-pre6.

Please forward on to Marcello.

Signature · 2 lines
Dave Hansen
[email protected]
drivers/ieee1394/ieee1394_core.c +5 -12
@@ -906,17 +906,16 @@
 
 	/* printk("ieee1394_dispatch_open(%d)", blocknum); */
 
-	/* lock the whole kernel here, to prevent a driver from
-	   being unloaded between the file_ops lookup and the open */
-
-	lock_kernel();
-
 	read_lock(&ieee1394_chardevs_lock);
-	file_ops = ieee1394_chardevs[blocknum].file_ops;
 	module = ieee1394_chardevs[blocknum].module;
+	/* bump the reference count of the driver that
+	   will receive the open() */
+	INCREF(module);
+	file_ops = ieee1394_chardevs[blocknum].file_ops;
 	read_unlock(&ieee1394_chardevs_lock);
 
 	if(file_ops == NULL) {
+		DECREF(module);
 		goto out_fail;
 	}
 
@@ -924,10 +923,6 @@
 	   own file_operations */
 	file->f_op = file_ops;
 
-	/* bump the reference count of the driver that
-	   will receive the open() */
-	INCREF(module);
-	
 	/* at this point BOTH ieee1394 and the task-specific driver have
 	   an extra reference */
 
@@ -956,7 +951,6 @@
 		   and will be dropped by the VFS when the file is
 		   released. */
 		
-		unlock_kernel();
 		return 0;
 	}
 	       
@@ -966,7 +960,6 @@
 	   function returns. */
 	
 	file->f_op = &ieee1394_chardev_ops;
-	unlock_kernel();
 	return retval;
 
 #undef INCREF
#1 lore raw
Quoted 3 lines · Dave Hansen

I produced a similar patch for 2.5 which I discussed on the ieee1394 mailing list a few weeks ago. We decided that this was a safe and BKL-free approach. Here is a patch to do the same thing for 2.4.19-pre6.

Just let me put this into the linux1394 repo, and I'll forward the patch to Marcello and Linus. Keeps me from having to track 3 sets of changes.

Signature · 3 lines
Debian     - http://www.debian.org/
Linux 1394 - http://linux1394.sourceforge.net/
Subversion - http://subversion.tigris.org/