#define FTRACE_BUFF_MAX (KSYM_SYMBOL_LEN+4) /* room for wildcards */
 
 struct ftrace_iterator {
-       loff_t                  pos;
        struct ftrace_page      *pg;
        unsigned                idx;
        unsigned                flags;
                        iter->pg = iter->pg->next;
                        iter->idx = 0;
                        goto retry;
+               } else {
+                       iter->idx = -1;
                }
        } else {
                rec = &iter->pg->records[iter->idx++];
        }
        spin_unlock(&ftrace_lock);
 
-       iter->pos = *pos;
-
        return rec;
 }
 
 {
        struct ftrace_iterator *iter = m->private;
        void *p = NULL;
-       loff_t l = -1;
 
-       if (*pos > iter->pos)
-               *pos = iter->pos;
+       if (*pos > 0) {
+               if (iter->idx < 0)
+                       return p;
+               (*pos)--;
+               iter->idx--;
+       }
 
-       l = *pos;
-       p = t_next(m, p, &l);
+       p = t_next(m, p, pos);
 
        return p;
 }
 
 static int t_show(struct seq_file *m, void *v)
 {
-       struct ftrace_iterator *iter = m->private;
        struct dyn_ftrace *rec = v;
        char str[KSYM_SYMBOL_LEN];
-       int ret = 0;
 
        if (!rec)
                return 0;
 
        kallsyms_lookup(rec->ip, NULL, NULL, NULL, str);
 
-       ret = seq_printf(m, "%s\n", str);
-       if (ret < 0) {
-               iter->pos--;
-               iter->idx--;
-       }
+       seq_printf(m, "%s\n", str);
 
        return 0;
 }
                return -ENOMEM;
 
        iter->pg = ftrace_pages_start;
-       iter->pos = 0;
 
        ret = seq_open(file, &show_ftrace_seq_ops);
        if (!ret) {
 
        if (file->f_mode & FMODE_READ) {
                iter->pg = ftrace_pages_start;
-               iter->pos = 0;
                iter->flags = enable ? FTRACE_ITER_FILTER :
                        FTRACE_ITER_NOTRACE;