

Replace it with the blockdev inode's i_sem.  And we only really need that for
atomic access to file->f_pos.


 fs/block_dev.c |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diff -puN fs/block_dev.c~block_llseek-no-lock_kernel fs/block_dev.c
--- 25/fs/block_dev.c~block_llseek-no-lock_kernel	2003-06-28 02:18:23.000000000 -0700
+++ 25-akpm/fs/block_dev.c	2003-06-28 02:21:58.000000000 -0700
@@ -155,11 +155,13 @@ static int blkdev_commit_write(struct fi
  */
 static loff_t block_llseek(struct file *file, loff_t offset, int origin)
 {
-	/* ewww */
-	loff_t size = file->f_dentry->d_inode->i_bdev->bd_inode->i_size;
+	struct inode *bd_inode;
+	loff_t size;
 	loff_t retval;
 
-	lock_kernel();
+	bd_inode = file->f_dentry->d_inode->i_bdev->bd_inode;
+	down(&bd_inode->i_sem);
+	size = bd_inode->i_size;
 
 	switch (origin) {
 		case 2:
@@ -175,7 +177,7 @@ static loff_t block_llseek(struct file *
 		}
 		retval = offset;
 	}
-	unlock_kernel();
+	up(&bd_inode->i_sem);
 	return retval;
 }
 	

_
