--- linux/fs/read_write.c	Fri Nov  5 17:57:30 1999
+++ work/fs/read_write.c	Wed Dec 15 20:18:34 1999
@@ -39,11 +39,15 @@
 static inline loff_t llseek(struct file *file, loff_t offset, int origin)
 {
 	loff_t (*fn)(struct file *, loff_t, int);
+	loff_t retval;
 
 	fn = default_llseek;
 	if (file->f_op && file->f_op->llseek)
 		fn = file->f_op->llseek;
-	return fn(file, offset, origin);
+	lock_kernel();
+	retval = fn(file, offset, origin);
+	unlock_kernel();
+	return retval;
 }
 
 asmlinkage off_t sys_lseek(unsigned int fd, off_t offset, unsigned int origin)
@@ -53,7 +57,6 @@
 	struct dentry * dentry;
 	struct inode * inode;
 
-	lock_kernel();
 	retval = -EBADF;
 	file = fget(fd);
 	if (!file)
@@ -72,7 +75,6 @@
 out_putf:
 	fput(file);
 bad:
-	unlock_kernel();
 	return retval;
 }
 
@@ -87,7 +89,6 @@
 	struct inode * inode;
 	loff_t offset;
 
-	lock_kernel();
 	retval = -EBADF;
 	file = fget(fd);
 	if (!file)
@@ -112,7 +113,6 @@
 out_putf:
 	fput(file);
 bad:
-	unlock_kernel();
 	return retval;
 }
 #endif
@@ -312,8 +312,6 @@
 	struct file * file;
 	ssize_t (*read)(struct file *, char *, size_t, loff_t *);
 
-	lock_kernel();
-
 	ret = -EBADF;
 	file = fget(fd);
 	if (!file)
@@ -333,7 +331,6 @@
 out:
 	fput(file);
 bad_file:
-	unlock_kernel();
 	return ret;
 }
 
@@ -344,8 +341,6 @@
 	struct file * file;
 	ssize_t (*write)(struct file *, const char *, size_t, loff_t *);
 
-	lock_kernel();
-
 	ret = -EBADF;
 	file = fget(fd);
 	if (!file)
@@ -366,6 +361,5 @@
 out:
 	fput(file);
 bad_file:
-	unlock_kernel();
 	return ret;
 }
--- linux/fs/buffer.c	Thu Dec  9 21:10:18 1999
+++ work/fs/buffer.c	Wed Dec 15 20:19:51 1999
@@ -345,7 +345,6 @@
 	struct inode * inode;
 	int err;
 
-	lock_kernel();
 	err = -EBADF;
 	file = fget(fd);
 	if (!file)
@@ -365,13 +364,14 @@
 
 	/* We need to protect against concurrent writers.. */
 	down(&inode->i_sem);
+	lock_kernel();
 	err = file->f_op->fsync(file, dentry);
+	unlock_kernel();
 	up(&inode->i_sem);
 
 out_putf:
 	fput(file);
 out:
-	unlock_kernel();
 	return err;
 }
 
