提交 a238b790 编写于 作者: J Jonathan Corbet

Call fasync() functions without the BKL

lock_kernel() calls have been pushed down into code which needs it, so
there is no need to take the BKL at this level anymore.

This work inspired and aided by Andi Kleen's unlocked_fasync() patches.
Acked-by: NAndi Kleen <ak@linux.intel.com>
Signed-off-by: NJonathan Corbet <corbet@lwn.net>
上级 2db9f0a3
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include <linux/fdtable.h> #include <linux/fdtable.h>
#include <linux/capability.h> #include <linux/capability.h>
#include <linux/dnotify.h> #include <linux/dnotify.h>
#include <linux/smp_lock.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/security.h> #include <linux/security.h>
...@@ -227,7 +226,6 @@ static int setfl(int fd, struct file * filp, unsigned long arg) ...@@ -227,7 +226,6 @@ static int setfl(int fd, struct file * filp, unsigned long arg)
if (error) if (error)
return error; return error;
lock_kernel();
if ((arg ^ filp->f_flags) & FASYNC) { if ((arg ^ filp->f_flags) & FASYNC) {
if (filp->f_op && filp->f_op->fasync) { if (filp->f_op && filp->f_op->fasync) {
error = filp->f_op->fasync(fd, filp, (arg & FASYNC) != 0); error = filp->f_op->fasync(fd, filp, (arg & FASYNC) != 0);
...@@ -238,7 +236,6 @@ static int setfl(int fd, struct file * filp, unsigned long arg) ...@@ -238,7 +236,6 @@ static int setfl(int fd, struct file * filp, unsigned long arg)
filp->f_flags = (arg & SETFL_MASK) | (filp->f_flags & ~SETFL_MASK); filp->f_flags = (arg & SETFL_MASK) | (filp->f_flags & ~SETFL_MASK);
out: out:
unlock_kernel();
return error; return error;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册