*/
 static void xas_squash_marks(const struct xa_state *xas)
 {
-       unsigned int mark = 0;
+       xa_mark_t mark = 0;
        unsigned int limit = xas->xa_offset + xas->xa_sibs + 1;
 
-       do {
-               unsigned long *marks = xas->xa_node->marks[mark];
-               if (find_next_bit(marks, limit, xas->xa_offset + 1) == limit)
-                       continue;
-               __set_bit(xas->xa_offset, marks);
-               bitmap_clear(marks, xas->xa_offset + 1, xas->xa_sibs);
-       } while (mark++ != (__force unsigned)XA_MARK_MAX);
+       for (;;) {
+               unsigned long *marks = node_marks(xas->xa_node, mark);
+
+               if (find_next_bit(marks, limit, xas->xa_offset + 1) != limit) {
+                       __set_bit(xas->xa_offset, marks);
+                       bitmap_clear(marks, xas->xa_offset + 1, xas->xa_sibs);
+               }
+               if (mark == XA_MARK_MAX)
+                       break;
+               mark_inc(mark);
+       }
 }
 
 /* extracts the offset within this node from the index */