diff options
Diffstat (limited to 'fs/ext4/file.c')
| -rw-r--r-- | fs/ext4/file.c | 51 | 
1 files changed, 3 insertions, 48 deletions
| diff --git a/fs/ext4/file.c b/fs/ext4/file.c index e4095e988eba..cb70f1812a70 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c @@ -181,8 +181,8 @@ static int ext4_file_open(struct inode * inode, struct file * filp)  		path.dentry = mnt->mnt_root;  		cp = d_path(&path, buf, sizeof(buf));  		if (!IS_ERR(cp)) { -			memcpy(sbi->s_es->s_last_mounted, cp, -			       sizeof(sbi->s_es->s_last_mounted)); +			strlcpy(sbi->s_es->s_last_mounted, cp, +				sizeof(sbi->s_es->s_last_mounted));  			ext4_mark_super_dirty(sb);  		}  	} @@ -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 = { |