• Home
  • Raw
  • Download

Lines Matching refs:peer_req

204 	struct drbd_peer_request *peer_req, *tmp;  in reclaim_finished_net_peer_reqs()  local
211 list_for_each_entry_safe(peer_req, tmp, &device->net_ee, w.list) { in reclaim_finished_net_peer_reqs()
212 if (drbd_peer_req_has_active_page(peer_req)) in reclaim_finished_net_peer_reqs()
214 list_move(&peer_req->w.list, to_be_freed); in reclaim_finished_net_peer_reqs()
221 struct drbd_peer_request *peer_req, *t; in drbd_kick_lo_and_reclaim_net() local
227 list_for_each_entry_safe(peer_req, t, &reclaimed, w.list) in drbd_kick_lo_and_reclaim_net()
228 drbd_free_net_peer_req(device, peer_req); in drbd_kick_lo_and_reclaim_net()
345 struct drbd_peer_request *peer_req; in drbd_alloc_peer_req() local
352 peer_req = mempool_alloc(drbd_ee_mempool, gfp_mask & ~__GFP_HIGHMEM); in drbd_alloc_peer_req()
353 if (!peer_req) { in drbd_alloc_peer_req()
366 memset(peer_req, 0, sizeof(*peer_req)); in drbd_alloc_peer_req()
367 INIT_LIST_HEAD(&peer_req->w.list); in drbd_alloc_peer_req()
368 drbd_clear_interval(&peer_req->i); in drbd_alloc_peer_req()
369 peer_req->i.size = data_size; in drbd_alloc_peer_req()
370 peer_req->i.sector = sector; in drbd_alloc_peer_req()
371 peer_req->submit_jif = jiffies; in drbd_alloc_peer_req()
372 peer_req->peer_device = peer_device; in drbd_alloc_peer_req()
373 peer_req->pages = page; in drbd_alloc_peer_req()
378 peer_req->block_id = id; in drbd_alloc_peer_req()
380 return peer_req; in drbd_alloc_peer_req()
383 mempool_free(peer_req, drbd_ee_mempool); in drbd_alloc_peer_req()
387 void __drbd_free_peer_req(struct drbd_device *device, struct drbd_peer_request *peer_req, in __drbd_free_peer_req() argument
391 if (peer_req->flags & EE_HAS_DIGEST) in __drbd_free_peer_req()
392 kfree(peer_req->digest); in __drbd_free_peer_req()
393 drbd_free_pages(device, peer_req->pages, is_net); in __drbd_free_peer_req()
394 D_ASSERT(device, atomic_read(&peer_req->pending_bios) == 0); in __drbd_free_peer_req()
395 D_ASSERT(device, drbd_interval_empty(&peer_req->i)); in __drbd_free_peer_req()
396 if (!expect(!(peer_req->flags & EE_CALL_AL_COMPLETE_IO))) { in __drbd_free_peer_req()
397 peer_req->flags &= ~EE_CALL_AL_COMPLETE_IO; in __drbd_free_peer_req()
398 drbd_al_complete_io(device, &peer_req->i); in __drbd_free_peer_req()
400 mempool_free(peer_req, drbd_ee_mempool); in __drbd_free_peer_req()
406 struct drbd_peer_request *peer_req, *t; in drbd_free_peer_reqs() local
414 list_for_each_entry_safe(peer_req, t, &work_list, w.list) { in drbd_free_peer_reqs()
415 __drbd_free_peer_req(device, peer_req, is_net); in drbd_free_peer_reqs()
428 struct drbd_peer_request *peer_req, *t; in drbd_finish_peer_reqs() local
436 list_for_each_entry_safe(peer_req, t, &reclaimed, w.list) in drbd_finish_peer_reqs()
437 drbd_free_net_peer_req(device, peer_req); in drbd_finish_peer_reqs()
443 list_for_each_entry_safe(peer_req, t, &work_list, w.list) { in drbd_finish_peer_reqs()
447 err2 = peer_req->w.cb(&peer_req->w, !!err); in drbd_finish_peer_reqs()
450 drbd_free_peer_req(device, peer_req); in drbd_finish_peer_reqs()
1368 struct drbd_peer_request *peer_req, in drbd_submit_peer_request() argument
1373 struct page *page = peer_req->pages; in drbd_submit_peer_request()
1374 sector_t sector = peer_req->i.sector; in drbd_submit_peer_request()
1375 unsigned data_size = peer_req->i.size; in drbd_submit_peer_request()
1380 if (peer_req->flags & EE_IS_TRIM_USE_ZEROOUT) { in drbd_submit_peer_request()
1386 peer_req->submit_jif = jiffies; in drbd_submit_peer_request()
1387 peer_req->flags |= EE_SUBMITTED; in drbd_submit_peer_request()
1389 list_add_tail(&peer_req->w.list, &device->active_ee); in drbd_submit_peer_request()
1393 peer_req->flags |= EE_WAS_ERROR; in drbd_submit_peer_request()
1394 drbd_endio_write_sec_final(peer_req); in drbd_submit_peer_request()
1401 if (peer_req->flags & EE_IS_TRIM) in drbd_submit_peer_request()
1422 bio->bi_private = peer_req; in drbd_submit_peer_request()
1458 atomic_set(&peer_req->pending_bios, n_bios); in drbd_submit_peer_request()
1460 peer_req->submit_jif = jiffies; in drbd_submit_peer_request()
1461 peer_req->flags |= EE_SUBMITTED; in drbd_submit_peer_request()
1481 struct drbd_peer_request *peer_req) in drbd_remove_epoch_entry_interval() argument
1483 struct drbd_interval *i = &peer_req->i; in drbd_remove_epoch_entry_interval()
1593 struct drbd_peer_request *peer_req; in read_in_block() local
1639 peer_req = drbd_alloc_peer_req(peer_device, id, sector, data_size, trim == NULL, GFP_NOIO); in read_in_block()
1640 if (!peer_req) in read_in_block()
1643 peer_req->flags |= EE_WRITE; in read_in_block()
1645 return peer_req; in read_in_block()
1648 page = peer_req->pages; in read_in_block()
1659 drbd_free_peer_req(device, peer_req); in read_in_block()
1666 drbd_csum_ee(peer_device->connection->peer_integrity_tfm, peer_req, dig_vv); in read_in_block()
1670 drbd_free_peer_req(device, peer_req); in read_in_block()
1675 return peer_req; in read_in_block()
1760 struct drbd_peer_request *peer_req = in e_end_resync_block() local
1762 struct drbd_peer_device *peer_device = peer_req->peer_device; in e_end_resync_block()
1764 sector_t sector = peer_req->i.sector; in e_end_resync_block()
1767 D_ASSERT(device, drbd_interval_empty(&peer_req->i)); in e_end_resync_block()
1769 if (likely((peer_req->flags & EE_WAS_ERROR) == 0)) { in e_end_resync_block()
1770 drbd_set_in_sync(device, sector, peer_req->i.size); in e_end_resync_block()
1771 err = drbd_send_ack(peer_device, P_RS_WRITE_ACK, peer_req); in e_end_resync_block()
1774 drbd_rs_failed_io(device, sector, peer_req->i.size); in e_end_resync_block()
1776 err = drbd_send_ack(peer_device, P_NEG_ACK, peer_req); in e_end_resync_block()
1787 struct drbd_peer_request *peer_req; in recv_resync_read() local
1789 peer_req = read_in_block(peer_device, ID_SYNCER, sector, pi); in recv_resync_read()
1790 if (!peer_req) in recv_resync_read()
1799 peer_req->w.cb = e_end_resync_block; in recv_resync_read()
1800 peer_req->submit_jif = jiffies; in recv_resync_read()
1803 list_add_tail(&peer_req->w.list, &device->sync_ee); in recv_resync_read()
1807 if (drbd_submit_peer_request(device, peer_req, WRITE, DRBD_FAULT_RS_WR) == 0) in recv_resync_read()
1813 list_del(&peer_req->w.list); in recv_resync_read()
1816 drbd_free_peer_req(device, peer_req); in recv_resync_read()
1933 struct drbd_peer_request *peer_req = in e_end_block() local
1935 struct drbd_peer_device *peer_device = peer_req->peer_device; in e_end_block()
1937 sector_t sector = peer_req->i.sector; in e_end_block()
1940 if (peer_req->flags & EE_SEND_WRITE_ACK) { in e_end_block()
1941 if (likely((peer_req->flags & EE_WAS_ERROR) == 0)) { in e_end_block()
1944 peer_req->flags & EE_MAY_SET_IN_SYNC) ? in e_end_block()
1946 err = drbd_send_ack(peer_device, pcmd, peer_req); in e_end_block()
1948 drbd_set_in_sync(device, sector, peer_req->i.size); in e_end_block()
1950 err = drbd_send_ack(peer_device, P_NEG_ACK, peer_req); in e_end_block()
1959 if (peer_req->flags & EE_IN_INTERVAL_TREE) { in e_end_block()
1961 D_ASSERT(device, !drbd_interval_empty(&peer_req->i)); in e_end_block()
1962 drbd_remove_epoch_entry_interval(device, peer_req); in e_end_block()
1963 if (peer_req->flags & EE_RESTART_REQUESTS) in e_end_block()
1964 restart_conflicting_writes(device, sector, peer_req->i.size); in e_end_block()
1967 D_ASSERT(device, drbd_interval_empty(&peer_req->i)); in e_end_block()
1969 …drbd_may_finish_epoch(first_peer_device(device)->connection, peer_req->epoch, EV_PUT + (cancel ? E… in e_end_block()
1976 struct drbd_peer_request *peer_req = in e_send_ack() local
1978 struct drbd_peer_device *peer_device = peer_req->peer_device; in e_send_ack()
1981 err = drbd_send_ack(peer_device, ack, peer_req); in e_send_ack()
1994 struct drbd_peer_request *peer_req = in e_send_retry_write() local
1996 struct drbd_connection *connection = peer_req->peer_device->connection; in e_send_retry_write()
2039 static bool overlapping_resync_write(struct drbd_device *device, struct drbd_peer_request *peer_req) in overlapping_resync_write() argument
2046 if (overlaps(peer_req->i.sector, peer_req->i.size, in overlapping_resync_write()
2163 struct drbd_peer_request *peer_req) in handle_write_conflicts() argument
2165 struct drbd_connection *connection = peer_req->peer_device->connection; in handle_write_conflicts()
2167 sector_t sector = peer_req->i.sector; in handle_write_conflicts()
2168 const unsigned int size = peer_req->i.size; in handle_write_conflicts()
2177 drbd_insert_interval(&device->write_requests, &peer_req->i); in handle_write_conflicts()
2181 if (i == &peer_req->i) in handle_write_conflicts()
2217 peer_req->w.cb = superseded ? e_send_superseded : in handle_write_conflicts()
2219 list_add_tail(&peer_req->w.list, &device->done_ee); in handle_write_conflicts()
2259 peer_req->flags |= EE_RESTART_REQUESTS; in handle_write_conflicts()
2266 drbd_remove_epoch_entry_interval(device, peer_req); in handle_write_conflicts()
2277 struct drbd_peer_request *peer_req; in receive_Data() local
2308 peer_req = read_in_block(peer_device, p->block_id, sector, pi); in receive_Data()
2309 if (!peer_req) { in receive_Data()
2314 peer_req->w.cb = e_end_block; in receive_Data()
2315 peer_req->submit_jif = jiffies; in receive_Data()
2316 peer_req->flags |= EE_APPLICATION; in receive_Data()
2322 peer_req->flags |= EE_IS_TRIM; in receive_Data()
2324 peer_req->flags |= EE_IS_TRIM_USE_ZEROOUT; in receive_Data()
2325 D_ASSERT(peer_device, peer_req->i.size > 0); in receive_Data()
2327 D_ASSERT(peer_device, peer_req->pages == NULL); in receive_Data()
2328 } else if (peer_req->pages == NULL) { in receive_Data()
2329 D_ASSERT(device, peer_req->i.size == 0); in receive_Data()
2334 peer_req->flags |= EE_MAY_SET_IN_SYNC; in receive_Data()
2337 peer_req->epoch = connection->current_epoch; in receive_Data()
2338 atomic_inc(&peer_req->epoch->epoch_size); in receive_Data()
2339 atomic_inc(&peer_req->epoch->active); in receive_Data()
2358 peer_req->flags |= EE_SEND_WRITE_ACK; in receive_Data()
2367 drbd_send_ack(first_peer_device(device), P_RECV_ACK, peer_req); in receive_Data()
2373 peer_req->flags |= EE_IN_INTERVAL_TREE; in receive_Data()
2378 err = handle_write_conflicts(device, peer_req); in receive_Data()
2395 if ((peer_req->flags & EE_IS_TRIM_USE_ZEROOUT) == 0) in receive_Data()
2396 list_add_tail(&peer_req->w.list, &device->active_ee); in receive_Data()
2400 wait_event(device->ee_wait, !overlapping_resync_write(device, peer_req)); in receive_Data()
2404 drbd_set_out_of_sync(device, peer_req->i.sector, peer_req->i.size); in receive_Data()
2405 peer_req->flags &= ~EE_MAY_SET_IN_SYNC; in receive_Data()
2406 drbd_al_begin_io(device, &peer_req->i); in receive_Data()
2407 peer_req->flags |= EE_CALL_AL_COMPLETE_IO; in receive_Data()
2410 err = drbd_submit_peer_request(device, peer_req, rw, DRBD_FAULT_DT_WR); in receive_Data()
2417 list_del(&peer_req->w.list); in receive_Data()
2418 drbd_remove_epoch_entry_interval(device, peer_req); in receive_Data()
2420 if (peer_req->flags & EE_CALL_AL_COMPLETE_IO) { in receive_Data()
2421 peer_req->flags &= ~EE_CALL_AL_COMPLETE_IO; in receive_Data()
2422 drbd_al_complete_io(device, &peer_req->i); in receive_Data()
2426 drbd_may_finish_epoch(connection, peer_req->epoch, EV_PUT + EV_CLEANUP); in receive_Data()
2428 drbd_free_peer_req(device, peer_req); in receive_Data()
2519 struct drbd_peer_request *peer_req; in receive_DataRequest() local
2575 peer_req = drbd_alloc_peer_req(peer_device, p->block_id, sector, size, in receive_DataRequest()
2577 if (!peer_req) { in receive_DataRequest()
2584 peer_req->w.cb = w_e_end_data_req; in receive_DataRequest()
2587 peer_req->flags |= EE_APPLICATION; in receive_DataRequest()
2591 peer_req->w.cb = w_e_end_rsdata_req; in receive_DataRequest()
2607 peer_req->digest = di; in receive_DataRequest()
2608 peer_req->flags |= EE_HAS_DIGEST; in receive_DataRequest()
2615 peer_req->w.cb = w_e_end_csum_rs_req; in receive_DataRequest()
2623 peer_req->w.cb = w_e_end_ov_reply; in receive_DataRequest()
2647 peer_req->w.cb = w_e_end_ov_req; in receive_DataRequest()
2683 list_add_tail(&peer_req->w.list, &device->read_ee); in receive_DataRequest()
2700 if (drbd_submit_peer_request(device, peer_req, READ, fault_type) == 0) in receive_DataRequest()
2708 list_del(&peer_req->w.list); in receive_DataRequest()
2713 drbd_free_peer_req(device, peer_req); in receive_DataRequest()