dm space map disk: optimise sm_disk_dec_block
authorJoe Thornber <ejt@redhat.com>
Fri, 9 Aug 2013 13:19:32 +0000 (14:19 +0100)
committerMike Snitzer <snitzer@redhat.com>
Sat, 9 Nov 2013 23:20:24 +0000 (18:20 -0500)
Don't waste time spotting blocks that have been allocated and then freed
in the same transaction.

The extra lookup is expensive, and I don't think it really gives us much.

Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/persistent-data/dm-space-map-disk.c

index e735a6d..cfbf961 100644 (file)
@@ -140,26 +140,10 @@ static int sm_disk_inc_block(struct dm_space_map *sm, dm_block_t b)
 
 static int sm_disk_dec_block(struct dm_space_map *sm, dm_block_t b)
 {
-       int r;
-       uint32_t old_count;
        enum allocation_event ev;
        struct sm_disk *smd = container_of(sm, struct sm_disk, sm);
 
-       r = sm_ll_dec(&smd->ll, b, &ev);
-       if (!r && (ev == SM_FREE)) {
-               /*
-                * It's only free if it's also free in the last
-                * transaction.
-                */
-               r = sm_ll_lookup(&smd->old_ll, b, &old_count);
-               if (r)
-                       return r;
-
-               if (!old_count)
-                       smd->nr_allocated_this_transaction--;
-       }
-
-       return r;
+       return sm_ll_dec(&smd->ll, b, &ev);
 }
 
 static int sm_disk_new_block(struct dm_space_map *sm, dm_block_t *b)