diff options
Diffstat (limited to 'fs/udf/inode.c')
| -rw-r--r-- | fs/udf/inode.c | 15 | 
1 files changed, 8 insertions, 7 deletions
diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 062b7925bca..236cd48184c 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -146,8 +146,8 @@ void udf_evict_inode(struct inode *inode)  		want_delete = 1;  		udf_setsize(inode, 0);  		udf_update_inode(inode, IS_SYNC(inode)); -	} else -		truncate_inode_pages(&inode->i_data, 0); +	} +	truncate_inode_pages_final(&inode->i_data);  	invalidate_inode_buffers(inode);  	clear_inode(inode);  	if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB && @@ -217,18 +217,18 @@ static int udf_write_begin(struct file *file, struct address_space *mapping,  }  static ssize_t udf_direct_IO(int rw, struct kiocb *iocb, -			     const struct iovec *iov, -			     loff_t offset, unsigned long nr_segs) +			     struct iov_iter *iter, +			     loff_t offset)  {  	struct file *file = iocb->ki_filp;  	struct address_space *mapping = file->f_mapping;  	struct inode *inode = mapping->host; +	size_t count = iov_iter_count(iter);  	ssize_t ret; -	ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, -				  udf_get_block); +	ret = blockdev_direct_IO(rw, iocb, inode, iter, offset, udf_get_block);  	if (unlikely(ret < 0 && (rw & WRITE))) -		udf_write_failed(mapping, offset + iov_length(iov, nr_segs)); +		udf_write_failed(mapping, offset + count);  	return ret;  } @@ -265,6 +265,7 @@ int udf_expand_file_adinicb(struct inode *inode)  		.nr_to_write = 1,  	}; +	WARN_ON_ONCE(!mutex_is_locked(&inode->i_mutex));  	if (!iinfo->i_lenAlloc) {  		if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_SHORT_AD))  			iinfo->i_alloc_type = ICBTAG_FLAG_AD_SHORT;  | 
