diff options
author | Andreas Gruenbacher <agruen@linbit.com> | 2011-06-21 17:23:59 +0200 |
---|---|---|
committer | Philipp Reisner <philipp.reisner@linbit.com> | 2014-02-17 16:45:00 +0100 |
commit | c06ece6ba6f1bb2e01616e111303c3ae5f80fdbe (patch) | |
tree | 2044b6aecd791466750863dbda4a544bce31bd19 /drivers/block/drbd/drbd_receiver.c | |
parent | eb6bea673f884c037fd5358b5f17bfca18038708 (diff) |
drbd: Turn connection->volumes into connection->peer_devices
Let connection->peer_devices point to peer devices; connection->volumes was
pointing to devices.
Signed-off-by: Andreas Gruenbacher <agruen@linbit.com>
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Diffstat (limited to 'drivers/block/drbd/drbd_receiver.c')
-rw-r--r-- | drivers/block/drbd/drbd_receiver.c | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c index 791005e163d..24907877cae 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c @@ -867,7 +867,7 @@ int drbd_connected(struct drbd_device *device) static int conn_connect(struct drbd_connection *connection) { struct drbd_socket sock, msock; - struct drbd_device *device; + struct drbd_peer_device *peer_device; struct net_conf *nc; int vnr, timeout, h, ok; bool discard_my_data; @@ -1038,7 +1038,8 @@ randomize: set_bit(STATE_SENT, &connection->flags); rcu_read_lock(); - idr_for_each_entry(&connection->volumes, device, vnr) { + idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { + struct drbd_device *device = peer_device->device; kref_get(&device->kref); rcu_read_unlock(); @@ -1145,12 +1146,14 @@ static int drbd_recv_header(struct drbd_connection *connection, struct packet_in static void drbd_flush(struct drbd_connection *connection) { int rv; - struct drbd_device *device; + struct drbd_peer_device *peer_device; int vnr; if (connection->write_ordering >= WO_bdev_flush) { rcu_read_lock(); - idr_for_each_entry(&connection->volumes, device, vnr) { + idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { + struct drbd_device *device = peer_device->device; + if (!get_ldev(device)) continue; kref_get(&device->kref); @@ -1260,7 +1263,7 @@ static enum finish_epoch drbd_may_finish_epoch(struct drbd_connection *connectio void drbd_bump_write_ordering(struct drbd_connection *connection, enum write_ordering_e wo) { struct disk_conf *dc; - struct drbd_device *device; + struct drbd_peer_device *peer_device; enum write_ordering_e pwo; int vnr; static char *write_ordering_str[] = { @@ -1272,7 +1275,9 @@ void drbd_bump_write_ordering(struct drbd_connection *connection, enum write_ord pwo = connection->write_ordering; wo = min(pwo, wo); rcu_read_lock(); - idr_for_each_entry(&connection->volumes, device, vnr) { + idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { + struct drbd_device *device = peer_device->device; + if (!get_ldev_if_state(device, D_ATTACHING)) continue; dc = rcu_dereference(device->ldev->disk_conf); @@ -1401,11 +1406,13 @@ static void drbd_remove_epoch_entry_interval(struct drbd_device *device, static void conn_wait_active_ee_empty(struct drbd_connection *connection) { - struct drbd_device *device; + struct drbd_peer_device *peer_device; int vnr; rcu_read_lock(); - idr_for_each_entry(&connection->volumes, device, vnr) { + idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { + struct drbd_device *device = peer_device->device; + kref_get(&device->kref); rcu_read_unlock(); drbd_wait_ee_list_empty(device, &device->active_ee); @@ -4436,7 +4443,7 @@ void conn_flush_workqueue(struct drbd_connection *connection) static void conn_disconnect(struct drbd_connection *connection) { - struct drbd_device *device; + struct drbd_peer_device *peer_device; enum drbd_conns oc; int vnr; @@ -4455,11 +4462,12 @@ static void conn_disconnect(struct drbd_connection *connection) drbd_free_sock(connection); rcu_read_lock(); - idr_for_each_entry(&connection->volumes, device, vnr) { + idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { + struct drbd_device *device = peer_device->device; kref_get(&device->kref); rcu_read_unlock(); drbd_disconnected(device); - kref_put(&device->kref, &drbd_destroy_device); + kref_put(&device->kref, drbd_destroy_device); rcu_read_lock(); } rcu_read_unlock(); @@ -5111,13 +5119,15 @@ static int got_NegRSDReply(struct drbd_connection *connection, struct packet_inf static int got_BarrierAck(struct drbd_connection *connection, struct packet_info *pi) { struct p_barrier_ack *p = pi->data; - struct drbd_device *device; + struct drbd_peer_device *peer_device; int vnr; tl_release(connection, p->barrier, be32_to_cpu(p->set_size)); rcu_read_lock(); - idr_for_each_entry(&connection->volumes, device, vnr) { + idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { + struct drbd_device *device = peer_device->device; + if (device->state.conn == C_AHEAD && atomic_read(&device->ap_in_flight) == 0 && !test_and_set_bit(AHEAD_TO_SYNC_SOURCE, &device->flags)) { @@ -5187,7 +5197,7 @@ static int got_skip(struct drbd_connection *connection, struct packet_info *pi) static int connection_finish_peer_reqs(struct drbd_connection *connection) { - struct drbd_device *device; + struct drbd_peer_device *peer_device; int vnr, not_empty = 0; do { @@ -5195,7 +5205,8 @@ static int connection_finish_peer_reqs(struct drbd_connection *connection) flush_signals(current); rcu_read_lock(); - idr_for_each_entry(&connection->volumes, device, vnr) { + idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { + struct drbd_device *device = peer_device->device; kref_get(&device->kref); rcu_read_unlock(); if (drbd_finish_peer_reqs(device)) { @@ -5208,7 +5219,8 @@ static int connection_finish_peer_reqs(struct drbd_connection *connection) set_bit(SIGNAL_ASENDER, &connection->flags); spin_lock_irq(&connection->req_lock); - idr_for_each_entry(&connection->volumes, device, vnr) { + idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { + struct drbd_device *device = peer_device->device; not_empty = !list_empty(&device->done_ee); if (not_empty) break; |