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, (gfp_mask & __GFP_WAIT)); in drbd_alloc_peer_req()
371 peer_req->peer_device = peer_device; in drbd_alloc_peer_req()
868 int drbd_connected(struct drbd_peer_device *peer_device) in drbd_connected() argument
870 struct drbd_device *device = peer_device->device; in drbd_connected()
876 device->state_mutex = peer_device->connection->agreed_pro_version < 100 ? in drbd_connected()
877 &peer_device->connection->cstate_mutex : in drbd_connected()
880 err = drbd_send_sync_param(peer_device); in drbd_connected()
882 err = drbd_send_sizes(peer_device, 0, 0); in drbd_connected()
884 err = drbd_send_uuids(peer_device); in drbd_connected()
886 err = drbd_send_current_state(peer_device); in drbd_connected()
905 struct drbd_peer_device *peer_device; in conn_connect() local
1070 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) in conn_connect()
1071 mutex_lock(peer_device->device->state_mutex); in conn_connect()
1075 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) in conn_connect()
1076 mutex_unlock(peer_device->device->state_mutex); in conn_connect()
1079 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { in conn_connect()
1080 struct drbd_device *device = peer_device->device; in conn_connect()
1089 drbd_connected(peer_device); in conn_connect()
1177 struct drbd_peer_device *peer_device; in drbd_flush() local
1182 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { in drbd_flush()
1183 struct drbd_device *device = peer_device->device; in drbd_flush()
1494 struct drbd_peer_device *peer_device; in conn_wait_active_ee_empty() local
1498 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { in conn_wait_active_ee_empty()
1499 struct drbd_device *device = peer_device->device; in conn_wait_active_ee_empty()
1587 read_in_block(struct drbd_peer_device *peer_device, u64 id, sector_t sector, in read_in_block() argument
1590 struct drbd_device *device = peer_device->device; in read_in_block()
1596 void *dig_in = peer_device->connection->int_dig_in; in read_in_block()
1597 void *dig_vv = peer_device->connection->int_dig_vv; in read_in_block()
1602 if (!trim && peer_device->connection->peer_integrity_tfm) { in read_in_block()
1603 digest_size = crypto_hash_digestsize(peer_device->connection->peer_integrity_tfm); in read_in_block()
1608 err = drbd_recv_all_warn(peer_device->connection, dig_in, digest_size); in read_in_block()
1615 D_ASSERT(peer_device, data_size == 0); in read_in_block()
1638 peer_req = drbd_alloc_peer_req(peer_device, id, sector, data_size, trim == NULL, GFP_NOIO); in read_in_block()
1651 err = drbd_recv_all_warn(peer_device->connection, data, len); in read_in_block()
1665 drbd_csum_ee(peer_device->connection->peer_integrity_tfm, peer_req, dig_vv); in read_in_block()
1680 static int drbd_drain_block(struct drbd_peer_device *peer_device, int data_size) in drbd_drain_block() argument
1689 page = drbd_alloc_pages(peer_device, 1, 1); in drbd_drain_block()
1695 err = drbd_recv_all_warn(peer_device->connection, data, len); in drbd_drain_block()
1701 drbd_free_pages(peer_device->device, page, 0); in drbd_drain_block()
1705 static int recv_dless_read(struct drbd_peer_device *peer_device, struct drbd_request *req, in recv_dless_read() argument
1712 void *dig_in = peer_device->connection->int_dig_in; in recv_dless_read()
1713 void *dig_vv = peer_device->connection->int_dig_vv; in recv_dless_read()
1716 if (peer_device->connection->peer_integrity_tfm) { in recv_dless_read()
1717 digest_size = crypto_hash_digestsize(peer_device->connection->peer_integrity_tfm); in recv_dless_read()
1718 err = drbd_recv_all_warn(peer_device->connection, dig_in, digest_size); in recv_dless_read()
1726 peer_device->device->recv_cnt += data_size>>9; in recv_dless_read()
1729 D_ASSERT(peer_device->device, sector == bio->bi_iter.bi_sector); in recv_dless_read()
1734 err = drbd_recv_all_warn(peer_device->connection, mapped, expect); in recv_dless_read()
1742 drbd_csum_bio(peer_device->connection->peer_integrity_tfm, bio, dig_vv); in recv_dless_read()
1744 drbd_err(peer_device, "Digest integrity check FAILED. Broken NICs?\n"); in recv_dless_read()
1749 D_ASSERT(peer_device->device, data_size == 0); in recv_dless_read()
1761 struct drbd_peer_device *peer_device = peer_req->peer_device; in e_end_resync_block() local
1762 struct drbd_device *device = peer_device->device; in e_end_resync_block()
1770 err = drbd_send_ack(peer_device, P_RS_WRITE_ACK, peer_req); in e_end_resync_block()
1775 err = drbd_send_ack(peer_device, P_NEG_ACK, peer_req); in e_end_resync_block()
1782 static int recv_resync_read(struct drbd_peer_device *peer_device, sector_t sector, in recv_resync_read() argument
1785 struct drbd_device *device = peer_device->device; in recv_resync_read()
1788 peer_req = read_in_block(peer_device, ID_SYNCER, sector, pi); in recv_resync_read()
1840 struct drbd_peer_device *peer_device; in receive_DataReply() local
1847 peer_device = conn_peer_device(connection, pi->vnr); in receive_DataReply()
1848 if (!peer_device) in receive_DataReply()
1850 device = peer_device->device; in receive_DataReply()
1863 err = recv_dless_read(peer_device, req, sector, pi->size); in receive_DataReply()
1875 struct drbd_peer_device *peer_device; in receive_RSDataReply() local
1881 peer_device = conn_peer_device(connection, pi->vnr); in receive_RSDataReply()
1882 if (!peer_device) in receive_RSDataReply()
1884 device = peer_device->device; in receive_RSDataReply()
1893 err = recv_resync_read(peer_device, sector, pi); in receive_RSDataReply()
1898 err = drbd_drain_block(peer_device, pi->size); in receive_RSDataReply()
1900 drbd_send_ack_dp(peer_device, P_NEG_ACK, p, pi->size); in receive_RSDataReply()
1934 struct drbd_peer_device *peer_device = peer_req->peer_device; in e_end_block() local
1935 struct drbd_device *device = peer_device->device; in e_end_block()
1945 err = drbd_send_ack(peer_device, pcmd, peer_req); in e_end_block()
1949 err = drbd_send_ack(peer_device, P_NEG_ACK, peer_req); in e_end_block()
1977 struct drbd_peer_device *peer_device = peer_req->peer_device; in e_send_ack() local
1980 err = drbd_send_ack(peer_device, ack, peer_req); in e_send_ack()
1981 dec_unacked(peer_device->device); in e_send_ack()
1995 struct drbd_connection *connection = peer_req->peer_device->connection; in e_send_retry_write()
2016 static void update_peer_seq(struct drbd_peer_device *peer_device, unsigned int peer_seq) in update_peer_seq() argument
2018 struct drbd_device *device = peer_device->device; in update_peer_seq()
2021 if (test_bit(RESOLVE_CONFLICTS, &peer_device->connection->flags)) { in update_peer_seq()
2077 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
2079 struct drbd_device *device = peer_device->device; in wait_for_and_update_peer_seq()
2084 if (!test_bit(RESOLVE_CONFLICTS, &peer_device->connection->flags)) in wait_for_and_update_peer_seq()
2110 timeout = rcu_dereference(peer_device->connection->net_conf)->ping_timeo*HZ/10; in wait_for_and_update_peer_seq()
2164 struct drbd_connection *connection = peer_req->peer_device->connection; in handle_write_conflicts()
2272 struct drbd_peer_device *peer_device; in receive_Data() local
2283 peer_device = conn_peer_device(connection, pi->vnr); in receive_Data()
2284 if (!peer_device) in receive_Data()
2286 device = peer_device->device; in receive_Data()
2291 err = wait_for_and_update_peer_seq(peer_device, peer_seq); in receive_Data()
2292 drbd_send_ack_dp(peer_device, P_NEG_ACK, p, pi->size); in receive_Data()
2294 err2 = drbd_drain_block(peer_device, pi->size); in receive_Data()
2307 peer_req = read_in_block(peer_device, p->block_id, sector, pi); in receive_Data()
2324 D_ASSERT(peer_device, peer_req->i.size > 0); in receive_Data()
2325 D_ASSERT(peer_device, rw & REQ_DISCARD); in receive_Data()
2326 D_ASSERT(peer_device, peer_req->pages == NULL); in receive_Data()
2342 nc = rcu_dereference(peer_device->connection->net_conf); in receive_Data()
2344 if (peer_device->connection->agreed_pro_version < 100) { in receive_Data()
2373 err = wait_for_and_update_peer_seq(peer_device, peer_seq); in receive_Data()
2387 update_peer_seq(peer_device, peer_seq); in receive_Data()
2514 struct drbd_peer_device *peer_device; in receive_DataRequest() local
2524 peer_device = conn_peer_device(connection, pi->vnr); in receive_DataRequest()
2525 if (!peer_device) in receive_DataRequest()
2527 device = peer_device->device; in receive_DataRequest()
2548 drbd_send_ack_rp(peer_device, P_NEG_DREPLY, p); in receive_DataRequest()
2553 drbd_send_ack_rp(peer_device, P_NEG_RS_DREPLY , p); in receive_DataRequest()
2558 drbd_send_ack_ex(peer_device, P_OV_RESULT, sector, size, ID_IN_SYNC); in receive_DataRequest()
2568 return drbd_drain_block(peer_device, pi->size); in receive_DataRequest()
2574 peer_req = drbd_alloc_peer_req(peer_device, p->block_id, sector, size, in receive_DataRequest()
2609 if (drbd_recv_all(peer_device->connection, di->digest, pi->size)) in receive_DataRequest()
2613 D_ASSERT(device, peer_device->connection->agreed_pro_version >= 89); in receive_DataRequest()
2632 peer_device->connection->agreed_pro_version >= 90) { in receive_DataRequest()
2719 static int drbd_asb_recover_0p(struct drbd_peer_device *peer_device) __must_hold(local) in drbd_asb_recover_0p() argument
2721 struct drbd_device *device = peer_device->device; in drbd_asb_recover_0p()
2733 after_sb_0p = rcu_dereference(peer_device->connection->net_conf)->after_sb_0p; in drbd_asb_recover_0p()
2768 rv = test_bit(RESOLVE_CONFLICTS, &peer_device->connection->flags) in drbd_asb_recover_0p()
2784 rv = test_bit(RESOLVE_CONFLICTS, &peer_device->connection->flags) in drbd_asb_recover_0p()
2800 static int drbd_asb_recover_1p(struct drbd_peer_device *peer_device) __must_hold(local) in drbd_asb_recover_1p() argument
2802 struct drbd_device *device = peer_device->device; in drbd_asb_recover_1p()
2807 after_sb_1p = rcu_dereference(peer_device->connection->net_conf)->after_sb_1p; in drbd_asb_recover_1p()
2821 hg = drbd_asb_recover_0p(peer_device); in drbd_asb_recover_1p()
2828 rv = drbd_asb_recover_0p(peer_device); in drbd_asb_recover_1p()
2833 hg = drbd_asb_recover_0p(peer_device); in drbd_asb_recover_1p()
2857 static int drbd_asb_recover_2p(struct drbd_peer_device *peer_device) __must_hold(local) in drbd_asb_recover_2p() argument
2859 struct drbd_device *device = peer_device->device; in drbd_asb_recover_2p()
2864 after_sb_2p = rcu_dereference(peer_device->connection->net_conf)->after_sb_2p; in drbd_asb_recover_2p()
2878 rv = drbd_asb_recover_0p(peer_device); in drbd_asb_recover_2p()
2883 hg = drbd_asb_recover_0p(peer_device); in drbd_asb_recover_2p()
2935 struct drbd_peer_device *const peer_device = first_peer_device(device); in drbd_uuid_compare() local
2936 struct drbd_connection *const connection = peer_device ? peer_device->connection : NULL; in drbd_uuid_compare()
3120 static enum drbd_conns drbd_sync_handshake(struct drbd_peer_device *peer_device, in drbd_sync_handshake() argument
3124 struct drbd_device *device = peer_device->device; in drbd_sync_handshake()
3169 nc = rcu_dereference(peer_device->connection->net_conf); in drbd_sync_handshake()
3178 hg = drbd_asb_recover_0p(peer_device); in drbd_sync_handshake()
3181 hg = drbd_asb_recover_1p(peer_device); in drbd_sync_handshake()
3184 hg = drbd_asb_recover_2p(peer_device); in drbd_sync_handshake()
3244 if (tentative || test_bit(CONN_DRY_RUN, &peer_device->connection->flags)) { in drbd_sync_handshake()
3502 struct drbd_peer_device *peer_device; in receive_SyncParam() local
3515 peer_device = conn_peer_device(connection, pi->vnr); in receive_SyncParam()
3516 if (!peer_device) in receive_SyncParam()
3518 device = peer_device->device; in receive_SyncParam()
3549 err = drbd_recv_all(peer_device->connection, p, header_size); in receive_SyncParam()
3554 old_net_conf = peer_device->connection->net_conf; in receive_SyncParam()
3580 err = drbd_recv_all(peer_device->connection, p->verify_alg, data_size); in receive_SyncParam()
3654 crypto_free_hash(peer_device->connection->verify_tfm); in receive_SyncParam()
3655 peer_device->connection->verify_tfm = verify_tfm; in receive_SyncParam()
3661 crypto_free_hash(peer_device->connection->csums_tfm); in receive_SyncParam()
3662 peer_device->connection->csums_tfm = csums_tfm; in receive_SyncParam()
3708 conn_request_state(peer_device->connection, NS(conn, C_DISCONNECTING), CS_HARD); in receive_SyncParam()
3727 struct drbd_peer_device *peer_device; in receive_sizes() local
3735 peer_device = conn_peer_device(connection, pi->vnr); in receive_sizes()
3736 if (!peer_device) in receive_sizes()
3738 device = peer_device->device; in receive_sizes()
3770 conn_request_state(peer_device->connection, NS(conn, C_DISCONNECTING), CS_HARD); in receive_sizes()
3848 drbd_send_sizes(peer_device, 0, ddsf); in receive_sizes()
3868 struct drbd_peer_device *peer_device; in receive_uuids() local
3874 peer_device = conn_peer_device(connection, pi->vnr); in receive_uuids()
3875 if (!peer_device) in receive_uuids()
3877 device = peer_device->device; in receive_uuids()
3897 conn_request_state(peer_device->connection, NS(conn, C_DISCONNECTING), CS_HARD); in receive_uuids()
3904 peer_device->connection->agreed_pro_version >= 90 && in receive_uuids()
3975 struct drbd_peer_device *peer_device; in receive_req_state() local
3981 peer_device = conn_peer_device(connection, pi->vnr); in receive_req_state()
3982 if (!peer_device) in receive_req_state()
3984 device = peer_device->device; in receive_req_state()
3989 if (test_bit(RESOLVE_CONFLICTS, &peer_device->connection->flags) && in receive_req_state()
3991 drbd_send_sr_reply(peer_device, SS_CONCURRENT_ST_CHG); in receive_req_state()
3999 drbd_send_sr_reply(peer_device, rv); in receive_req_state()
4032 struct drbd_peer_device *peer_device; in receive_state() local
4040 peer_device = conn_peer_device(connection, pi->vnr); in receive_state()
4041 if (!peer_device) in receive_state()
4043 device = peer_device->device; in receive_state()
4138 ns.conn = drbd_sync_handshake(peer_device, peer_state.role, real_peer_disk); in receive_state()
4150 if (test_and_clear_bit(CONN_DRY_RUN, &peer_device->connection->flags)) in receive_state()
4153 conn_request_state(peer_device->connection, NS(conn, C_DISCONNECTING), CS_HARD); in receive_state()
4175 tl_clear(peer_device->connection); in receive_state()
4178 conn_request_state(peer_device->connection, NS2(conn, C_PROTOCOL_ERROR, susp, 0), CS_HARD); in receive_state()
4186 conn_request_state(peer_device->connection, NS(conn, C_DISCONNECTING), CS_HARD); in receive_state()
4196 drbd_send_uuids(peer_device); in receive_state()
4197 drbd_send_current_state(peer_device); in receive_state()
4210 struct drbd_peer_device *peer_device; in receive_sync_uuid() local
4214 peer_device = conn_peer_device(connection, pi->vnr); in receive_sync_uuid()
4215 if (!peer_device) in receive_sync_uuid()
4217 device = peer_device->device; in receive_sync_uuid()
4250 receive_bitmap_plain(struct drbd_peer_device *peer_device, unsigned int size, in receive_bitmap_plain() argument
4254 drbd_header_size(peer_device->connection); in receive_bitmap_plain()
4261 drbd_err(peer_device, "%s:want (%u) != size (%u)\n", __func__, want, size); in receive_bitmap_plain()
4266 err = drbd_recv_all(peer_device->connection, p, want); in receive_bitmap_plain()
4270 drbd_bm_merge_lel(peer_device->device, c->word_offset, num_words, p); in receive_bitmap_plain()
4302 recv_bm_rle_bits(struct drbd_peer_device *peer_device, in recv_bm_rle_bits() argument
4331 drbd_err(peer_device, "bitmap overflow (e:%lu) while decoding bm RLE packet\n", e); in recv_bm_rle_bits()
4334 _drbd_bm_set_bits(peer_device->device, s, e); in recv_bm_rle_bits()
4338 drbd_err(peer_device, "bitmap decoding error: h:%d b:%d la:0x%08llx l:%u/%u\n", in recv_bm_rle_bits()
4371 decode_bitmap_c(struct drbd_peer_device *peer_device, in decode_bitmap_c() argument
4377 return recv_bm_rle_bits(peer_device, p, c, len - sizeof(*p)); in decode_bitmap_c()
4383 drbd_err(peer_device, "receive_bitmap_c: unknown encoding %u\n", p->encoding); in decode_bitmap_c()
4384 conn_request_state(peer_device->connection, NS(conn, C_PROTOCOL_ERROR), CS_HARD); in decode_bitmap_c()
4434 struct drbd_peer_device *peer_device; in receive_bitmap() local
4439 peer_device = conn_peer_device(connection, pi->vnr); in receive_bitmap()
4440 if (!peer_device) in receive_bitmap()
4442 device = peer_device->device; in receive_bitmap()
4455 err = receive_bitmap_plain(peer_device, pi->size, pi->data, &c); in receive_bitmap()
4471 err = drbd_recv_all(peer_device->connection, p, pi->size); in receive_bitmap()
4474 err = decode_bitmap_c(peer_device, p, &c, pi->size); in receive_bitmap()
4489 err = drbd_recv_header(peer_device->connection, pi); in receive_bitmap()
4539 struct drbd_peer_device *peer_device; in receive_out_of_sync() local
4543 peer_device = conn_peer_device(connection, pi->vnr); in receive_out_of_sync()
4544 if (!peer_device) in receive_out_of_sync()
4546 device = peer_device->device; in receive_out_of_sync()
4649 struct drbd_peer_device *peer_device; in conn_disconnect() local
4668 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { in conn_disconnect()
4669 struct drbd_device *device = peer_device->device; in conn_disconnect()
4672 drbd_disconnected(peer_device); in conn_disconnect()
4700 static int drbd_disconnected(struct drbd_peer_device *peer_device) in drbd_disconnected() argument
4702 struct drbd_device *device = peer_device->device; in drbd_disconnected()
4734 drbd_flush_workqueue(&peer_device->connection->sender_work); in drbd_disconnected()
4741 drbd_flush_workqueue(&peer_device->connection->sender_work); in drbd_disconnected()
4751 tl_clear(peer_device->connection); in drbd_disconnected()
5117 struct drbd_peer_device *peer_device; in got_RqSReply() local
5122 peer_device = conn_peer_device(connection, pi->vnr); in got_RqSReply()
5123 if (!peer_device) in got_RqSReply()
5125 device = peer_device->device; in got_RqSReply()
5162 struct drbd_peer_device *peer_device; in got_IsInSync() local
5168 peer_device = conn_peer_device(connection, pi->vnr); in got_IsInSync()
5169 if (!peer_device) in got_IsInSync()
5171 device = peer_device->device; in got_IsInSync()
5173 D_ASSERT(device, peer_device->connection->agreed_pro_version >= 89); in got_IsInSync()
5175 update_peer_seq(peer_device, be32_to_cpu(p->seq_num)); in got_IsInSync()
5214 struct drbd_peer_device *peer_device; in got_BlockAck() local
5221 peer_device = conn_peer_device(connection, pi->vnr); in got_BlockAck()
5222 if (!peer_device) in got_BlockAck()
5224 device = peer_device->device; in got_BlockAck()
5226 update_peer_seq(peer_device, be32_to_cpu(p->seq_num)); in got_BlockAck()
5260 struct drbd_peer_device *peer_device; in got_NegAck() local
5267 peer_device = conn_peer_device(connection, pi->vnr); in got_NegAck()
5268 if (!peer_device) in got_NegAck()
5270 device = peer_device->device; in got_NegAck()
5272 update_peer_seq(peer_device, be32_to_cpu(p->seq_num)); in got_NegAck()
5296 struct drbd_peer_device *peer_device; in got_NegDReply() local
5301 peer_device = conn_peer_device(connection, pi->vnr); in got_NegDReply()
5302 if (!peer_device) in got_NegDReply()
5304 device = peer_device->device; in got_NegDReply()
5306 update_peer_seq(peer_device, be32_to_cpu(p->seq_num)); in got_NegDReply()
5318 struct drbd_peer_device *peer_device; in got_NegRSDReply() local
5324 peer_device = conn_peer_device(connection, pi->vnr); in got_NegRSDReply()
5325 if (!peer_device) in got_NegRSDReply()
5327 device = peer_device->device; in got_NegRSDReply()
5332 update_peer_seq(peer_device, be32_to_cpu(p->seq_num)); in got_NegRSDReply()
5355 struct drbd_peer_device *peer_device; in got_BarrierAck() local
5361 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { in got_BarrierAck()
5362 struct drbd_device *device = peer_device->device; in got_BarrierAck()
5378 struct drbd_peer_device *peer_device; in got_OVResult() local
5385 peer_device = conn_peer_device(connection, pi->vnr); in got_OVResult()
5386 if (!peer_device) in got_OVResult()
5388 device = peer_device->device; in got_OVResult()
5393 update_peer_seq(peer_device, be32_to_cpu(p->seq_num)); in got_OVResult()
5417 drbd_queue_work(&peer_device->connection->sender_work, &dw->w); in got_OVResult()
5435 struct drbd_peer_device *peer_device; in connection_finish_peer_reqs() local
5443 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { in connection_finish_peer_reqs()
5444 struct drbd_device *device = peer_device->device; in connection_finish_peer_reqs()
5457 idr_for_each_entry(&connection->peer_devices, peer_device, vnr) { in connection_finish_peer_reqs()
5458 struct drbd_device *device = peer_device->device; in connection_finish_peer_reqs()