diff --git a/fs/ext3/balloc.c b/fs/ext3/balloc.c
index 045995c..971e1bd 100644
--- a/fs/ext3/balloc.c
+++ b/fs/ext3/balloc.c
@@ -1922,7 +1922,7 @@ ext3_grpblk_t ext3_trim_all_free(struct super_block *sb, unsigned int group,
 				ext3_grpblk_t minblocks)
 {
 	handle_t *handle;
-	ext3_grpblk_t next, free_blocks, bit, freed, count = 0;
+	ext3_grpblk_t next, free_blocks, bit, freed, count = 0, free_count = 0;
 	ext3_fsblk_t discard_block;
 	struct ext3_sb_info *sbi;
 	struct buffer_head *gdp_bh, *bitmap_bh = NULL;
@@ -1991,6 +1991,7 @@ ext3_grpblk_t ext3_trim_all_free(struct super_block *sb, unsigned int group,
 		spin_unlock(sb_bgl_lock(sbi, group));
 		percpu_counter_sub(&sbi->s_freeblocks_counter, next - start);
 
+		free_count += next - start;
 		/* Do not issue a TRIM on extents smaller than minblocks */
 		if ((next - start) < minblocks)
 			goto free_extent;
@@ -2040,7 +2041,7 @@ free_extent:
 		cond_resched();
 
 		/* No more suitable extents */
-		if ((free_blocks - count) < minblocks)
+		if ((free_blocks - free_count) < minblocks)
 			break;
 	}
 
