mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	ocfs2: return EINVAL if the given range to discard is less than block size
For FITRIM ioctl(2), we should not keep silence if the given range length ls less than a block size as there is no data blocks would be discareded. Hence it should return EINVAL instead. This issue can be verified via xfstests/generic/288 which is used for FITRIM argument handling tests. Signed-off-by: Jie Liu <jeff.liu@oracle.com> Cc: Mark Fasheh <mfasheh@suse.com> Cc: Joel Becker <jlbec@evilplan.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									19e8ac2721
								
							
						
					
					
						commit
						aa89762c54
					
				
					 1 changed files with 3 additions and 7 deletions
				
			
		|  | @ -7260,14 +7260,8 @@ int ocfs2_trim_fs(struct super_block *sb, struct fstrim_range *range) | |||
| 	start = range->start >> osb->s_clustersize_bits; | ||||
| 	len = range->len >> osb->s_clustersize_bits; | ||||
| 	minlen = range->minlen >> osb->s_clustersize_bits; | ||||
| 	trimmed = 0; | ||||
| 
 | ||||
| 	if (!len) { | ||||
| 		range->len = 0; | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	if (minlen >= osb->bitmap_cpg) | ||||
| 	if (minlen >= osb->bitmap_cpg || range->len < sb->s_blocksize) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	main_bm_inode = ocfs2_get_system_file_inode(osb, | ||||
|  | @ -7293,6 +7287,7 @@ int ocfs2_trim_fs(struct super_block *sb, struct fstrim_range *range) | |||
| 		goto out_unlock; | ||||
| 	} | ||||
| 
 | ||||
| 	len = range->len >> osb->s_clustersize_bits; | ||||
| 	if (start + len > le32_to_cpu(main_bm->i_clusters)) | ||||
| 		len = le32_to_cpu(main_bm->i_clusters) - start; | ||||
| 
 | ||||
|  | @ -7307,6 +7302,7 @@ int ocfs2_trim_fs(struct super_block *sb, struct fstrim_range *range) | |||
| 	last_group = ocfs2_which_cluster_group(main_bm_inode, start + len - 1); | ||||
| 	last_bit = osb->bitmap_cpg; | ||||
| 
 | ||||
| 	trimmed = 0; | ||||
| 	for (group = first_group; group <= last_group;) { | ||||
| 		if (first_bit + len >= osb->bitmap_cpg) | ||||
| 			last_bit = osb->bitmap_cpg; | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Jie Liu
						Jie Liu