2002-04-05 19:13:13

by Dave Hansen

[permalink] [raw]
Subject: [PATCH] remove BKL from ieee1394_core release function

--- 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


Attachments:
ieee1394_core-bkl_remove-2.4.19-pre6.patch (1.30 kB)

2002-04-05 20:12:54

by Ben Collins

[permalink] [raw]
Subject: Re: [PATCH] remove BKL from ieee1394_core release function

On Fri, Apr 05, 2002 at 11:11:28AM -0800, Dave Hansen wrote:
> 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.

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