patch-2.4.0-test3 linux/arch/ia64/ia32/sys_ia32.c

Next file: linux/arch/ia64/kernel/process.c
Previous file: linux/arch/ia64/config.in
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test2/linux/arch/ia64/ia32/sys_ia32.c linux/arch/ia64/ia32/sys_ia32.c
@@ -111,12 +111,10 @@
 	 *  `munmap' if the `execve' failes.
 	 */
 	down(&current->mm->mmap_sem);
-	lock_kernel();
 
 	av = (char **) do_mmap_pgoff(0, 0UL, len, PROT_READ | PROT_WRITE,
 				     MAP_PRIVATE | MAP_ANONYMOUS, 0);
 
-	unlock_kernel();
 	up(&current->mm->mmap_sem);
 
 	if (IS_ERR(av))
@@ -258,11 +256,15 @@
 		return -EINVAL;
 	if (!file->f_op->read)
 		return -EINVAL;
+	lock_kernel();
 	if (file->f_op->llseek) {
-		if (file->f_op->llseek(file,off,0) != off)
+		if (file->f_op->llseek(file,off,0) != off) {
+			unlock_kernel();
 			return -EINVAL;
+		}
 	} else
 		file->f_pos = off;
+	unlock_kernel();
 	r = file->f_op->read(file, (char *)addr, len, &file->f_pos);
 	return (r < 0) ? -EINVAL : addr;
 }
@@ -292,7 +294,6 @@
 	if (copy_from_user(&a, arg, sizeof(a)))
 		return -EFAULT;
 
-	lock_kernel();
 	if (!(a.flags & MAP_ANONYMOUS)) {
 		error = -EBADF;
 		file = fget(a.fd);
@@ -302,9 +303,7 @@
 	a.flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
 
 	if ((a.flags & MAP_FIXED) && ((a.addr & ~PAGE_MASK) || (a.offset & ~PAGE_MASK))) {
-		unlock_kernel();
 		error = do_mmap_fake(file, a.addr, a.len, a.prot, a.flags, a.offset);
-		lock_kernel();
 	} else {
 		down(&current->mm->mmap_sem);
 		error = do_mmap(file, a.addr, a.len, a.prot, a.flags, a.offset);
@@ -313,7 +312,6 @@
 	if (file)
 		fput(file);
 out:
-	unlock_kernel();
 	return error;
 }
 
@@ -323,14 +321,12 @@
 	int retval;
 	int fds[2];
 
-	lock_kernel();
 	retval = do_pipe(fds);
 	if (retval)
 		goto out;
 	if (copy_to_user(fd, fds, sizeof(fds)))
 		retval = -EFAULT;
   out:
-	unlock_kernel();
 	return retval;
 }
 
@@ -712,7 +708,6 @@
 	buf.count = count;
 	buf.error = 0;
 
-	lock_kernel();
 	error = vfs_readdir(file, filldir32, &buf);
 	if (error < 0)
 		goto out_putf;
@@ -724,7 +719,6 @@
 	}
 
 out_putf:
-	unlock_kernel();
 	fput(file);
 out:
 	return error;
@@ -763,12 +757,9 @@
 	buf.count = 0;
 	buf.dirent = dirent;
 
-	lock_kernel();
 	error = vfs_readdir(file, fillonedir32, &buf);
 	if (error >= 0)
 		error = buf.count;
-	unlock_kernel();
-
 	fput(file);
 out:
 	return error;
@@ -1032,7 +1023,6 @@
 	struct file *file;
 	long ret = -EBADF;
 
-	lock_kernel();
 	file = fget(fd);
 	if(!file)
 		goto bad_file;
@@ -1045,7 +1035,6 @@
 out:
 	fput(file);
 bad_file:
-	unlock_kernel();
 	return ret;
 }
 
@@ -1055,7 +1044,6 @@
 	struct file *file;
 	int ret = -EBADF;
 
-	lock_kernel();
 	file = fget(fd);
 	if(!file)
 		goto bad_file;
@@ -1070,7 +1058,6 @@
 out:
 	fput(file);
 bad_file:
-	unlock_kernel();
 	return ret;
 }
 
@@ -1856,7 +1843,6 @@
 {
 	int version, err;
 
-	lock_kernel();
 	version = call >> 16; /* hack for backward compatibility */
 	call &= 0xffff;
 
@@ -1908,7 +1894,6 @@
 		break;
 	}
 
-	unlock_kernel();
 	return err;
 }
 
@@ -3723,7 +3708,6 @@
 	}
 	kern_msg.msg_flags = user_flags;
 
-	lock_kernel();
 	sock = sockfd_lookup(fd, &err);
 	if (sock != NULL) {
 		if (sock->file->f_flags & O_NONBLOCK)
@@ -3731,7 +3715,6 @@
 		err = sock_sendmsg(sock, &kern_msg, total_len);
 		sockfd_put(sock);
 	}
-	unlock_kernel();
 
 	/* N.B. Use kfree here, as kern_msg.msg_controllen might change? */
 	if(ctl_buf != ctl)
@@ -3771,7 +3754,6 @@
 	cmsg_ptr = (unsigned long) kern_msg.msg_control;
 	kern_msg.msg_flags = 0;
 
-	lock_kernel();
 	sock = sockfd_lookup(fd, &err);
 	if (sock != NULL) {
 		struct scm_cookie scm;
@@ -3779,6 +3761,7 @@
 		if (sock->file->f_flags & O_NONBLOCK)
 			user_flags |= MSG_DONTWAIT;
 		memset(&scm, 0, sizeof(scm));
+		lock_kernel();
 		err = sock->ops->recvmsg(sock, &kern_msg, total_len,
 					 user_flags, &scm);
 		if(err >= 0) {
@@ -3809,9 +3792,9 @@
 					scm_detach_fds32(&kern_msg, &scm);
 			}
 		}
+		unlock_kernel();
 		sockfd_put(sock);
 	}
-	unlock_kernel();
 
 	if(uaddr != NULL && err >= 0)
 		err = move_addr_to_user(addr, kern_msg.msg_namelen, uaddr,
@@ -4711,11 +4694,9 @@
 sys32_personality(unsigned long personality)
 {
 	int ret;
-	lock_kernel();
 	if (current->personality == PER_LINUX32 && personality == PER_LINUX)
 		personality = PER_LINUX32;
 	ret = sys_personality(personality);
-	unlock_kernel();
 	if (ret == PER_LINUX32)
 		ret = PER_LINUX;
 	return ret;

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)