mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	btrfs: replace error code from btrfs_drop_extents
There's a case which clone does not handle and used to BUG_ON instead, (testcase xfstests/btrfs/035), now returns EINVAL. This error code is confusing to the ioctl caller, as it normally signifies errorneous arguments. Change it to ENOPNOTSUPP which allows a fall back to copy instead of clone. This does not affect the common reflink operation. Signed-off-by: David Sterba <dsterba@suse.cz> Signed-off-by: Chris Mason <clm@fb.com>
This commit is contained in:
		
							parent
							
								
									c5f7d0bb29
								
							
						
					
					
						commit
						3f9e3df8da
					
				
					 2 changed files with 5 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -805,7 +805,7 @@ int __btrfs_drop_extents(struct btrfs_trans_handle *trans,
 | 
			
		|||
		if (start > key.offset && end < extent_end) {
 | 
			
		||||
			BUG_ON(del_nr > 0);
 | 
			
		||||
			if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
 | 
			
		||||
				ret = -EINVAL;
 | 
			
		||||
				ret = -EOPNOTSUPP;
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -851,7 +851,7 @@ int __btrfs_drop_extents(struct btrfs_trans_handle *trans,
 | 
			
		|||
		 */
 | 
			
		||||
		if (start <= key.offset && end < extent_end) {
 | 
			
		||||
			if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
 | 
			
		||||
				ret = -EINVAL;
 | 
			
		||||
				ret = -EOPNOTSUPP;
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -877,7 +877,7 @@ int __btrfs_drop_extents(struct btrfs_trans_handle *trans,
 | 
			
		|||
		if (start > key.offset && end >= extent_end) {
 | 
			
		||||
			BUG_ON(del_nr > 0);
 | 
			
		||||
			if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
 | 
			
		||||
				ret = -EINVAL;
 | 
			
		||||
				ret = -EOPNOTSUPP;
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3088,7 +3088,7 @@ static int btrfs_clone(struct inode *src, struct inode *inode,
 | 
			
		|||
							 new_key.offset + datal,
 | 
			
		||||
							 1);
 | 
			
		||||
				if (ret) {
 | 
			
		||||
					if (ret != -EINVAL)
 | 
			
		||||
					if (ret != -EOPNOTSUPP)
 | 
			
		||||
						btrfs_abort_transaction(trans,
 | 
			
		||||
								root, ret);
 | 
			
		||||
					btrfs_end_transaction(trans, root);
 | 
			
		||||
| 
						 | 
				
			
			@ -3163,7 +3163,7 @@ static int btrfs_clone(struct inode *src, struct inode *inode,
 | 
			
		|||
							 new_key.offset + datal,
 | 
			
		||||
							 1);
 | 
			
		||||
				if (ret) {
 | 
			
		||||
					if (ret != -EINVAL)
 | 
			
		||||
					if (ret != -EOPNOTSUPP)
 | 
			
		||||
						btrfs_abort_transaction(trans,
 | 
			
		||||
							root, ret);
 | 
			
		||||
					btrfs_end_transaction(trans, root);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue