Эх сурвалжийг харах

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: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Jonathan Corbet 17 жил өмнө
parent
commit
a238b790d5
1 өөрчлөгдсөн 0 нэмэгдсэн , 3 устгасан
  1. 0 3
      fs/fcntl.c

+ 0 - 3
fs/fcntl.c

@@ -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)
 	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)
 
 
 	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;
 }
 }