Lines Matching refs:peer_req

97 static void drbd_endio_read_sec_final(struct drbd_peer_request *peer_req) __releases(local)  in drbd_endio_read_sec_final()  argument
100 struct drbd_peer_device *peer_device = peer_req->peer_device; in drbd_endio_read_sec_final()
104 device->read_cnt += peer_req->i.size >> 9; in drbd_endio_read_sec_final()
105 list_del(&peer_req->w.list); in drbd_endio_read_sec_final()
108 if (test_bit(__EE_WAS_ERROR, &peer_req->flags)) in drbd_endio_read_sec_final()
112 drbd_queue_work(&peer_device->connection->sender_work, &peer_req->w); in drbd_endio_read_sec_final()
118 void drbd_endio_write_sec_final(struct drbd_peer_request *peer_req) __releases(local) in drbd_endio_write_sec_final() argument
121 struct drbd_peer_device *peer_device = peer_req->peer_device; in drbd_endio_write_sec_final()
132 i = peer_req->i; in drbd_endio_write_sec_final()
133 do_al_complete_io = peer_req->flags & EE_CALL_AL_COMPLETE_IO; in drbd_endio_write_sec_final()
134 block_id = peer_req->block_id; in drbd_endio_write_sec_final()
135 peer_req->flags &= ~EE_CALL_AL_COMPLETE_IO; in drbd_endio_write_sec_final()
138 device->writ_cnt += peer_req->i.size >> 9; in drbd_endio_write_sec_final()
139 list_move_tail(&peer_req->w.list, &device->done_ee); in drbd_endio_write_sec_final()
153 if (peer_req->flags & EE_WAS_ERROR) in drbd_endio_write_sec_final()
175 struct drbd_peer_request *peer_req = bio->bi_private; in drbd_peer_request_endio() local
176 struct drbd_device *device = peer_req->peer_device->device; in drbd_peer_request_endio()
185 (unsigned long long)peer_req->i.sector); in drbd_peer_request_endio()
190 (unsigned long long)peer_req->i.sector); in drbd_peer_request_endio()
198 set_bit(__EE_WAS_ERROR, &peer_req->flags); in drbd_peer_request_endio()
201 if (atomic_dec_and_test(&peer_req->pending_bios)) { in drbd_peer_request_endio()
203 drbd_endio_write_sec_final(peer_req); in drbd_peer_request_endio()
205 drbd_endio_read_sec_final(peer_req); in drbd_peer_request_endio()
294 void drbd_csum_ee(struct crypto_hash *tfm, struct drbd_peer_request *peer_req, void *digest) in drbd_csum_ee() argument
298 struct page *page = peer_req->pages; in drbd_csum_ee()
315 len = peer_req->i.size & (PAGE_SIZE - 1); in drbd_csum_ee()
344 struct drbd_peer_request *peer_req = container_of(w, struct drbd_peer_request, w); in w_e_send_csum() local
345 struct drbd_peer_device *peer_device = peer_req->peer_device; in w_e_send_csum()
354 if (unlikely((peer_req->flags & EE_WAS_ERROR) != 0)) in w_e_send_csum()
360 sector_t sector = peer_req->i.sector; in w_e_send_csum()
361 unsigned int size = peer_req->i.size; in w_e_send_csum()
362 drbd_csum_ee(peer_device->connection->csums_tfm, peer_req, digest); in w_e_send_csum()
368 drbd_free_peer_req(device, peer_req); in w_e_send_csum()
369 peer_req = NULL; in w_e_send_csum()
381 if (peer_req) in w_e_send_csum()
382 drbd_free_peer_req(device, peer_req); in w_e_send_csum()
394 struct drbd_peer_request *peer_req; in read_for_csum() local
401 peer_req = drbd_alloc_peer_req(peer_device, ID_SYNCER /* unused */, sector, in read_for_csum()
403 if (!peer_req) in read_for_csum()
406 peer_req->w.cb = w_e_send_csum; in read_for_csum()
408 list_add_tail(&peer_req->w.list, &device->read_ee); in read_for_csum()
412 if (drbd_submit_peer_request(device, peer_req, READ, DRBD_FAULT_RS_RD) == 0) in read_for_csum()
420 list_del(&peer_req->w.list); in read_for_csum()
423 drbd_free_peer_req(device, peer_req); in read_for_csum()
997 static void move_to_net_ee_or_free(struct drbd_device *device, struct drbd_peer_request *peer_req) in move_to_net_ee_or_free() argument
999 if (drbd_peer_req_has_active_page(peer_req)) { in move_to_net_ee_or_free()
1001 int i = (peer_req->i.size + PAGE_SIZE -1) >> PAGE_SHIFT; in move_to_net_ee_or_free()
1005 list_add_tail(&peer_req->w.list, &device->net_ee); in move_to_net_ee_or_free()
1009 drbd_free_peer_req(device, peer_req); in move_to_net_ee_or_free()
1020 struct drbd_peer_request *peer_req = container_of(w, struct drbd_peer_request, w); in w_e_end_data_req() local
1021 struct drbd_peer_device *peer_device = peer_req->peer_device; in w_e_end_data_req()
1026 drbd_free_peer_req(device, peer_req); in w_e_end_data_req()
1031 if (likely((peer_req->flags & EE_WAS_ERROR) == 0)) { in w_e_end_data_req()
1032 err = drbd_send_block(peer_device, P_DATA_REPLY, peer_req); in w_e_end_data_req()
1036 (unsigned long long)peer_req->i.sector); in w_e_end_data_req()
1038 err = drbd_send_ack(peer_device, P_NEG_DREPLY, peer_req); in w_e_end_data_req()
1043 move_to_net_ee_or_free(device, peer_req); in w_e_end_data_req()
1057 struct drbd_peer_request *peer_req = container_of(w, struct drbd_peer_request, w); in w_e_end_rsdata_req() local
1058 struct drbd_peer_device *peer_device = peer_req->peer_device; in w_e_end_rsdata_req()
1063 drbd_free_peer_req(device, peer_req); in w_e_end_rsdata_req()
1069 drbd_rs_complete_io(device, peer_req->i.sector); in w_e_end_rsdata_req()
1074 err = drbd_send_ack(peer_device, P_RS_CANCEL, peer_req); in w_e_end_rsdata_req()
1075 } else if (likely((peer_req->flags & EE_WAS_ERROR) == 0)) { in w_e_end_rsdata_req()
1078 err = drbd_send_block(peer_device, P_RS_DATA_REPLY, peer_req); in w_e_end_rsdata_req()
1088 (unsigned long long)peer_req->i.sector); in w_e_end_rsdata_req()
1090 err = drbd_send_ack(peer_device, P_NEG_RS_DREPLY, peer_req); in w_e_end_rsdata_req()
1093 drbd_rs_failed_io(device, peer_req->i.sector, peer_req->i.size); in w_e_end_rsdata_req()
1098 move_to_net_ee_or_free(device, peer_req); in w_e_end_rsdata_req()
1107 struct drbd_peer_request *peer_req = container_of(w, struct drbd_peer_request, w); in w_e_end_csum_rs_req() local
1108 struct drbd_peer_device *peer_device = peer_req->peer_device; in w_e_end_csum_rs_req()
1116 drbd_free_peer_req(device, peer_req); in w_e_end_csum_rs_req()
1122 drbd_rs_complete_io(device, peer_req->i.sector); in w_e_end_csum_rs_req()
1126 di = peer_req->digest; in w_e_end_csum_rs_req()
1128 if (likely((peer_req->flags & EE_WAS_ERROR) == 0)) { in w_e_end_csum_rs_req()
1138 drbd_csum_ee(peer_device->connection->csums_tfm, peer_req, digest); in w_e_end_csum_rs_req()
1144 drbd_set_in_sync(device, peer_req->i.sector, peer_req->i.size); in w_e_end_csum_rs_req()
1146 device->rs_same_csum += peer_req->i.size >> BM_BLOCK_SHIFT; in w_e_end_csum_rs_req()
1147 err = drbd_send_ack(peer_device, P_RS_IS_IN_SYNC, peer_req); in w_e_end_csum_rs_req()
1150 peer_req->block_id = ID_SYNCER; /* By setting block_id, digest pointer becomes invalid! */ in w_e_end_csum_rs_req()
1151 peer_req->flags &= ~EE_HAS_DIGEST; /* This peer request no longer has a digest pointer */ in w_e_end_csum_rs_req()
1153 err = drbd_send_block(peer_device, P_RS_DATA_REPLY, peer_req); in w_e_end_csum_rs_req()
1156 err = drbd_send_ack(peer_device, P_NEG_RS_DREPLY, peer_req); in w_e_end_csum_rs_req()
1162 move_to_net_ee_or_free(device, peer_req); in w_e_end_csum_rs_req()
1171 struct drbd_peer_request *peer_req = container_of(w, struct drbd_peer_request, w); in w_e_end_ov_req() local
1172 struct drbd_peer_device *peer_device = peer_req->peer_device; in w_e_end_ov_req()
1174 sector_t sector = peer_req->i.sector; in w_e_end_ov_req()
1175 unsigned int size = peer_req->i.size; in w_e_end_ov_req()
1190 if (likely(!(peer_req->flags & EE_WAS_ERROR))) in w_e_end_ov_req()
1191 drbd_csum_ee(peer_device->connection->verify_tfm, peer_req, digest); in w_e_end_ov_req()
1200 drbd_free_peer_req(device, peer_req); in w_e_end_ov_req()
1201 peer_req = NULL; in w_e_end_ov_req()
1209 if (peer_req) in w_e_end_ov_req()
1210 drbd_free_peer_req(device, peer_req); in w_e_end_ov_req()
1228 struct drbd_peer_request *peer_req = container_of(w, struct drbd_peer_request, w); in w_e_end_ov_reply() local
1229 struct drbd_peer_device *peer_device = peer_req->peer_device; in w_e_end_ov_reply()
1233 sector_t sector = peer_req->i.sector; in w_e_end_ov_reply()
1234 unsigned int size = peer_req->i.size; in w_e_end_ov_reply()
1240 drbd_free_peer_req(device, peer_req); in w_e_end_ov_reply()
1248 drbd_rs_complete_io(device, peer_req->i.sector); in w_e_end_ov_reply()
1252 di = peer_req->digest; in w_e_end_ov_reply()
1254 if (likely((peer_req->flags & EE_WAS_ERROR) == 0)) { in w_e_end_ov_reply()
1258 drbd_csum_ee(peer_device->connection->verify_tfm, peer_req, digest); in w_e_end_ov_reply()
1271 drbd_free_peer_req(device, peer_req); in w_e_end_ov_reply()