We don't have to take locks in any particular ordering - we'll make
forward progress just fine - but if we try to stick to an ordering, it
can help to avoid excessive would_deadlock transaction restarts.
This tweaks the reflink path to take extents btree locks in the right
order.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
 
                bch2_btree_iter_set_snapshot(&dst_iter, dst_snapshot);
 
+               if (dst_inum.inum < src_inum.inum) {
+                       /* Avoid some lock cycle transaction restarts */
+                       ret = bch2_btree_iter_traverse(&dst_iter);
+                       if (ret)
+                               continue;
+               }
+
                dst_done = dst_iter.pos.offset - dst_start.offset;
                src_want = POS(src_start.inode, src_start.offset + dst_done);
                bch2_btree_iter_set_pos(&src_iter, src_want);