|
@@ -7,21 +7,18 @@
|
|
|
|
|
|
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;
|
|
|
|
|
@@ -37,12 +34,9 @@ static void *bond_info_seq_next(struct seq_file *seq, void *v, loff_t *pos)
|
|
|
|
|
|
++*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)
|
|
@@ -53,12 +47,8 @@ static void *bond_info_seq_next(struct seq_file *seq, void *v, loff_t *pos)
|
|
|
}
|
|
|
|
|
|
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();
|
|
|
}
|
|
|
|