Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4cce0e28 authored by Andi Kleen's avatar Andi Kleen Committed by root
Browse files

ext4: replace cut'n'pasted llseek code with generic_file_llseek_size



This gives ext4 the benefits of unlocked llseek.

Cc: tytso@mit.edu
Signed-off-by: default avatarAndi Kleen <ak@linux.intel.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent 5760495a
Loading
Loading
Loading
Loading
+1 −46
Original line number Diff line number Diff line
@@ -224,53 +224,8 @@ loff_t ext4_llseek(struct file *file, loff_t offset, int origin)
		maxbytes = EXT4_SB(inode->i_sb)->s_bitmap_maxbytes;
	else
		maxbytes = inode->i_sb->s_maxbytes;
	mutex_lock(&inode->i_mutex);
	switch (origin) {
	case SEEK_END:
		offset += inode->i_size;
		break;
	case SEEK_CUR:
		if (offset == 0) {
			mutex_unlock(&inode->i_mutex);
			return file->f_pos;
		}
		offset += file->f_pos;
		break;
	case SEEK_DATA:
		/*
		 * In the generic case the entire file is data, so as long as
		 * offset isn't at the end of the file then the offset is data.
		 */
		if (offset >= inode->i_size) {
			mutex_unlock(&inode->i_mutex);
			return -ENXIO;
		}
		break;
	case SEEK_HOLE:
		/*
		 * There is a virtual hole at the end of the file, so as long as
		 * offset isn't i_size or larger, return i_size.
		 */
		if (offset >= inode->i_size) {
			mutex_unlock(&inode->i_mutex);
			return -ENXIO;
		}
		offset = inode->i_size;
		break;
	}

	if (offset < 0 || offset > maxbytes) {
		mutex_unlock(&inode->i_mutex);
		return -EINVAL;
	}

	if (offset != file->f_pos) {
		file->f_pos = offset;
		file->f_version = 0;
	}
	mutex_unlock(&inode->i_mutex);

	return offset;
	return generic_file_llseek_size(file, offset, origin, maxbytes);
}

const struct file_operations ext4_file_operations = {