struct sbitmap_word *map = &sb->map[index];
                unsigned long get_mask;
                unsigned int map_depth = __map_depth(sb, index);
+               unsigned long val;
 
                sbitmap_deferred_clear(map);
-               if (map->word == (1UL << (map_depth - 1)) - 1)
+               val = READ_ONCE(map->word);
+               if (val == (1UL << (map_depth - 1)) - 1)
                        goto next;
 
-               nr = find_first_zero_bit(&map->word, map_depth);
+               nr = find_first_zero_bit(&val, map_depth);
                if (nr + nr_tags <= map_depth) {
                        atomic_long_t *ptr = (atomic_long_t *) &map->word;
-                       unsigned long val;
 
                        get_mask = ((1UL << nr_tags) - 1) << nr;
-                       val = READ_ONCE(map->word);
                        while (!atomic_long_try_cmpxchg(ptr, &val,
                                                          get_mask | val))
                                ;