#define mt_set_external_lock(mt, lock)                                 \
        (mt)->ma_external_lock = &(lock)->dep_map
+
+#define mt_on_stack(mt)                        (mt).ma_external_lock = NULL
 #else
 typedef struct { /* nothing */ } lockdep_map_p;
 #define mt_lock_is_held(mt)    1
 #define mt_set_external_lock(mt, lock) do { } while (0)
+#define mt_on_stack(mt)                        do { } while (0)
 #endif
 
 /*
 
        unsigned long locked_vm = 0;
        MA_STATE(mas_detach, &mt_detach, 0, 0);
        mt_init_flags(&mt_detach, vmi->mas.tree->ma_flags & MT_FLAGS_LOCK_MASK);
-       mt_set_external_lock(&mt_detach, &mm->mmap_lock);
+       mt_on_stack(mt_detach);
 
        /*
         * If we need to split any vma, do it now to save pain later.
        /* Statistics and freeing VMAs */
        mas_set(&mas_detach, start);
        remove_mt(mm, &mas_detach);
-       __mt_destroy(&mt_detach);
        validate_mm(mm);
        if (unlock)
                mmap_read_unlock(mm);
 
+       __mt_destroy(&mt_detach);
        return 0;
 
 clear_tree_failed: