static struct rw_semaphore *maps__lock(struct maps *maps)
 {
-       /*
-        * When the lock is acquired or released the maps invariants should
-        * hold.
-        */
-       check_invariants(maps);
        return &RC_CHK_ACCESS(maps)->lock;
 }
 
 static int maps__sort_by_name(struct maps *maps)
 {
        int err = 0;
+
        down_write(maps__lock(maps));
        if (!maps__maps_by_name_sorted(maps)) {
                struct map **maps_by_name = maps__maps_by_name(maps);
                        maps__set_maps_by_name_sorted(maps, true);
                }
        }
+       check_invariants(maps);
        up_write(maps__lock(maps));
        return err;
 }
 
        down_write(maps__lock(maps));
        ret = __maps__insert(maps, map);
+       check_invariants(maps);
        up_write(maps__lock(maps));
        return ret;
 }
 {
        down_write(maps__lock(maps));
        __maps__remove(maps, map);
+       check_invariants(maps);
        up_write(maps__lock(maps));
 }
 
                else
                        i++;
        }
+       check_invariants(maps);
        up_write(maps__lock(maps));
 }
 
                        map__put(new);
                }
        }
+       check_invariants(dest);
+
        up_read(maps__lock(parent));
        up_write(maps__lock(dest));
        return err;
                map__set_end(maps_by_address[n - 1], ~0ULL);
 
        RC_CHK_ACCESS(maps)->ends_broken = false;
+       check_invariants(maps);
 
        up_write(maps__lock(maps));
 }
            map__start(kmaps_maps_by_address[first_after_]) >= map__end(new_map)) {
                /* No overlap so regular insert suffices. */
                int ret = __maps__insert(kmaps, new_map);
+
+               check_invariants(kmaps);
                up_write(maps__lock(kmaps));
                return ret;
        }
                map__zput(kmaps_maps_by_address[i]);
 
        free(kmaps_maps_by_address);
+       check_invariants(kmaps);
        up_write(maps__lock(kmaps));
        return 0;
 }