*/
 static void *irlan_seq_start(struct seq_file *seq, loff_t *pos)
 {
-       int i = 1;
-       struct irlan_cb *self;
-
        rcu_read_lock();
-       if (*pos == 0)
-               return SEQ_START_TOKEN;
-
-       list_for_each_entry(self, &irlans, dev_list) {
-               if (*pos == i)
-                       return self;
-               ++i;
-       }
-       return NULL;
+       return seq_list_start_head(&irlans, *pos);
 }
 
 /* Return entry after v, and increment pos */
 static void *irlan_seq_next(struct seq_file *seq, void *v, loff_t *pos)
 {
-       struct list_head *nxt;
-
-       ++*pos;
-       if (v == SEQ_START_TOKEN)
-               nxt = irlans.next;
-       else
-               nxt = ((struct irlan_cb *)v)->dev_list.next;
-
-       return (nxt == &irlans) ? NULL
-               : list_entry(nxt, struct irlan_cb, dev_list);
+       return seq_list_next(v, &irlans, pos);
 }
 
 /* End of reading /proc file */
  */
 static int irlan_seq_show(struct seq_file *seq, void *v)
 {
-       if (v == SEQ_START_TOKEN)
+       if (v == &irlans)
                seq_puts(seq, "IrLAN instances:\n");
        else {
-               struct irlan_cb *self = v;
+               struct irlan_cb *self = list_entry(v, struct irlan_cb, dev_list);
 
                IRDA_ASSERT(self != NULL, return -1;);
                IRDA_ASSERT(self->magic == IRLAN_MAGIC, return -1;);