summaryrefslogtreecommitdiff
path: root/fs/block_dev.c
diff options
context:
space:
mode:
authorAndrew Morton <akpm@osdl.org>2003-07-02 08:48:33 -0700
committerLinus Torvalds <torvalds@home.osdl.org>2003-07-02 08:48:33 -0700
commit7e6e90121ebfc0c93eb8ea1b134aacae5096308e (patch)
treeebcbcc535a4c39c4509badc601de76ef8aa343c2 /fs/block_dev.c
parente90f7e031d2e727d9dc3a8282243496b3b389c53 (diff)
[PATCH] block_llseek(): remove lock_kernel()
Replace it with the blockdev inode's i_sem. And we only really need that for atomic access to file->f_pos.
Diffstat (limited to 'fs/block_dev.c')
-rw-r--r--fs/block_dev.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/fs/block_dev.c b/fs/block_dev.c
index 52e956455310..74db58a40025 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -155,11 +155,13 @@ static int blkdev_commit_write(struct file *file, struct page *page, unsigned fr
*/
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 *file, loff_t offset, int origin)
}
retval = offset;
}
- unlock_kernel();
+ up(&bd_inode->i_sem);
return retval;
}