diff options
author | Roel Kluin <roel.kluin@gmail.com> | 2011-12-13 10:37:00 +0100 |
---|---|---|
committer | Miklos Szeredi <mszeredi@suse.cz> | 2011-12-13 10:37:00 +0100 |
commit | b48c6af2086ab2ba8a9c9b6ce9ecb34592ce500c (patch) | |
tree | 674ca20427f0a77a8f3e332302983e97c30a9f2a /fs | |
parent | 48706d0a91583d08c56e7ef2a7602d99c8d4133f (diff) | |
download | op-kernel-dev-b48c6af2086ab2ba8a9c9b6ce9ecb34592ce500c.zip op-kernel-dev-b48c6af2086ab2ba8a9c9b6ce9ecb34592ce500c.tar.gz |
fuse: fix llseek bug
The test in fuse_file_llseek() "not SEEK_CUR or not SEEK_SET" always evaluates
to true.
This was introduced in 3.1 by commit 06222e49 (fs: handle SEEK_HOLE/SEEK_DATA
properly in all fs's that define their own llseek) and changed the behavior of
SEEK_CUR and SEEK_SET to always retrieve the file attributes. This is a
performance regression.
Fix the test so that it makes sense.
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
CC: stable@vger.kernel.org
CC: Josef Bacik <josef@redhat.com>
CC: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/fuse/file.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/fuse/file.c b/fs/fuse/file.c index 594f07a..19029e9 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c @@ -1556,7 +1556,7 @@ static loff_t fuse_file_llseek(struct file *file, loff_t offset, int origin) struct inode *inode = file->f_path.dentry->d_inode; mutex_lock(&inode->i_mutex); - if (origin != SEEK_CUR || origin != SEEK_SET) { + if (origin != SEEK_CUR && origin != SEEK_SET) { retval = fuse_update_attributes(inode, NULL, file, NULL); if (retval) goto exit; |