diff -rup linux-2.6.10-original/fs/read_write.c linux-2.6.10-light/fs/read_write.c --- linux-2.6.10-original/fs/read_write.c 2004-12-24 16:35:00.000000000 -0500 +++ linux-2.6.10-light/fs/read_write.c 2005-02-08 20:23:21.000000000 -0500 @@ -27,6 +27,27 @@ struct file_operations generic_ro_fops = EXPORT_SYMBOL(generic_ro_fops); +loff_t generic_file_llseek_light(struct file *file, loff_t offset, int origin) +{ + long long retval = -EINVAL; + struct inode *inode = file->f_mapping->host; + + switch (origin) { + case 2: + offset += i_size_read(inode); + break; + case 1: + offset += file->f_pos; + } + if (offset>=0 && offset<=inode->i_sb->s_maxbytes) { + file->f_pos = offset; + retval = offset; + } + return retval; +} + +EXPORT_SYMBOL(generic_file_llseek_light); + loff_t generic_file_llseek(struct file *file, loff_t offset, int origin) { long long retval; diff -rup linux-2.6.10-original/include/linux/fs.h linux-2.6.10-light/include/linux/fs.h --- linux-2.6.10-original/include/linux/fs.h 2004-12-24 16:34:27.000000000 -0500 +++ linux-2.6.10-light/include/linux/fs.h 2005-02-08 20:23:54.000000000 -0500 @@ -1473,6 +1473,7 @@ extern ssize_t generic_file_readv(struct ssize_t generic_file_writev(struct file *filp, const struct iovec *iov, unsigned long nr_segs, loff_t *ppos); extern loff_t no_llseek(struct file *file, loff_t offset, int origin); +extern loff_t generic_file_llseek_light(struct file *file, loff_t offset, int origin); extern loff_t generic_file_llseek(struct file *file, loff_t offset, int origin); extern loff_t remote_llseek(struct file *file, loff_t offset, int origin); extern int generic_file_open(struct inode * inode, struct file * filp); diff -rup linux-2.6.10-original/fs/ext2/file.c linux-2.6.10-light/fs/ext2/file.c --- linux-2.6.10-original/fs/ext2/file.c 2004-12-24 16:34:31.000000000 -0500 +++ linux-2.6.10-light/fs/ext2/file.c 2005-02-08 20:28:05.000000000 -0500 @@ -40,7 +40,7 @@ static int ext2_release_file (struct ino * the ext2 filesystem. */ struct file_operations ext2_file_operations = { - .llseek = generic_file_llseek, + .llseek = generic_file_llseek_light, .read = generic_file_read, .write = generic_file_write, .aio_read = generic_file_aio_read, diff -rup linux-2.6.10-original/fs/ext3/file.c linux-2.6.10-light/fs/ext3/file.c --- linux-2.6.10-original/fs/ext3/file.c 2004-12-24 16:35:39.000000000 -0500 +++ linux-2.6.10-light/fs/ext3/file.c 2005-02-08 20:28:18.000000000 -0500 @@ -116,7 +116,7 @@ force_commit: } struct file_operations ext3_file_operations = { - .llseek = generic_file_llseek, + .llseek = generic_file_llseek_light, .read = do_sync_read, .write = do_sync_write, .aio_read = generic_file_aio_read,