}
 }
 
+/*
+ * The end position (last + 1) of each additional kallsyms section is recorded
+ * in iter->pos_..._end as each section is added, and so can be used to
+ * determine which get_ksymbol_...() function to call next.
+ */
 static int update_iter_mod(struct kallsym_iter *iter, loff_t pos)
 {
        iter->pos = pos;
 
-       if (iter->pos_ftrace_mod_end > 0 &&
-           iter->pos_ftrace_mod_end < iter->pos)
-               return get_ksymbol_bpf(iter);
-
-       if (iter->pos_mod_end > 0 &&
-           iter->pos_mod_end < iter->pos) {
-               if (!get_ksymbol_ftrace_mod(iter))
-                       return get_ksymbol_bpf(iter);
+       if ((!iter->pos_mod_end || iter->pos_mod_end > pos) &&
+           get_ksymbol_mod(iter))
                return 1;
-       }
 
-       if (!get_ksymbol_mod(iter)) {
-               if (!get_ksymbol_ftrace_mod(iter))
-                       return get_ksymbol_bpf(iter);
-       }
+       if ((!iter->pos_ftrace_mod_end || iter->pos_ftrace_mod_end > pos) &&
+           get_ksymbol_ftrace_mod(iter))
+               return 1;
 
-       return 1;
+       return get_ksymbol_bpf(iter);
 }
 
 /* Returns false if pos at or past end of file. */