diff options
Diffstat (limited to 'fs/logfs/file.c')
| -rw-r--r-- | fs/logfs/file.c | 28 | 
1 files changed, 20 insertions, 8 deletions
diff --git a/fs/logfs/file.c b/fs/logfs/file.c index e86376b87af..8538752df2f 100644 --- a/fs/logfs/file.c +++ b/fs/logfs/file.c @@ -159,7 +159,8 @@ static int logfs_writepage(struct page *page, struct writeback_control *wbc)  	return __logfs_writepage(page);  } -static void logfs_invalidatepage(struct page *page, unsigned long offset) +static void logfs_invalidatepage(struct page *page, unsigned int offset, +				 unsigned int length)  {  	struct logfs_block *block = logfs_block(page); @@ -183,7 +184,7 @@ static int logfs_releasepage(struct page *page, gfp_t only_xfs_uses_this)  long logfs_ioctl(struct file *file, unsigned int cmd, unsigned long arg)  { -	struct inode *inode = file->f_path.dentry->d_inode; +	struct inode *inode = file_inode(file);  	struct logfs_inode *li = logfs_inode(inode);  	unsigned int oldflags, flags;  	int err; @@ -196,7 +197,7 @@ long logfs_ioctl(struct file *file, unsigned int cmd, unsigned long arg)  		if (IS_RDONLY(inode))  			return -EROFS; -		if (!is_owner_or_cap(inode)) +		if (!inode_owner_or_capable(inode))  			return -EACCES;  		err = get_user(flags, (int __user *)arg); @@ -219,11 +220,22 @@ long logfs_ioctl(struct file *file, unsigned int cmd, unsigned long arg)  	}  } -int logfs_fsync(struct file *file, int datasync) +int logfs_fsync(struct file *file, loff_t start, loff_t end, int datasync)  {  	struct super_block *sb = file->f_mapping->host->i_sb; +	struct inode *inode = file->f_mapping->host; +	int ret; + +	ret = filemap_write_and_wait_range(inode->i_mapping, start, end); +	if (ret) +		return ret; +	mutex_lock(&inode->i_mutex); +	logfs_get_wblocks(sb, NULL, WF_LOCK);  	logfs_write_anchor(sb); +	logfs_put_wblocks(sb, NULL, WF_LOCK); +	mutex_unlock(&inode->i_mutex); +  	return 0;  } @@ -252,15 +264,15 @@ const struct inode_operations logfs_reg_iops = {  };  const struct file_operations logfs_reg_fops = { -	.aio_read	= generic_file_aio_read, -	.aio_write	= generic_file_aio_write, +	.read_iter	= generic_file_read_iter, +	.write_iter	= generic_file_write_iter,  	.fsync		= logfs_fsync,  	.unlocked_ioctl	= logfs_ioctl,  	.llseek		= generic_file_llseek,  	.mmap		= generic_file_readonly_mmap,  	.open		= generic_file_open, -	.read		= do_sync_read, -	.write		= do_sync_write, +	.read		= new_sync_read, +	.write		= new_sync_write,  };  const struct address_space_operations logfs_reg_aops = {  | 
