Messages in this thread Patch in this message | | | Date | Fri, 05 Apr 2002 11:11:28 -0800 | From | Dave Hansen <> | 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 | |