Lines Matching refs:req

32 			       struct ceph_osd_request *req);
34 struct ceph_osd_request *req);
36 struct ceph_osd_request *req);
37 static void __enqueue_request(struct ceph_osd_request *req);
39 struct ceph_osd_request *req);
309 struct ceph_osd_request *req = container_of(kref, in ceph_osdc_release_request() local
313 dout("%s %p (r_request %p r_reply %p)\n", __func__, req, in ceph_osdc_release_request()
314 req->r_request, req->r_reply); in ceph_osdc_release_request()
315 WARN_ON(!RB_EMPTY_NODE(&req->r_node)); in ceph_osdc_release_request()
316 WARN_ON(!list_empty(&req->r_req_lru_item)); in ceph_osdc_release_request()
317 WARN_ON(!list_empty(&req->r_osd_item)); in ceph_osdc_release_request()
318 WARN_ON(!list_empty(&req->r_linger_item)); in ceph_osdc_release_request()
319 WARN_ON(!list_empty(&req->r_linger_osd_item)); in ceph_osdc_release_request()
320 WARN_ON(req->r_osd); in ceph_osdc_release_request()
322 if (req->r_request) in ceph_osdc_release_request()
323 ceph_msg_put(req->r_request); in ceph_osdc_release_request()
324 if (req->r_reply) { in ceph_osdc_release_request()
325 ceph_msg_revoke_incoming(req->r_reply); in ceph_osdc_release_request()
326 ceph_msg_put(req->r_reply); in ceph_osdc_release_request()
329 for (which = 0; which < req->r_num_ops; which++) in ceph_osdc_release_request()
330 osd_req_op_data_release(req, which); in ceph_osdc_release_request()
332 ceph_put_snap_context(req->r_snapc); in ceph_osdc_release_request()
333 if (req->r_mempool) in ceph_osdc_release_request()
334 mempool_free(req, req->r_osdc->req_mempool); in ceph_osdc_release_request()
336 kmem_cache_free(ceph_osd_request_cache, req); in ceph_osdc_release_request()
340 void ceph_osdc_get_request(struct ceph_osd_request *req) in ceph_osdc_get_request() argument
342 dout("%s %p (was %d)\n", __func__, req, in ceph_osdc_get_request()
343 atomic_read(&req->r_kref.refcount)); in ceph_osdc_get_request()
344 kref_get(&req->r_kref); in ceph_osdc_get_request()
348 void ceph_osdc_put_request(struct ceph_osd_request *req) in ceph_osdc_put_request() argument
350 dout("%s %p (was %d)\n", __func__, req, in ceph_osdc_put_request()
351 atomic_read(&req->r_kref.refcount)); in ceph_osdc_put_request()
352 kref_put(&req->r_kref, ceph_osdc_release_request); in ceph_osdc_put_request()
362 struct ceph_osd_request *req; in ceph_osdc_alloc_request() local
380 req = mempool_alloc(osdc->req_mempool, gfp_flags); in ceph_osdc_alloc_request()
381 memset(req, 0, sizeof(*req)); in ceph_osdc_alloc_request()
383 req = kmem_cache_zalloc(ceph_osd_request_cache, gfp_flags); in ceph_osdc_alloc_request()
385 if (req == NULL) in ceph_osdc_alloc_request()
388 req->r_osdc = osdc; in ceph_osdc_alloc_request()
389 req->r_mempool = use_mempool; in ceph_osdc_alloc_request()
390 req->r_num_ops = num_ops; in ceph_osdc_alloc_request()
392 kref_init(&req->r_kref); in ceph_osdc_alloc_request()
393 init_completion(&req->r_completion); in ceph_osdc_alloc_request()
394 init_completion(&req->r_safe_completion); in ceph_osdc_alloc_request()
395 RB_CLEAR_NODE(&req->r_node); in ceph_osdc_alloc_request()
396 INIT_LIST_HEAD(&req->r_unsafe_item); in ceph_osdc_alloc_request()
397 INIT_LIST_HEAD(&req->r_linger_item); in ceph_osdc_alloc_request()
398 INIT_LIST_HEAD(&req->r_linger_osd_item); in ceph_osdc_alloc_request()
399 INIT_LIST_HEAD(&req->r_req_lru_item); in ceph_osdc_alloc_request()
400 INIT_LIST_HEAD(&req->r_osd_item); in ceph_osdc_alloc_request()
402 req->r_base_oloc.pool = -1; in ceph_osdc_alloc_request()
403 req->r_target_oloc.pool = -1; in ceph_osdc_alloc_request()
412 ceph_osdc_put_request(req); in ceph_osdc_alloc_request()
415 req->r_reply = msg; in ceph_osdc_alloc_request()
423 ceph_osdc_put_request(req); in ceph_osdc_alloc_request()
429 req->r_request = msg; in ceph_osdc_alloc_request()
431 return req; in ceph_osdc_alloc_request()
641 static u64 osd_req_encode_op(struct ceph_osd_request *req, in osd_req_encode_op() argument
649 BUG_ON(which >= req->r_num_ops); in osd_req_encode_op()
650 src = &req->r_ops[which]; in osd_req_encode_op()
660 ceph_osdc_msg_data_add(req->r_reply, osd_data); in osd_req_encode_op()
676 ceph_osdc_msg_data_add(req->r_request, osd_data); in osd_req_encode_op()
678 ceph_osdc_msg_data_add(req->r_reply, osd_data); in osd_req_encode_op()
684 ceph_osdc_msg_data_add(req->r_request, osd_data); in osd_req_encode_op()
693 ceph_osdc_msg_data_add(req->r_request, osd_data); in osd_req_encode_op()
698 ceph_osdc_msg_data_add(req->r_reply, osd_data); in osd_req_encode_op()
721 ceph_osdc_msg_data_add(req->r_request, osd_data); in osd_req_encode_op()
764 struct ceph_osd_request *req; in ceph_osdc_new_request() local
774 req = ceph_osdc_alloc_request(osdc, snapc, num_ops, use_mempool, in ceph_osdc_new_request()
776 if (!req) in ceph_osdc_new_request()
779 req->r_flags = flags; in ceph_osdc_new_request()
784 ceph_osdc_put_request(req); in ceph_osdc_new_request()
789 osd_req_op_init(req, which, opcode); in ceph_osdc_new_request()
802 osd_req_op_extent_init(req, which, opcode, objoff, objlen, in ceph_osdc_new_request()
806 req->r_base_oloc.pool = ceph_file_layout_pg_pool(*layout); in ceph_osdc_new_request()
808 snprintf(req->r_base_oid.name, sizeof(req->r_base_oid.name), in ceph_osdc_new_request()
810 req->r_base_oid.name_len = strlen(req->r_base_oid.name); in ceph_osdc_new_request()
812 return req; in ceph_osdc_new_request()
824 struct ceph_osd_request *req = NULL; in __insert_request() local
828 req = rb_entry(parent, struct ceph_osd_request, r_node); in __insert_request()
829 if (new->r_tid < req->r_tid) in __insert_request()
831 else if (new->r_tid > req->r_tid) in __insert_request()
844 struct ceph_osd_request *req; in __lookup_request() local
848 req = rb_entry(n, struct ceph_osd_request, r_node); in __lookup_request()
849 if (tid < req->r_tid) in __lookup_request()
851 else if (tid > req->r_tid) in __lookup_request()
854 return req; in __lookup_request()
863 struct ceph_osd_request *req; in __lookup_request_ge() local
867 req = rb_entry(n, struct ceph_osd_request, r_node); in __lookup_request_ge()
868 if (tid < req->r_tid) { in __lookup_request_ge()
870 return req; in __lookup_request_ge()
872 } else if (tid > req->r_tid) { in __lookup_request_ge()
875 return req; in __lookup_request_ge()
881 static void __kick_linger_request(struct ceph_osd_request *req) in __kick_linger_request() argument
883 struct ceph_osd_client *osdc = req->r_osdc; in __kick_linger_request()
884 struct ceph_osd *osd = req->r_osd; in __kick_linger_request()
891 ceph_osdc_get_request(req); in __kick_linger_request()
892 if (!list_empty(&req->r_linger_item)) in __kick_linger_request()
893 __unregister_linger_request(osdc, req); in __kick_linger_request()
895 __unregister_request(osdc, req); in __kick_linger_request()
896 __register_request(osdc, req); in __kick_linger_request()
897 ceph_osdc_put_request(req); in __kick_linger_request()
905 WARN_ON(req->r_osd || !osd); in __kick_linger_request()
906 req->r_osd = osd; in __kick_linger_request()
908 dout("%s requeueing %p tid %llu\n", __func__, req, req->r_tid); in __kick_linger_request()
909 __enqueue_request(req); in __kick_linger_request()
918 struct ceph_osd_request *req, *nreq; in __kick_osd_requests() local
945 list_for_each_entry(req, &osd->o_requests, r_osd_item) { in __kick_osd_requests()
946 if (!req->r_sent) in __kick_osd_requests()
949 if (!req->r_linger) { in __kick_osd_requests()
950 dout("%s requeueing %p tid %llu\n", __func__, req, in __kick_osd_requests()
951 req->r_tid); in __kick_osd_requests()
952 list_move_tail(&req->r_req_lru_item, &resend); in __kick_osd_requests()
953 req->r_flags |= CEPH_OSD_FLAG_RETRY; in __kick_osd_requests()
955 list_move_tail(&req->r_req_lru_item, &resend_linger); in __kick_osd_requests()
966 list_for_each_entry_safe(req, nreq, &osd->o_linger_requests, in __kick_osd_requests()
968 WARN_ON(!list_empty(&req->r_req_lru_item)); in __kick_osd_requests()
969 __kick_linger_request(req); in __kick_osd_requests()
972 list_for_each_entry_safe(req, nreq, &resend_linger, r_req_lru_item) in __kick_osd_requests()
973 __kick_linger_request(req); in __kick_osd_requests()
1142 struct ceph_osd_request *req; in __reset_osd() local
1147 list_for_each_entry(req, &osd->o_requests, r_osd_item) in __reset_osd()
1148 req->r_stamp = jiffies; in __reset_osd()
1215 struct ceph_osd_request *req) in __register_request() argument
1217 req->r_tid = ++osdc->last_tid; in __register_request()
1218 req->r_request->hdr.tid = cpu_to_le64(req->r_tid); in __register_request()
1219 dout("__register_request %p tid %lld\n", req, req->r_tid); in __register_request()
1220 __insert_request(osdc, req); in __register_request()
1221 ceph_osdc_get_request(req); in __register_request()
1233 struct ceph_osd_request *req) in __unregister_request() argument
1235 if (RB_EMPTY_NODE(&req->r_node)) { in __unregister_request()
1237 req, req->r_tid); in __unregister_request()
1241 dout("__unregister_request %p tid %lld\n", req, req->r_tid); in __unregister_request()
1242 rb_erase(&req->r_node, &osdc->requests); in __unregister_request()
1243 RB_CLEAR_NODE(&req->r_node); in __unregister_request()
1246 if (req->r_osd) { in __unregister_request()
1248 ceph_msg_revoke(req->r_request); in __unregister_request()
1250 list_del_init(&req->r_osd_item); in __unregister_request()
1251 maybe_move_osd_to_lru(osdc, req->r_osd); in __unregister_request()
1252 if (list_empty(&req->r_linger_osd_item)) in __unregister_request()
1253 req->r_osd = NULL; in __unregister_request()
1256 list_del_init(&req->r_req_lru_item); in __unregister_request()
1257 ceph_osdc_put_request(req); in __unregister_request()
1268 static void __cancel_request(struct ceph_osd_request *req) in __cancel_request() argument
1270 if (req->r_sent && req->r_osd) { in __cancel_request()
1271 ceph_msg_revoke(req->r_request); in __cancel_request()
1272 req->r_sent = 0; in __cancel_request()
1277 struct ceph_osd_request *req) in __register_linger_request() argument
1279 dout("%s %p tid %llu\n", __func__, req, req->r_tid); in __register_linger_request()
1280 WARN_ON(!req->r_linger); in __register_linger_request()
1282 ceph_osdc_get_request(req); in __register_linger_request()
1283 list_add_tail(&req->r_linger_item, &osdc->req_linger); in __register_linger_request()
1284 if (req->r_osd) in __register_linger_request()
1285 list_add_tail(&req->r_linger_osd_item, in __register_linger_request()
1286 &req->r_osd->o_linger_requests); in __register_linger_request()
1290 struct ceph_osd_request *req) in __unregister_linger_request() argument
1292 WARN_ON(!req->r_linger); in __unregister_linger_request()
1294 if (list_empty(&req->r_linger_item)) { in __unregister_linger_request()
1295 dout("%s %p tid %llu not registered\n", __func__, req, in __unregister_linger_request()
1296 req->r_tid); in __unregister_linger_request()
1300 dout("%s %p tid %llu\n", __func__, req, req->r_tid); in __unregister_linger_request()
1301 list_del_init(&req->r_linger_item); in __unregister_linger_request()
1303 if (req->r_osd) { in __unregister_linger_request()
1304 list_del_init(&req->r_linger_osd_item); in __unregister_linger_request()
1305 maybe_move_osd_to_lru(osdc, req->r_osd); in __unregister_linger_request()
1306 if (list_empty(&req->r_osd_item)) in __unregister_linger_request()
1307 req->r_osd = NULL; in __unregister_linger_request()
1309 ceph_osdc_put_request(req); in __unregister_linger_request()
1313 struct ceph_osd_request *req) in ceph_osdc_set_request_linger() argument
1315 if (!req->r_linger) { in ceph_osdc_set_request_linger()
1316 dout("set_request_linger %p\n", req); in ceph_osdc_set_request_linger()
1317 req->r_linger = 1; in ceph_osdc_set_request_linger()
1329 struct ceph_osd_request *req) in __req_should_be_paused() argument
1334 return (req->r_flags & CEPH_OSD_FLAG_READ && pauserd) || in __req_should_be_paused()
1335 (req->r_flags & CEPH_OSD_FLAG_WRITE && pausewr); in __req_should_be_paused()
1342 struct ceph_osd_request *req, in __calc_request_pg() argument
1348 if (req->r_target_oloc.pool == -1) { in __calc_request_pg()
1349 req->r_target_oloc = req->r_base_oloc; /* struct */ in __calc_request_pg()
1352 if (req->r_target_oid.name_len == 0) { in __calc_request_pg()
1353 ceph_oid_copy(&req->r_target_oid, &req->r_base_oid); in __calc_request_pg()
1358 (req->r_flags & CEPH_OSD_FLAG_IGNORE_OVERLAY) == 0) { in __calc_request_pg()
1361 pi = ceph_pg_pool_by_id(osdmap, req->r_target_oloc.pool); in __calc_request_pg()
1363 if ((req->r_flags & CEPH_OSD_FLAG_READ) && in __calc_request_pg()
1365 req->r_target_oloc.pool = pi->read_tier; in __calc_request_pg()
1366 if ((req->r_flags & CEPH_OSD_FLAG_WRITE) && in __calc_request_pg()
1368 req->r_target_oloc.pool = pi->write_tier; in __calc_request_pg()
1373 return ceph_oloc_oid_to_pg(osdmap, &req->r_target_oloc, in __calc_request_pg()
1374 &req->r_target_oid, pg_out); in __calc_request_pg()
1377 static void __enqueue_request(struct ceph_osd_request *req) in __enqueue_request() argument
1379 struct ceph_osd_client *osdc = req->r_osdc; in __enqueue_request()
1381 dout("%s %p tid %llu to osd%d\n", __func__, req, req->r_tid, in __enqueue_request()
1382 req->r_osd ? req->r_osd->o_osd : -1); in __enqueue_request()
1384 if (req->r_osd) { in __enqueue_request()
1385 __remove_osd_from_lru(req->r_osd); in __enqueue_request()
1386 list_add_tail(&req->r_osd_item, &req->r_osd->o_requests); in __enqueue_request()
1387 list_move_tail(&req->r_req_lru_item, &osdc->req_unsent); in __enqueue_request()
1389 list_move_tail(&req->r_req_lru_item, &osdc->req_notarget); in __enqueue_request()
1404 struct ceph_osd_request *req, int force_resend) in __map_request() argument
1412 dout("map_request %p tid %lld\n", req, req->r_tid); in __map_request()
1414 err = __calc_request_pg(osdc->osdmap, req, &pgid); in __map_request()
1416 list_move(&req->r_req_lru_item, &osdc->req_notarget); in __map_request()
1419 req->r_pgid = pgid; in __map_request()
1425 was_paused = req->r_paused; in __map_request()
1426 req->r_paused = __req_should_be_paused(osdc, req); in __map_request()
1427 if (was_paused && !req->r_paused) in __map_request()
1431 req->r_osd && req->r_osd->o_osd == o && in __map_request()
1432 req->r_sent >= req->r_osd->o_incarnation && in __map_request()
1433 req->r_num_pg_osds == num && in __map_request()
1434 memcmp(req->r_pg_osds, acting, sizeof(acting[0])*num) == 0) || in __map_request()
1435 (req->r_osd == NULL && o == -1) || in __map_request()
1436 req->r_paused) in __map_request()
1440 req->r_tid, pgid.pool, pgid.seed, o, in __map_request()
1441 req->r_osd ? req->r_osd->o_osd : -1); in __map_request()
1444 memcpy(req->r_pg_osds, acting, sizeof(acting[0]) * num); in __map_request()
1445 req->r_num_pg_osds = num; in __map_request()
1447 if (req->r_osd) { in __map_request()
1448 __cancel_request(req); in __map_request()
1449 list_del_init(&req->r_osd_item); in __map_request()
1450 list_del_init(&req->r_linger_osd_item); in __map_request()
1451 req->r_osd = NULL; in __map_request()
1454 req->r_osd = __lookup_osd(osdc, o); in __map_request()
1455 if (!req->r_osd && o >= 0) { in __map_request()
1457 req->r_osd = create_osd(osdc, o); in __map_request()
1458 if (!req->r_osd) { in __map_request()
1459 list_move(&req->r_req_lru_item, &osdc->req_notarget); in __map_request()
1463 dout("map_request osd %p is osd%d\n", req->r_osd, o); in __map_request()
1464 __insert_osd(osdc, req->r_osd); in __map_request()
1466 ceph_con_open(&req->r_osd->o_con, in __map_request()
1471 __enqueue_request(req); in __map_request()
1482 struct ceph_osd_request *req) in __send_request() argument
1487 req, req->r_tid, req->r_osd->o_osd, req->r_flags, in __send_request()
1488 (unsigned long long)req->r_pgid.pool, req->r_pgid.seed); in __send_request()
1491 put_unaligned_le32(osdc->osdmap->epoch, req->r_request_osdmap_epoch); in __send_request()
1492 put_unaligned_le32(req->r_flags, req->r_request_flags); in __send_request()
1493 put_unaligned_le64(req->r_target_oloc.pool, req->r_request_pool); in __send_request()
1494 p = req->r_request_pgid; in __send_request()
1495 ceph_encode_64(&p, req->r_pgid.pool); in __send_request()
1496 ceph_encode_32(&p, req->r_pgid.seed); in __send_request()
1497 put_unaligned_le64(1, req->r_request_attempts); /* FIXME */ in __send_request()
1498 memcpy(req->r_request_reassert_version, &req->r_reassert_version, in __send_request()
1499 sizeof(req->r_reassert_version)); in __send_request()
1501 req->r_stamp = jiffies; in __send_request()
1502 list_move_tail(&req->r_req_lru_item, &osdc->req_lru); in __send_request()
1504 ceph_msg_get(req->r_request); /* send consumes a ref */ in __send_request()
1506 req->r_sent = req->r_osd->o_incarnation; in __send_request()
1508 ceph_con_send(&req->r_osd->o_con, req->r_request); in __send_request()
1516 struct ceph_osd_request *req, *tmp; in __send_queued() local
1519 list_for_each_entry_safe(req, tmp, &osdc->req_unsent, r_req_lru_item) in __send_queued()
1520 __send_request(osdc, req); in __send_queued()
1527 struct ceph_osd_request *req, in __ceph_osdc_start_request() argument
1532 __register_request(osdc, req); in __ceph_osdc_start_request()
1533 req->r_sent = 0; in __ceph_osdc_start_request()
1534 req->r_got_reply = 0; in __ceph_osdc_start_request()
1535 rc = __map_request(osdc, req, 0); in __ceph_osdc_start_request()
1539 " will retry %lld\n", req->r_tid); in __ceph_osdc_start_request()
1542 __unregister_request(osdc, req); in __ceph_osdc_start_request()
1547 if (req->r_osd == NULL) { in __ceph_osdc_start_request()
1548 dout("send_request %p no up osds in pg\n", req); in __ceph_osdc_start_request()
1570 struct ceph_osd_request *req; in handle_timeout() local
1588 list_for_each_entry(req, &osdc->req_lru, r_req_lru_item) { in handle_timeout()
1589 if (time_before(jiffies, req->r_stamp + keepalive)) in handle_timeout()
1592 osd = req->r_osd; in handle_timeout()
1595 req->r_tid, osd->o_osd); in handle_timeout()
1731 static void complete_request(struct ceph_osd_request *req) in complete_request() argument
1733 complete_all(&req->r_safe_completion); /* fsync waiter */ in complete_request()
1744 struct ceph_osd_request *req; in handle_reply() local
1786 req = __lookup_request(osdc, tid); in handle_reply()
1787 if (req == NULL) { in handle_reply()
1791 ceph_osdc_get_request(req); in handle_reply()
1794 req, result); in handle_reply()
1800 if (numops != req->r_num_ops) in handle_reply()
1809 req->r_reply_op_len[i] = len; in handle_reply()
1824 req->r_reply_op_result[i] = ceph_decode_32(&p); in handle_reply()
1840 __unregister_request(osdc, req); in handle_reply()
1842 req->r_target_oloc = redir.oloc; /* struct */ in handle_reply()
1852 err = __ceph_osdc_start_request(osdc, req, true); in handle_reply()
1858 already_completed = req->r_got_reply; in handle_reply()
1859 if (!req->r_got_reply) { in handle_reply()
1860 req->r_result = result; in handle_reply()
1861 dout("handle_reply result %d bytes %d\n", req->r_result, in handle_reply()
1863 if (req->r_result == 0) in handle_reply()
1864 req->r_result = bytes; in handle_reply()
1867 req->r_reassert_version.epoch = cpu_to_le32(reassert_epoch); in handle_reply()
1868 req->r_reassert_version.version = cpu_to_le64(reassert_version); in handle_reply()
1870 req->r_got_reply = 1; in handle_reply()
1878 if (req->r_linger && (flags & CEPH_OSD_FLAG_ONDISK)) in handle_reply()
1879 __register_linger_request(osdc, req); in handle_reply()
1885 __unregister_request(osdc, req); in handle_reply()
1891 if (req->r_unsafe_callback && in handle_reply()
1893 req->r_unsafe_callback(req, true); in handle_reply()
1894 if (req->r_callback) in handle_reply()
1895 req->r_callback(req, msg); in handle_reply()
1897 complete_all(&req->r_completion); in handle_reply()
1901 if (req->r_unsafe_callback && already_completed) in handle_reply()
1902 req->r_unsafe_callback(req, false); in handle_reply()
1903 complete_request(req); in handle_reply()
1907 dout("req=%p req->r_linger=%d\n", req, req->r_linger); in handle_reply()
1908 ceph_osdc_put_request(req); in handle_reply()
1916 req->r_result = -EIO; in handle_reply()
1917 __unregister_request(osdc, req); in handle_reply()
1918 if (req->r_callback) in handle_reply()
1919 req->r_callback(req, msg); in handle_reply()
1921 complete_all(&req->r_completion); in handle_reply()
1922 complete_request(req); in handle_reply()
1923 ceph_osdc_put_request(req); in handle_reply()
1960 struct ceph_osd_request *req, *nreq; in kick_requests() local
1970 req = rb_entry(p, struct ceph_osd_request, r_node); in kick_requests()
1981 if (req->r_linger && list_empty(&req->r_linger_item)) { in kick_requests()
1983 req, req->r_tid, in kick_requests()
1984 req->r_osd ? req->r_osd->o_osd : -1); in kick_requests()
1985 ceph_osdc_get_request(req); in kick_requests()
1986 __unregister_request(osdc, req); in kick_requests()
1987 __register_linger_request(osdc, req); in kick_requests()
1988 ceph_osdc_put_request(req); in kick_requests()
1994 req->r_flags & CEPH_OSD_FLAG_WRITE); in kick_requests()
1995 err = __map_request(osdc, req, force_resend_req); in kick_requests()
1998 if (req->r_osd == NULL) { in kick_requests()
1999 dout("%p tid %llu maps to no osd\n", req, req->r_tid); in kick_requests()
2002 if (!req->r_linger) { in kick_requests()
2003 dout("%p tid %llu requeued on osd%d\n", req, in kick_requests()
2004 req->r_tid, in kick_requests()
2005 req->r_osd ? req->r_osd->o_osd : -1); in kick_requests()
2006 req->r_flags |= CEPH_OSD_FLAG_RETRY; in kick_requests()
2011 list_for_each_entry_safe(req, nreq, &osdc->req_linger, in kick_requests()
2013 dout("linger req=%p req->r_osd=%p\n", req, req->r_osd); in kick_requests()
2015 err = __map_request(osdc, req, in kick_requests()
2020 if (req->r_osd == NULL || err > 0) { in kick_requests()
2021 if (req->r_osd == NULL) { in kick_requests()
2023 req, req->r_tid); in kick_requests()
2036 dout("kicking lingering %p tid %llu osd%d\n", req, in kick_requests()
2037 req->r_tid, req->r_osd ? req->r_osd->o_osd : -1); in kick_requests()
2038 __register_request(osdc, req); in kick_requests()
2039 __unregister_linger_request(osdc, req); in kick_requests()
2388 void ceph_osdc_build_request(struct ceph_osd_request *req, u64 off, in ceph_osdc_build_request() argument
2392 struct ceph_msg *msg = req->r_request; in ceph_osdc_build_request()
2395 int flags = req->r_flags; in ceph_osdc_build_request()
2399 req->r_snapid = snap_id; in ceph_osdc_build_request()
2400 req->r_snapc = ceph_get_snap_context(snapc); in ceph_osdc_build_request()
2407 req->r_request_osdmap_epoch = p; in ceph_osdc_build_request()
2409 req->r_request_flags = p; in ceph_osdc_build_request()
2411 if (req->r_flags & CEPH_OSD_FLAG_WRITE) in ceph_osdc_build_request()
2414 req->r_request_reassert_version = p; in ceph_osdc_build_request()
2421 req->r_request_pool = p; in ceph_osdc_build_request()
2427 req->r_request_pgid = p; in ceph_osdc_build_request()
2432 ceph_encode_32(&p, req->r_base_oid.name_len); in ceph_osdc_build_request()
2433 memcpy(p, req->r_base_oid.name, req->r_base_oid.name_len); in ceph_osdc_build_request()
2434 dout("oid '%.*s' len %d\n", req->r_base_oid.name_len, in ceph_osdc_build_request()
2435 req->r_base_oid.name, req->r_base_oid.name_len); in ceph_osdc_build_request()
2436 p += req->r_base_oid.name_len; in ceph_osdc_build_request()
2439 ceph_encode_16(&p, (u16)req->r_num_ops); in ceph_osdc_build_request()
2441 for (i = 0; i < req->r_num_ops; i++) { in ceph_osdc_build_request()
2442 data_len += osd_req_encode_op(req, p, i); in ceph_osdc_build_request()
2447 ceph_encode_64(&p, req->r_snapid); in ceph_osdc_build_request()
2448 ceph_encode_64(&p, req->r_snapc ? req->r_snapc->seq : 0); in ceph_osdc_build_request()
2449 ceph_encode_32(&p, req->r_snapc ? req->r_snapc->num_snaps : 0); in ceph_osdc_build_request()
2450 if (req->r_snapc) { in ceph_osdc_build_request()
2452 ceph_encode_64(&p, req->r_snapc->snaps[i]); in ceph_osdc_build_request()
2456 req->r_request_attempts = p; in ceph_osdc_build_request()
2470 req->r_request->hdr.data_off = cpu_to_le16(data_off); in ceph_osdc_build_request()
2472 req->r_request->hdr.data_len = cpu_to_le32(data_len); in ceph_osdc_build_request()
2487 struct ceph_osd_request *req, in ceph_osdc_start_request() argument
2495 rc = __ceph_osdc_start_request(osdc, req, nofail); in ceph_osdc_start_request()
2509 void ceph_osdc_cancel_request(struct ceph_osd_request *req) in ceph_osdc_cancel_request() argument
2511 struct ceph_osd_client *osdc = req->r_osdc; in ceph_osdc_cancel_request()
2514 if (req->r_linger) in ceph_osdc_cancel_request()
2515 __unregister_linger_request(osdc, req); in ceph_osdc_cancel_request()
2516 __unregister_request(osdc, req); in ceph_osdc_cancel_request()
2519 dout("%s %p tid %llu canceled\n", __func__, req, req->r_tid); in ceph_osdc_cancel_request()
2527 struct ceph_osd_request *req) in ceph_osdc_wait_request() argument
2531 dout("%s %p tid %llu\n", __func__, req, req->r_tid); in ceph_osdc_wait_request()
2533 rc = wait_for_completion_interruptible(&req->r_completion); in ceph_osdc_wait_request()
2535 dout("%s %p tid %llu interrupted\n", __func__, req, req->r_tid); in ceph_osdc_wait_request()
2536 ceph_osdc_cancel_request(req); in ceph_osdc_wait_request()
2537 complete_request(req); in ceph_osdc_wait_request()
2541 dout("%s %p tid %llu result %d\n", __func__, req, req->r_tid, in ceph_osdc_wait_request()
2542 req->r_result); in ceph_osdc_wait_request()
2543 return req->r_result; in ceph_osdc_wait_request()
2552 struct ceph_osd_request *req; in ceph_osdc_sync() local
2558 req = __lookup_request_ge(osdc, next_tid); in ceph_osdc_sync()
2559 if (!req) in ceph_osdc_sync()
2561 if (req->r_tid > last_tid) in ceph_osdc_sync()
2564 next_tid = req->r_tid + 1; in ceph_osdc_sync()
2565 if ((req->r_flags & CEPH_OSD_FLAG_WRITE) == 0) in ceph_osdc_sync()
2568 ceph_osdc_get_request(req); in ceph_osdc_sync()
2571 req->r_tid, last_tid); in ceph_osdc_sync()
2572 wait_for_completion(&req->r_safe_completion); in ceph_osdc_sync()
2574 ceph_osdc_put_request(req); in ceph_osdc_sync()
2684 struct ceph_osd_request *req; in ceph_osdc_readpages() local
2689 req = ceph_osdc_new_request(osdc, layout, vino, off, plen, 0, 1, in ceph_osdc_readpages()
2693 if (IS_ERR(req)) in ceph_osdc_readpages()
2694 return PTR_ERR(req); in ceph_osdc_readpages()
2698 osd_req_op_extent_osd_data_pages(req, 0, in ceph_osdc_readpages()
2704 ceph_osdc_build_request(req, off, NULL, vino.snap, NULL); in ceph_osdc_readpages()
2706 rc = ceph_osdc_start_request(osdc, req, false); in ceph_osdc_readpages()
2708 rc = ceph_osdc_wait_request(osdc, req); in ceph_osdc_readpages()
2710 ceph_osdc_put_request(req); in ceph_osdc_readpages()
2727 struct ceph_osd_request *req; in ceph_osdc_writepages() local
2732 req = ceph_osdc_new_request(osdc, layout, vino, off, &len, 0, 1, in ceph_osdc_writepages()
2737 if (IS_ERR(req)) in ceph_osdc_writepages()
2738 return PTR_ERR(req); in ceph_osdc_writepages()
2741 osd_req_op_extent_osd_data_pages(req, 0, pages, len, page_align, in ceph_osdc_writepages()
2745 ceph_osdc_build_request(req, off, snapc, CEPH_NOSNAP, mtime); in ceph_osdc_writepages()
2747 rc = ceph_osdc_start_request(osdc, req, true); in ceph_osdc_writepages()
2749 rc = ceph_osdc_wait_request(osdc, req); in ceph_osdc_writepages()
2751 ceph_osdc_put_request(req); in ceph_osdc_writepages()
2822 struct ceph_osd_request *req; in get_reply() local
2829 req = __lookup_request(osdc, tid); in get_reply()
2830 if (!req) { in get_reply()
2838 if (req->r_reply->con) in get_reply()
2840 req->r_reply, req->r_reply->con); in get_reply()
2841 ceph_msg_revoke_incoming(req->r_reply); in get_reply()
2843 if (front_len > req->r_reply->front_alloc_len) { in get_reply()
2845 front_len, req->r_reply->front_alloc_len, in get_reply()
2852 ceph_msg_put(req->r_reply); in get_reply()
2853 req->r_reply = m; in get_reply()
2855 m = ceph_msg_get(req->r_reply); in get_reply()
2865 osd_data = osd_req_op_extent_osd_data(req, 0); in get_reply()