diff options
| author | Andrew Morton <akpm@osdl.org> | 2003-07-02 08:48:33 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.osdl.org> | 2003-07-02 08:48:33 -0700 |
| commit | 7e6e90121ebfc0c93eb8ea1b134aacae5096308e (patch) | |
| tree | ebcbcc535a4c39c4509badc601de76ef8aa343c2 /fs/block_dev.c | |
| parent | e90f7e031d2e727d9dc3a8282243496b3b389c53 (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.c | 10 |
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; } |
