static void *bond_info_seq_start(struct seq_file *seq, loff_t *pos)
        __acquires(RCU)
-       __acquires(&bond->lock)
 {
        struct bonding *bond = seq->private;
        struct list_head *iter;
        struct slave *slave;
        loff_t off = 0;
 
-       /* make sure the bond won't be taken away */
        rcu_read_lock();
-       read_lock(&bond->lock);
 
        if (*pos == 0)
                return SEQ_START_TOKEN;
 
-       bond_for_each_slave(bond, slave, iter)
+       bond_for_each_slave_rcu(bond, slave, iter)
                if (++off == *pos)
                        return slave;
 
 
        ++*pos;
        if (v == SEQ_START_TOKEN)
-               return bond_first_slave(bond);
+               return bond_first_slave_rcu(bond);
 
-       if (bond_is_last_slave(bond, v))
-               return NULL;
-
-       bond_for_each_slave(bond, slave, iter) {
+       bond_for_each_slave_rcu(bond, slave, iter) {
                if (found)
                        return slave;
                if (slave == v)
 }
 
 static void bond_info_seq_stop(struct seq_file *seq, void *v)
-       __releases(&bond->lock)
        __releases(RCU)
 {
-       struct bonding *bond = seq->private;
-
-       read_unlock(&bond->lock);
        rcu_read_unlock();
 }