}
 }
 
-static inline bool xchg_paths(struct rtrs_clt_path __rcu **rcu_ppcpu_path,
-                             struct rtrs_clt_path *clt_path,
-                             struct rtrs_clt_path *next)
-{
-       struct rtrs_clt_path **ppcpu_path;
-
-       /* Call cmpxchg() without sparse warnings */
-       ppcpu_path = (typeof(ppcpu_path))rcu_ppcpu_path;
-       return clt_path == cmpxchg(ppcpu_path, clt_path, next);
-}
-
 static void rtrs_clt_remove_path_from_arr(struct rtrs_clt_path *clt_path)
 {
        struct rtrs_clt_sess *clt = clt_path->clt;
                 * We race with IO code path, which also changes pointer,
                 * thus we have to be careful not to overwrite it.
                 */
-               if (xchg_paths(ppcpu_path, clt_path, next))
+               if (try_cmpxchg((struct rtrs_clt_path **)ppcpu_path, &clt_path,
+                               next))
                        /*
                         * @ppcpu_path was successfully replaced with @next,
                         * that means that someone could also pick up the