|
@@ -7260,14 +7260,8 @@ int ocfs2_trim_fs(struct super_block *sb, struct fstrim_range *range)
|
|
start = range->start >> osb->s_clustersize_bits;
|
|
start = range->start >> osb->s_clustersize_bits;
|
|
len = range->len >> osb->s_clustersize_bits;
|
|
len = range->len >> osb->s_clustersize_bits;
|
|
minlen = range->minlen >> 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;
|
|
return -EINVAL;
|
|
|
|
|
|
main_bm_inode = ocfs2_get_system_file_inode(osb,
|
|
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;
|
|
goto out_unlock;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ len = range->len >> osb->s_clustersize_bits;
|
|
if (start + len > le32_to_cpu(main_bm->i_clusters))
|
|
if (start + len > le32_to_cpu(main_bm->i_clusters))
|
|
len = le32_to_cpu(main_bm->i_clusters) - start;
|
|
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_group = ocfs2_which_cluster_group(main_bm_inode, start + len - 1);
|
|
last_bit = osb->bitmap_cpg;
|
|
last_bit = osb->bitmap_cpg;
|
|
|
|
|
|
|
|
+ trimmed = 0;
|
|
for (group = first_group; group <= last_group;) {
|
|
for (group = first_group; group <= last_group;) {
|
|
if (first_bit + len >= osb->bitmap_cpg)
|
|
if (first_bit + len >= osb->bitmap_cpg)
|
|
last_bit = osb->bitmap_cpg;
|
|
last_bit = osb->bitmap_cpg;
|