Lines Matching refs:peer_device

251 struct page *drbd_alloc_pages(struct drbd_peer_device *peer_device, unsigned int number,  in drbd_alloc_pages()  argument
254 struct drbd_device *device = peer_device->device; in drbd_alloc_pages()
261 nc = rcu_dereference(peer_device->connection->net_conf); in drbd_alloc_pages()
341 drbd_alloc_peer_req(struct drbd_peer_device *peer_device, u64 id, sector_t sector, in drbd_alloc_peer_req() argument
344 struct drbd_device *device = peer_device->device; in drbd_alloc_peer_req()
360 page = drbd_alloc_pages(peer_device, nr_pages, in drbd_alloc_peer_req()
372 peer_req->peer_device = peer_device; in drbd_alloc_peer_req()
869 int drbd_connected(struct drbd_peer_device *peer_device) in drbd_connected() argument
871 struct drbd_device *device = peer_device->device; in drbd_connected()
877 device->state_mutex = peer_device->connection->agreed_pro_version < 100 ? in drbd_connected()
878 &peer_device->connection->cstate_mutex : in drbd_connected()
881 err = drbd_send_sync_param(peer_device); in drbd_connected()
883 err = drbd_send_sizes(peer_device, 0, 0); in drbd_connected()
885 err = drbd_send_uuids(peer_device); in drbd_connected()
887 err = drbd_send_current_state(peer_device); in drbd_connected()
906 struct drbd_peer_device *peer_device; in conn_connect() local
1071 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) in conn_connect()
1072 mutex_lock(peer_device->device->state_mutex); in conn_connect()
1076 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) in conn_connect()
1077 mutex_unlock(peer_device->device->state_mutex); in conn_connect()
1080 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { in conn_connect()
1081 struct drbd_device *device = peer_device->device; in conn_connect()
1090 drbd_connected(peer_device); in conn_connect()
1178 struct drbd_peer_device *peer_device; in drbd_flush() local
1183 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { in drbd_flush()
1184 struct drbd_device *device = peer_device->device; in drbd_flush()
1495 struct drbd_peer_device *peer_device; in conn_wait_active_ee_empty() local
1499 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { in conn_wait_active_ee_empty()
1500 struct drbd_device *device = peer_device->device; in conn_wait_active_ee_empty()
1588 read_in_block(struct drbd_peer_device *peer_device, u64 id, sector_t sector, in read_in_block() argument
1591 struct drbd_device *device = peer_device->device; in read_in_block()
1597 void *dig_in = peer_device->connection->int_dig_in; in read_in_block()
1598 void *dig_vv = peer_device->connection->int_dig_vv; in read_in_block()
1603 if (!trim && peer_device->connection->peer_integrity_tfm) { in read_in_block()
1604 digest_size = crypto_hash_digestsize(peer_device->connection->peer_integrity_tfm); in read_in_block()
1609 err = drbd_recv_all_warn(peer_device->connection, dig_in, digest_size); in read_in_block()
1616 D_ASSERT(peer_device, data_size == 0); in read_in_block()
1639 peer_req = drbd_alloc_peer_req(peer_device, id, sector, data_size, trim == NULL, GFP_NOIO); in read_in_block()
1652 err = drbd_recv_all_warn(peer_device->connection, data, len); in read_in_block()
1666 drbd_csum_ee(peer_device->connection->peer_integrity_tfm, peer_req, dig_vv); in read_in_block()
1681 static int drbd_drain_block(struct drbd_peer_device *peer_device, int data_size) in drbd_drain_block() argument
1690 page = drbd_alloc_pages(peer_device, 1, 1); in drbd_drain_block()
1696 err = drbd_recv_all_warn(peer_device->connection, data, len); in drbd_drain_block()
1702 drbd_free_pages(peer_device->device, page, 0); in drbd_drain_block()
1706 static int recv_dless_read(struct drbd_peer_device *peer_device, struct drbd_request *req, in recv_dless_read() argument
1713 void *dig_in = peer_device->connection->int_dig_in; in recv_dless_read()
1714 void *dig_vv = peer_device->connection->int_dig_vv; in recv_dless_read()
1717 if (peer_device->connection->peer_integrity_tfm) { in recv_dless_read()
1718 digest_size = crypto_hash_digestsize(peer_device->connection->peer_integrity_tfm); in recv_dless_read()
1719 err = drbd_recv_all_warn(peer_device->connection, dig_in, digest_size); in recv_dless_read()
1727 peer_device->device->recv_cnt += data_size>>9; in recv_dless_read()
1730 D_ASSERT(peer_device->device, sector == bio->bi_iter.bi_sector); in recv_dless_read()
1735 err = drbd_recv_all_warn(peer_device->connection, mapped, expect); in recv_dless_read()
1743 drbd_csum_bio(peer_device->connection->peer_integrity_tfm, bio, dig_vv); in recv_dless_read()
1745 drbd_err(peer_device, "Digest integrity check FAILED. Broken NICs?\n"); in recv_dless_read()
1750 D_ASSERT(peer_device->device, data_size == 0); in recv_dless_read()
1762 struct drbd_peer_device *peer_device = peer_req->peer_device; in e_end_resync_block() local
1763 struct drbd_device *device = peer_device->device; in e_end_resync_block()
1771 err = drbd_send_ack(peer_device, P_RS_WRITE_ACK, peer_req); in e_end_resync_block()
1776 err = drbd_send_ack(peer_device, P_NEG_ACK, peer_req); in e_end_resync_block()
1783 static int recv_resync_read(struct drbd_peer_device *peer_device, sector_t sector, in recv_resync_read() argument
1786 struct drbd_device *device = peer_device->device; in recv_resync_read()
1789 peer_req = read_in_block(peer_device, ID_SYNCER, sector, pi); in recv_resync_read()
1841 struct drbd_peer_device *peer_device; in receive_DataReply() local
1848 peer_device = conn_peer_device(connection, pi->vnr); in receive_DataReply()
1849 if (!peer_device) in receive_DataReply()
1851 device = peer_device->device; in receive_DataReply()
1864 err = recv_dless_read(peer_device, req, sector, pi->size); in receive_DataReply()
1876 struct drbd_peer_device *peer_device; in receive_RSDataReply() local
1882 peer_device = conn_peer_device(connection, pi->vnr); in receive_RSDataReply()
1883 if (!peer_device) in receive_RSDataReply()
1885 device = peer_device->device; in receive_RSDataReply()
1894 err = recv_resync_read(peer_device, sector, pi); in receive_RSDataReply()
1899 err = drbd_drain_block(peer_device, pi->size); in receive_RSDataReply()
1901 drbd_send_ack_dp(peer_device, P_NEG_ACK, p, pi->size); in receive_RSDataReply()
1935 struct drbd_peer_device *peer_device = peer_req->peer_device; in e_end_block() local
1936 struct drbd_device *device = peer_device->device; in e_end_block()
1946 err = drbd_send_ack(peer_device, pcmd, peer_req); in e_end_block()
1950 err = drbd_send_ack(peer_device, P_NEG_ACK, peer_req); in e_end_block()
1978 struct drbd_peer_device *peer_device = peer_req->peer_device; in e_send_ack() local
1981 err = drbd_send_ack(peer_device, ack, peer_req); in e_send_ack()
1982 dec_unacked(peer_device->device); in e_send_ack()
1996 struct drbd_connection *connection = peer_req->peer_device->connection; in e_send_retry_write()
2017 static void update_peer_seq(struct drbd_peer_device *peer_device, unsigned int peer_seq) in update_peer_seq() argument
2019 struct drbd_device *device = peer_device->device; in update_peer_seq()
2022 if (test_bit(RESOLVE_CONFLICTS, &peer_device->connection->flags)) { in update_peer_seq()
2078 static int wait_for_and_update_peer_seq(struct drbd_peer_device *peer_device, const u32 peer_seq) in wait_for_and_update_peer_seq() argument
2080 struct drbd_device *device = peer_device->device; in wait_for_and_update_peer_seq()
2085 if (!test_bit(RESOLVE_CONFLICTS, &peer_device->connection->flags)) in wait_for_and_update_peer_seq()
2111 timeout = rcu_dereference(peer_device->connection->net_conf)->ping_timeo*HZ/10; in wait_for_and_update_peer_seq()
2165 struct drbd_connection *connection = peer_req->peer_device->connection; in handle_write_conflicts()
2273 struct drbd_peer_device *peer_device; in receive_Data() local
2284 peer_device = conn_peer_device(connection, pi->vnr); in receive_Data()
2285 if (!peer_device) in receive_Data()
2287 device = peer_device->device; in receive_Data()
2292 err = wait_for_and_update_peer_seq(peer_device, peer_seq); in receive_Data()
2293 drbd_send_ack_dp(peer_device, P_NEG_ACK, p, pi->size); in receive_Data()
2295 err2 = drbd_drain_block(peer_device, pi->size); in receive_Data()
2308 peer_req = read_in_block(peer_device, p->block_id, sector, pi); in receive_Data()
2325 D_ASSERT(peer_device, peer_req->i.size > 0); in receive_Data()
2326 D_ASSERT(peer_device, rw & REQ_DISCARD); in receive_Data()
2327 D_ASSERT(peer_device, peer_req->pages == NULL); in receive_Data()
2343 nc = rcu_dereference(peer_device->connection->net_conf); in receive_Data()
2345 if (peer_device->connection->agreed_pro_version < 100) { in receive_Data()
2374 err = wait_for_and_update_peer_seq(peer_device, peer_seq); in receive_Data()
2388 update_peer_seq(peer_device, peer_seq); in receive_Data()
2515 struct drbd_peer_device *peer_device; in receive_DataRequest() local
2525 peer_device = conn_peer_device(connection, pi->vnr); in receive_DataRequest()
2526 if (!peer_device) in receive_DataRequest()
2528 device = peer_device->device; in receive_DataRequest()
2549 drbd_send_ack_rp(peer_device, P_NEG_DREPLY, p); in receive_DataRequest()
2554 drbd_send_ack_rp(peer_device, P_NEG_RS_DREPLY , p); in receive_DataRequest()
2559 drbd_send_ack_ex(peer_device, P_OV_RESULT, sector, size, ID_IN_SYNC); in receive_DataRequest()
2569 return drbd_drain_block(peer_device, pi->size); in receive_DataRequest()
2575 peer_req = drbd_alloc_peer_req(peer_device, p->block_id, sector, size, in receive_DataRequest()
2610 if (drbd_recv_all(peer_device->connection, di->digest, pi->size)) in receive_DataRequest()
2614 D_ASSERT(device, peer_device->connection->agreed_pro_version >= 89); in receive_DataRequest()
2633 peer_device->connection->agreed_pro_version >= 90) { in receive_DataRequest()
2720 static int drbd_asb_recover_0p(struct drbd_peer_device *peer_device) __must_hold(local) in drbd_asb_recover_0p() argument
2722 struct drbd_device *device = peer_device->device; in drbd_asb_recover_0p()
2734 after_sb_0p = rcu_dereference(peer_device->connection->net_conf)->after_sb_0p; in drbd_asb_recover_0p()
2769 rv = test_bit(RESOLVE_CONFLICTS, &peer_device->connection->flags) in drbd_asb_recover_0p()
2785 rv = test_bit(RESOLVE_CONFLICTS, &peer_device->connection->flags) in drbd_asb_recover_0p()
2801 static int drbd_asb_recover_1p(struct drbd_peer_device *peer_device) __must_hold(local) in drbd_asb_recover_1p() argument
2803 struct drbd_device *device = peer_device->device; in drbd_asb_recover_1p()
2808 after_sb_1p = rcu_dereference(peer_device->connection->net_conf)->after_sb_1p; in drbd_asb_recover_1p()
2822 hg = drbd_asb_recover_0p(peer_device); in drbd_asb_recover_1p()
2829 rv = drbd_asb_recover_0p(peer_device); in drbd_asb_recover_1p()
2834 hg = drbd_asb_recover_0p(peer_device); in drbd_asb_recover_1p()
2858 static int drbd_asb_recover_2p(struct drbd_peer_device *peer_device) __must_hold(local) in drbd_asb_recover_2p() argument
2860 struct drbd_device *device = peer_device->device; in drbd_asb_recover_2p()
2865 after_sb_2p = rcu_dereference(peer_device->connection->net_conf)->after_sb_2p; in drbd_asb_recover_2p()
2879 rv = drbd_asb_recover_0p(peer_device); in drbd_asb_recover_2p()
2884 hg = drbd_asb_recover_0p(peer_device); in drbd_asb_recover_2p()
2936 struct drbd_peer_device *const peer_device = first_peer_device(device); in drbd_uuid_compare() local
2937 struct drbd_connection *const connection = peer_device ? peer_device->connection : NULL; in drbd_uuid_compare()
3121 static enum drbd_conns drbd_sync_handshake(struct drbd_peer_device *peer_device, in drbd_sync_handshake() argument
3125 struct drbd_device *device = peer_device->device; in drbd_sync_handshake()
3170 nc = rcu_dereference(peer_device->connection->net_conf); in drbd_sync_handshake()
3179 hg = drbd_asb_recover_0p(peer_device); in drbd_sync_handshake()
3182 hg = drbd_asb_recover_1p(peer_device); in drbd_sync_handshake()
3185 hg = drbd_asb_recover_2p(peer_device); in drbd_sync_handshake()
3245 if (tentative || test_bit(CONN_DRY_RUN, &peer_device->connection->flags)) { in drbd_sync_handshake()
3503 struct drbd_peer_device *peer_device; in receive_SyncParam() local
3516 peer_device = conn_peer_device(connection, pi->vnr); in receive_SyncParam()
3517 if (!peer_device) in receive_SyncParam()
3519 device = peer_device->device; in receive_SyncParam()
3550 err = drbd_recv_all(peer_device->connection, p, header_size); in receive_SyncParam()
3555 old_net_conf = peer_device->connection->net_conf; in receive_SyncParam()
3581 err = drbd_recv_all(peer_device->connection, p->verify_alg, data_size); in receive_SyncParam()
3655 crypto_free_hash(peer_device->connection->verify_tfm); in receive_SyncParam()
3656 peer_device->connection->verify_tfm = verify_tfm; in receive_SyncParam()
3662 crypto_free_hash(peer_device->connection->csums_tfm); in receive_SyncParam()
3663 peer_device->connection->csums_tfm = csums_tfm; in receive_SyncParam()
3709 conn_request_state(peer_device->connection, NS(conn, C_DISCONNECTING), CS_HARD); in receive_SyncParam()
3728 struct drbd_peer_device *peer_device; in receive_sizes() local
3736 peer_device = conn_peer_device(connection, pi->vnr); in receive_sizes()
3737 if (!peer_device) in receive_sizes()
3739 device = peer_device->device; in receive_sizes()
3771 conn_request_state(peer_device->connection, NS(conn, C_DISCONNECTING), CS_HARD); in receive_sizes()
3849 drbd_send_sizes(peer_device, 0, ddsf); in receive_sizes()
3869 struct drbd_peer_device *peer_device; in receive_uuids() local
3875 peer_device = conn_peer_device(connection, pi->vnr); in receive_uuids()
3876 if (!peer_device) in receive_uuids()
3878 device = peer_device->device; in receive_uuids()
3898 conn_request_state(peer_device->connection, NS(conn, C_DISCONNECTING), CS_HARD); in receive_uuids()
3905 peer_device->connection->agreed_pro_version >= 90 && in receive_uuids()
3976 struct drbd_peer_device *peer_device; in receive_req_state() local
3982 peer_device = conn_peer_device(connection, pi->vnr); in receive_req_state()
3983 if (!peer_device) in receive_req_state()
3985 device = peer_device->device; in receive_req_state()
3990 if (test_bit(RESOLVE_CONFLICTS, &peer_device->connection->flags) && in receive_req_state()
3992 drbd_send_sr_reply(peer_device, SS_CONCURRENT_ST_CHG); in receive_req_state()
4000 drbd_send_sr_reply(peer_device, rv); in receive_req_state()
4033 struct drbd_peer_device *peer_device; in receive_state() local
4041 peer_device = conn_peer_device(connection, pi->vnr); in receive_state()
4042 if (!peer_device) in receive_state()
4044 device = peer_device->device; in receive_state()
4139 ns.conn = drbd_sync_handshake(peer_device, peer_state.role, real_peer_disk); in receive_state()
4151 if (test_and_clear_bit(CONN_DRY_RUN, &peer_device->connection->flags)) in receive_state()
4154 conn_request_state(peer_device->connection, NS(conn, C_DISCONNECTING), CS_HARD); in receive_state()
4176 tl_clear(peer_device->connection); in receive_state()
4179 conn_request_state(peer_device->connection, NS2(conn, C_PROTOCOL_ERROR, susp, 0), CS_HARD); in receive_state()
4187 conn_request_state(peer_device->connection, NS(conn, C_DISCONNECTING), CS_HARD); in receive_state()
4197 drbd_send_uuids(peer_device); in receive_state()
4198 drbd_send_current_state(peer_device); in receive_state()
4211 struct drbd_peer_device *peer_device; in receive_sync_uuid() local
4215 peer_device = conn_peer_device(connection, pi->vnr); in receive_sync_uuid()
4216 if (!peer_device) in receive_sync_uuid()
4218 device = peer_device->device; in receive_sync_uuid()
4251 receive_bitmap_plain(struct drbd_peer_device *peer_device, unsigned int size, in receive_bitmap_plain() argument
4255 drbd_header_size(peer_device->connection); in receive_bitmap_plain()
4262 drbd_err(peer_device, "%s:want (%u) != size (%u)\n", __func__, want, size); in receive_bitmap_plain()
4267 err = drbd_recv_all(peer_device->connection, p, want); in receive_bitmap_plain()
4271 drbd_bm_merge_lel(peer_device->device, c->word_offset, num_words, p); in receive_bitmap_plain()
4303 recv_bm_rle_bits(struct drbd_peer_device *peer_device, in recv_bm_rle_bits() argument
4332 drbd_err(peer_device, "bitmap overflow (e:%lu) while decoding bm RLE packet\n", e); in recv_bm_rle_bits()
4335 _drbd_bm_set_bits(peer_device->device, s, e); in recv_bm_rle_bits()
4339 drbd_err(peer_device, "bitmap decoding error: h:%d b:%d la:0x%08llx l:%u/%u\n", in recv_bm_rle_bits()
4372 decode_bitmap_c(struct drbd_peer_device *peer_device, in decode_bitmap_c() argument
4378 return recv_bm_rle_bits(peer_device, p, c, len - sizeof(*p)); in decode_bitmap_c()
4384 drbd_err(peer_device, "receive_bitmap_c: unknown encoding %u\n", p->encoding); in decode_bitmap_c()
4385 conn_request_state(peer_device->connection, NS(conn, C_PROTOCOL_ERROR), CS_HARD); in decode_bitmap_c()
4435 struct drbd_peer_device *peer_device; in receive_bitmap() local
4440 peer_device = conn_peer_device(connection, pi->vnr); in receive_bitmap()
4441 if (!peer_device) in receive_bitmap()
4443 device = peer_device->device; in receive_bitmap()
4456 err = receive_bitmap_plain(peer_device, pi->size, pi->data, &c); in receive_bitmap()
4472 err = drbd_recv_all(peer_device->connection, p, pi->size); in receive_bitmap()
4475 err = decode_bitmap_c(peer_device, p, &c, pi->size); in receive_bitmap()
4490 err = drbd_recv_header(peer_device->connection, pi); in receive_bitmap()
4540 struct drbd_peer_device *peer_device; in receive_out_of_sync() local
4544 peer_device = conn_peer_device(connection, pi->vnr); in receive_out_of_sync()
4545 if (!peer_device) in receive_out_of_sync()
4547 device = peer_device->device; in receive_out_of_sync()
4650 struct drbd_peer_device *peer_device; in conn_disconnect() local
4669 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { in conn_disconnect()
4670 struct drbd_device *device = peer_device->device; in conn_disconnect()
4673 drbd_disconnected(peer_device); in conn_disconnect()
4701 static int drbd_disconnected(struct drbd_peer_device *peer_device) in drbd_disconnected() argument
4703 struct drbd_device *device = peer_device->device; in drbd_disconnected()
4735 drbd_flush_workqueue(&peer_device->connection->sender_work); in drbd_disconnected()
4742 drbd_flush_workqueue(&peer_device->connection->sender_work); in drbd_disconnected()
4752 tl_clear(peer_device->connection); in drbd_disconnected()
5118 struct drbd_peer_device *peer_device; in got_RqSReply() local
5123 peer_device = conn_peer_device(connection, pi->vnr); in got_RqSReply()
5124 if (!peer_device) in got_RqSReply()
5126 device = peer_device->device; in got_RqSReply()
5163 struct drbd_peer_device *peer_device; in got_IsInSync() local
5169 peer_device = conn_peer_device(connection, pi->vnr); in got_IsInSync()
5170 if (!peer_device) in got_IsInSync()
5172 device = peer_device->device; in got_IsInSync()
5174 D_ASSERT(device, peer_device->connection->agreed_pro_version >= 89); in got_IsInSync()
5176 update_peer_seq(peer_device, be32_to_cpu(p->seq_num)); in got_IsInSync()
5215 struct drbd_peer_device *peer_device; in got_BlockAck() local
5222 peer_device = conn_peer_device(connection, pi->vnr); in got_BlockAck()
5223 if (!peer_device) in got_BlockAck()
5225 device = peer_device->device; in got_BlockAck()
5227 update_peer_seq(peer_device, be32_to_cpu(p->seq_num)); in got_BlockAck()
5261 struct drbd_peer_device *peer_device; in got_NegAck() local
5268 peer_device = conn_peer_device(connection, pi->vnr); in got_NegAck()
5269 if (!peer_device) in got_NegAck()
5271 device = peer_device->device; in got_NegAck()
5273 update_peer_seq(peer_device, be32_to_cpu(p->seq_num)); in got_NegAck()
5297 struct drbd_peer_device *peer_device; in got_NegDReply() local
5302 peer_device = conn_peer_device(connection, pi->vnr); in got_NegDReply()
5303 if (!peer_device) in got_NegDReply()
5305 device = peer_device->device; in got_NegDReply()
5307 update_peer_seq(peer_device, be32_to_cpu(p->seq_num)); in got_NegDReply()
5319 struct drbd_peer_device *peer_device; in got_NegRSDReply() local
5325 peer_device = conn_peer_device(connection, pi->vnr); in got_NegRSDReply()
5326 if (!peer_device) in got_NegRSDReply()
5328 device = peer_device->device; in got_NegRSDReply()
5333 update_peer_seq(peer_device, be32_to_cpu(p->seq_num)); in got_NegRSDReply()
5356 struct drbd_peer_device *peer_device; in got_BarrierAck() local
5362 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { in got_BarrierAck()
5363 struct drbd_device *device = peer_device->device; in got_BarrierAck()
5379 struct drbd_peer_device *peer_device; in got_OVResult() local
5386 peer_device = conn_peer_device(connection, pi->vnr); in got_OVResult()
5387 if (!peer_device) in got_OVResult()
5389 device = peer_device->device; in got_OVResult()
5394 update_peer_seq(peer_device, be32_to_cpu(p->seq_num)); in got_OVResult()
5418 drbd_queue_work(&peer_device->connection->sender_work, &dw->w); in got_OVResult()
5436 struct drbd_peer_device *peer_device; in connection_finish_peer_reqs() local
5444 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { in connection_finish_peer_reqs()
5445 struct drbd_device *device = peer_device->device; in connection_finish_peer_reqs()
5458 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { in connection_finish_peer_reqs()
5459 struct drbd_device *device = peer_device->device; in connection_finish_peer_reqs()