summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/file.c
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2011-10-07 23:07:41 +0200
committerArnd Bergmann <arnd@arndb.de>2011-10-07 23:07:41 +0200
commit8efc59ad6764ade520012cb192cd484e5191cd9c (patch)
treed2465d91ebb2652e35cd08f715fc202b3f9e042a /fs/btrfs/file.c
parent6f6184a9d01880a3e21349544f73b3720ce5e152 (diff)
parent492c4a0df11573e141a2decc6012b3bddd14a11e (diff)
Merge branch 'sirf/cleanup' into next/cleanup
Diffstat (limited to 'fs/btrfs/file.c')
-rw-r--r--fs/btrfs/file.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 3c3abff731a..a381cd22f51 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -1817,6 +1817,11 @@ static loff_t btrfs_file_llseek(struct file *file, loff_t offset, int origin)
goto out;
case SEEK_DATA:
case SEEK_HOLE:
+ if (offset >= i_size_read(inode)) {
+ mutex_unlock(&inode->i_mutex);
+ return -ENXIO;
+ }
+
ret = find_desired_extent(inode, &offset, origin);
if (ret) {
mutex_unlock(&inode->i_mutex);
@@ -1825,11 +1830,11 @@ static loff_t btrfs_file_llseek(struct file *file, loff_t offset, int origin)
}
if (offset < 0 && !(file->f_mode & FMODE_UNSIGNED_OFFSET)) {
- ret = -EINVAL;
+ offset = -EINVAL;
goto out;
}
if (offset > inode->i_sb->s_maxbytes) {
- ret = -EINVAL;
+ offset = -EINVAL;
goto out;
}