nfsd: Fix error return values for nfsd4_clone_file_range()
If the parameter 'count' is non-zero, nfsd4_clone_file_range() will
currently clobber all errors returned by vfs_clone_file_range() and
replace them with EINVAL.
Fixes: 42ec3d4c02 ("vfs: make remap_file_range functions take and...")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Cc: stable@vger.kernel.org # v4.20+
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
			
			
This commit is contained in:
		
				
					committed by
					
						
						J. Bruce Fields
					
				
			
			
				
	
			
			
			
						parent
						
							8834f5600c
						
					
				
				
					commit
					e3fdc89ca4
				
			@@ -557,9 +557,11 @@ __be32 nfsd4_clone_file_range(struct file *src, u64 src_pos, struct file *dst,
 | 
			
		||||
	loff_t cloned;
 | 
			
		||||
 | 
			
		||||
	cloned = vfs_clone_file_range(src, src_pos, dst, dst_pos, count, 0);
 | 
			
		||||
	if (cloned < 0)
 | 
			
		||||
		return nfserrno(cloned);
 | 
			
		||||
	if (count && cloned != count)
 | 
			
		||||
		cloned = -EINVAL;
 | 
			
		||||
	return nfserrno(cloned < 0 ? cloned : 0);
 | 
			
		||||
		return nfserrno(-EINVAL);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ssize_t nfsd_copy_file_range(struct file *src, u64 src_pos, struct file *dst,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user