lkml.org 
[lkml]   [2002]   [Apr]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH] 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.

--
Dave Hansen
haveblue@us.ibm.com
--- linux-2.4.19-pre6-clean/drivers/ieee1394/ieee1394_core.c Fri Apr 5 09:37:37 2002
+++ linux/drivers/ieee1394/ieee1394_core.c Fri Apr 5 10:51:46 2002
@@ -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
\
 
 \ /
  Last update: 2005-03-22 13:25    [W:0.047 / U:0.244 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site