diff options
| -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; } |
