Lines Matching refs:obj_request

252 		struct rbd_obj_request	*obj_request;	/* STAT op */  member
302 struct rbd_obj_request *obj_request; /* obj req initiator */ member
526 static void rbd_osd_copyup_callback(struct rbd_obj_request *obj_request);
527 static int rbd_img_obj_request_submit(struct rbd_obj_request *obj_request);
528 static void rbd_img_parent_read(struct rbd_obj_request *obj_request);
1396 static void obj_request_img_data_set(struct rbd_obj_request *obj_request) in obj_request_img_data_set() argument
1398 if (test_and_set_bit(OBJ_REQ_IMG_DATA, &obj_request->flags)) { in obj_request_img_data_set()
1401 rbd_dev = obj_request->img_request->rbd_dev; in obj_request_img_data_set()
1403 obj_request); in obj_request_img_data_set()
1407 static bool obj_request_img_data_test(struct rbd_obj_request *obj_request) in obj_request_img_data_test() argument
1410 return test_bit(OBJ_REQ_IMG_DATA, &obj_request->flags) != 0; in obj_request_img_data_test()
1413 static void obj_request_done_set(struct rbd_obj_request *obj_request) in obj_request_done_set() argument
1415 if (test_and_set_bit(OBJ_REQ_DONE, &obj_request->flags)) { in obj_request_done_set()
1418 if (obj_request_img_data_test(obj_request)) in obj_request_done_set()
1419 rbd_dev = obj_request->img_request->rbd_dev; in obj_request_done_set()
1421 obj_request); in obj_request_done_set()
1425 static bool obj_request_done_test(struct rbd_obj_request *obj_request) in obj_request_done_test() argument
1428 return test_bit(OBJ_REQ_DONE, &obj_request->flags) != 0; in obj_request_done_test()
1441 static void obj_request_existence_set(struct rbd_obj_request *obj_request, in obj_request_existence_set() argument
1445 set_bit(OBJ_REQ_EXISTS, &obj_request->flags); in obj_request_existence_set()
1446 set_bit(OBJ_REQ_KNOWN, &obj_request->flags); in obj_request_existence_set()
1450 static bool obj_request_known_test(struct rbd_obj_request *obj_request) in obj_request_known_test() argument
1453 return test_bit(OBJ_REQ_KNOWN, &obj_request->flags) != 0; in obj_request_known_test()
1456 static bool obj_request_exists_test(struct rbd_obj_request *obj_request) in obj_request_exists_test() argument
1459 return test_bit(OBJ_REQ_EXISTS, &obj_request->flags) != 0; in obj_request_exists_test()
1462 static bool obj_request_overlaps_parent(struct rbd_obj_request *obj_request) in obj_request_overlaps_parent() argument
1464 struct rbd_device *rbd_dev = obj_request->img_request->rbd_dev; in obj_request_overlaps_parent()
1466 return obj_request->img_offset < in obj_request_overlaps_parent()
1470 static void rbd_obj_request_get(struct rbd_obj_request *obj_request) in rbd_obj_request_get() argument
1472 dout("%s: obj %p (was %d)\n", __func__, obj_request, in rbd_obj_request_get()
1473 atomic_read(&obj_request->kref.refcount)); in rbd_obj_request_get()
1474 kref_get(&obj_request->kref); in rbd_obj_request_get()
1478 static void rbd_obj_request_put(struct rbd_obj_request *obj_request) in rbd_obj_request_put() argument
1480 rbd_assert(obj_request != NULL); in rbd_obj_request_put()
1481 dout("%s: obj %p (was %d)\n", __func__, obj_request, in rbd_obj_request_put()
1482 atomic_read(&obj_request->kref.refcount)); in rbd_obj_request_put()
1483 kref_put(&obj_request->kref, rbd_obj_request_destroy); in rbd_obj_request_put()
1508 struct rbd_obj_request *obj_request) in rbd_img_obj_request_add() argument
1510 rbd_assert(obj_request->img_request == NULL); in rbd_img_obj_request_add()
1513 obj_request->img_request = img_request; in rbd_img_obj_request_add()
1514 obj_request->which = img_request->obj_request_count; in rbd_img_obj_request_add()
1515 rbd_assert(!obj_request_img_data_test(obj_request)); in rbd_img_obj_request_add()
1516 obj_request_img_data_set(obj_request); in rbd_img_obj_request_add()
1517 rbd_assert(obj_request->which != BAD_WHICH); in rbd_img_obj_request_add()
1519 list_add_tail(&obj_request->links, &img_request->obj_requests); in rbd_img_obj_request_add()
1520 dout("%s: img %p obj %p w=%u\n", __func__, img_request, obj_request, in rbd_img_obj_request_add()
1521 obj_request->which); in rbd_img_obj_request_add()
1525 struct rbd_obj_request *obj_request) in rbd_img_obj_request_del() argument
1527 rbd_assert(obj_request->which != BAD_WHICH); in rbd_img_obj_request_del()
1529 dout("%s: img %p obj %p w=%u\n", __func__, img_request, obj_request, in rbd_img_obj_request_del()
1530 obj_request->which); in rbd_img_obj_request_del()
1531 list_del(&obj_request->links); in rbd_img_obj_request_del()
1534 rbd_assert(obj_request->which == img_request->obj_request_count); in rbd_img_obj_request_del()
1535 obj_request->which = BAD_WHICH; in rbd_img_obj_request_del()
1536 rbd_assert(obj_request_img_data_test(obj_request)); in rbd_img_obj_request_del()
1537 rbd_assert(obj_request->img_request == img_request); in rbd_img_obj_request_del()
1538 obj_request->img_request = NULL; in rbd_img_obj_request_del()
1539 obj_request->callback = NULL; in rbd_img_obj_request_del()
1540 rbd_obj_request_put(obj_request); in rbd_img_obj_request_del()
1556 struct rbd_obj_request *obj_request) in rbd_obj_request_submit() argument
1558 dout("%s %p\n", __func__, obj_request); in rbd_obj_request_submit()
1559 return ceph_osdc_start_request(osdc, obj_request->osd_req, false); in rbd_obj_request_submit()
1562 static void rbd_obj_request_end(struct rbd_obj_request *obj_request) in rbd_obj_request_end() argument
1564 dout("%s %p\n", __func__, obj_request); in rbd_obj_request_end()
1565 ceph_osdc_cancel_request(obj_request->osd_req); in rbd_obj_request_end()
1574 static int __rbd_obj_request_wait(struct rbd_obj_request *obj_request, in __rbd_obj_request_wait() argument
1579 dout("%s %p\n", __func__, obj_request); in __rbd_obj_request_wait()
1581 &obj_request->completion, in __rbd_obj_request_wait()
1586 rbd_obj_request_end(obj_request); in __rbd_obj_request_wait()
1591 dout("%s %p ret %d\n", __func__, obj_request, (int)ret); in __rbd_obj_request_wait()
1595 static int rbd_obj_request_wait(struct rbd_obj_request *obj_request) in rbd_obj_request_wait() argument
1597 return __rbd_obj_request_wait(obj_request, 0); in rbd_obj_request_wait()
1600 static int rbd_obj_request_wait_timeout(struct rbd_obj_request *obj_request, in rbd_obj_request_wait_timeout() argument
1603 return __rbd_obj_request_wait(obj_request, timeout); in rbd_obj_request_wait_timeout()
1618 struct rbd_obj_request *obj_request; in rbd_img_request_complete() local
1621 for_each_obj_request(img_request, obj_request) in rbd_img_request_complete()
1622 xferred += obj_request->xferred; in rbd_img_request_complete()
1712 rbd_img_obj_request_read_callback(struct rbd_obj_request *obj_request) in rbd_img_obj_request_read_callback() argument
1714 u64 xferred = obj_request->xferred; in rbd_img_obj_request_read_callback()
1715 u64 length = obj_request->length; in rbd_img_obj_request_read_callback()
1718 obj_request, obj_request->img_request, obj_request->result, in rbd_img_obj_request_read_callback()
1728 rbd_assert(obj_request->type != OBJ_REQUEST_NODATA); in rbd_img_obj_request_read_callback()
1729 if (obj_request->result == -ENOENT) { in rbd_img_obj_request_read_callback()
1730 if (obj_request->type == OBJ_REQUEST_BIO) in rbd_img_obj_request_read_callback()
1731 zero_bio_chain(obj_request->bio_list, 0); in rbd_img_obj_request_read_callback()
1733 zero_pages(obj_request->pages, 0, length); in rbd_img_obj_request_read_callback()
1734 obj_request->result = 0; in rbd_img_obj_request_read_callback()
1735 } else if (xferred < length && !obj_request->result) { in rbd_img_obj_request_read_callback()
1736 if (obj_request->type == OBJ_REQUEST_BIO) in rbd_img_obj_request_read_callback()
1737 zero_bio_chain(obj_request->bio_list, xferred); in rbd_img_obj_request_read_callback()
1739 zero_pages(obj_request->pages, xferred, length); in rbd_img_obj_request_read_callback()
1741 obj_request->xferred = length; in rbd_img_obj_request_read_callback()
1742 obj_request_done_set(obj_request); in rbd_img_obj_request_read_callback()
1745 static void rbd_obj_request_complete(struct rbd_obj_request *obj_request) in rbd_obj_request_complete() argument
1747 dout("%s: obj %p cb %p\n", __func__, obj_request, in rbd_obj_request_complete()
1748 obj_request->callback); in rbd_obj_request_complete()
1749 if (obj_request->callback) in rbd_obj_request_complete()
1750 obj_request->callback(obj_request); in rbd_obj_request_complete()
1752 complete_all(&obj_request->completion); in rbd_obj_request_complete()
1755 static void rbd_osd_trivial_callback(struct rbd_obj_request *obj_request) in rbd_osd_trivial_callback() argument
1757 dout("%s: obj %p\n", __func__, obj_request); in rbd_osd_trivial_callback()
1758 obj_request_done_set(obj_request); in rbd_osd_trivial_callback()
1761 static void rbd_osd_read_callback(struct rbd_obj_request *obj_request) in rbd_osd_read_callback() argument
1767 if (obj_request_img_data_test(obj_request)) { in rbd_osd_read_callback()
1768 img_request = obj_request->img_request; in rbd_osd_read_callback()
1774 obj_request, img_request, obj_request->result, in rbd_osd_read_callback()
1775 obj_request->xferred, obj_request->length); in rbd_osd_read_callback()
1776 if (layered && obj_request->result == -ENOENT && in rbd_osd_read_callback()
1777 obj_request->img_offset < rbd_dev->parent_overlap) in rbd_osd_read_callback()
1778 rbd_img_parent_read(obj_request); in rbd_osd_read_callback()
1780 rbd_img_obj_request_read_callback(obj_request); in rbd_osd_read_callback()
1782 obj_request_done_set(obj_request); in rbd_osd_read_callback()
1785 static void rbd_osd_write_callback(struct rbd_obj_request *obj_request) in rbd_osd_write_callback() argument
1787 dout("%s: obj %p result %d %llu\n", __func__, obj_request, in rbd_osd_write_callback()
1788 obj_request->result, obj_request->length); in rbd_osd_write_callback()
1793 obj_request->xferred = obj_request->length; in rbd_osd_write_callback()
1794 obj_request_done_set(obj_request); in rbd_osd_write_callback()
1797 static void rbd_osd_discard_callback(struct rbd_obj_request *obj_request) in rbd_osd_discard_callback() argument
1799 dout("%s: obj %p result %d %llu\n", __func__, obj_request, in rbd_osd_discard_callback()
1800 obj_request->result, obj_request->length); in rbd_osd_discard_callback()
1805 obj_request->xferred = obj_request->length; in rbd_osd_discard_callback()
1807 if (obj_request->result == -ENOENT) in rbd_osd_discard_callback()
1808 obj_request->result = 0; in rbd_osd_discard_callback()
1809 obj_request_done_set(obj_request); in rbd_osd_discard_callback()
1816 static void rbd_osd_stat_callback(struct rbd_obj_request *obj_request) in rbd_osd_stat_callback() argument
1818 dout("%s: obj %p\n", __func__, obj_request); in rbd_osd_stat_callback()
1819 obj_request_done_set(obj_request); in rbd_osd_stat_callback()
1822 static void rbd_osd_call_callback(struct rbd_obj_request *obj_request) in rbd_osd_call_callback() argument
1824 dout("%s: obj %p\n", __func__, obj_request); in rbd_osd_call_callback()
1826 if (obj_request_img_data_test(obj_request)) in rbd_osd_call_callback()
1827 rbd_osd_copyup_callback(obj_request); in rbd_osd_call_callback()
1829 obj_request_done_set(obj_request); in rbd_osd_call_callback()
1835 struct rbd_obj_request *obj_request = osd_req->r_priv; in rbd_osd_req_callback() local
1839 rbd_assert(osd_req == obj_request->osd_req); in rbd_osd_req_callback()
1840 if (obj_request_img_data_test(obj_request)) { in rbd_osd_req_callback()
1841 rbd_assert(obj_request->img_request); in rbd_osd_req_callback()
1842 rbd_assert(obj_request->which != BAD_WHICH); in rbd_osd_req_callback()
1844 rbd_assert(obj_request->which == BAD_WHICH); in rbd_osd_req_callback()
1848 obj_request->result = osd_req->r_result; in rbd_osd_req_callback()
1857 obj_request->xferred = osd_req->r_reply_op_len[0]; in rbd_osd_req_callback()
1858 rbd_assert(obj_request->xferred < (u64)UINT_MAX); in rbd_osd_req_callback()
1863 rbd_osd_read_callback(obj_request); in rbd_osd_req_callback()
1871 rbd_osd_write_callback(obj_request); in rbd_osd_req_callback()
1874 rbd_osd_stat_callback(obj_request); in rbd_osd_req_callback()
1879 rbd_osd_discard_callback(obj_request); in rbd_osd_req_callback()
1882 rbd_osd_call_callback(obj_request); in rbd_osd_req_callback()
1886 rbd_osd_trivial_callback(obj_request); in rbd_osd_req_callback()
1890 obj_request->object_name, (unsigned short) opcode); in rbd_osd_req_callback()
1894 if (obj_request_done_test(obj_request)) in rbd_osd_req_callback()
1895 rbd_obj_request_complete(obj_request); in rbd_osd_req_callback()
1898 static void rbd_osd_req_format_read(struct rbd_obj_request *obj_request) in rbd_osd_req_format_read() argument
1900 struct rbd_img_request *img_request = obj_request->img_request; in rbd_osd_req_format_read()
1901 struct ceph_osd_request *osd_req = obj_request->osd_req; in rbd_osd_req_format_read()
1907 ceph_osdc_build_request(osd_req, obj_request->offset, in rbd_osd_req_format_read()
1911 static void rbd_osd_req_format_write(struct rbd_obj_request *obj_request) in rbd_osd_req_format_write() argument
1913 struct rbd_img_request *img_request = obj_request->img_request; in rbd_osd_req_format_write()
1914 struct ceph_osd_request *osd_req = obj_request->osd_req; in rbd_osd_req_format_write()
1921 ceph_osdc_build_request(osd_req, obj_request->offset, in rbd_osd_req_format_write()
1935 struct rbd_obj_request *obj_request) in rbd_osd_req_create() argument
1941 if (obj_request_img_data_test(obj_request) && in rbd_osd_req_create()
1943 struct rbd_img_request *img_request = obj_request->img_request; in rbd_osd_req_create()
1968 osd_req->r_priv = obj_request; in rbd_osd_req_create()
1971 ceph_oid_set_name(&osd_req->r_base_oid, obj_request->object_name); in rbd_osd_req_create()
1983 rbd_osd_req_create_copyup(struct rbd_obj_request *obj_request) in rbd_osd_req_create_copyup() argument
1992 rbd_assert(obj_request_img_data_test(obj_request)); in rbd_osd_req_create_copyup()
1993 img_request = obj_request->img_request; in rbd_osd_req_create_copyup()
2013 osd_req->r_priv = obj_request; in rbd_osd_req_create_copyup()
2016 ceph_oid_set_name(&osd_req->r_base_oid, obj_request->object_name); in rbd_osd_req_create_copyup()
2033 struct rbd_obj_request *obj_request; in rbd_obj_request_create() local
2044 obj_request = kmem_cache_zalloc(rbd_obj_request_cache, GFP_NOIO); in rbd_obj_request_create()
2045 if (!obj_request) { in rbd_obj_request_create()
2050 obj_request->object_name = memcpy(name, object_name, size); in rbd_obj_request_create()
2051 obj_request->offset = offset; in rbd_obj_request_create()
2052 obj_request->length = length; in rbd_obj_request_create()
2053 obj_request->flags = 0; in rbd_obj_request_create()
2054 obj_request->which = BAD_WHICH; in rbd_obj_request_create()
2055 obj_request->type = type; in rbd_obj_request_create()
2056 INIT_LIST_HEAD(&obj_request->links); in rbd_obj_request_create()
2057 init_completion(&obj_request->completion); in rbd_obj_request_create()
2058 kref_init(&obj_request->kref); in rbd_obj_request_create()
2061 offset, length, (int)type, obj_request); in rbd_obj_request_create()
2063 return obj_request; in rbd_obj_request_create()
2068 struct rbd_obj_request *obj_request; in rbd_obj_request_destroy() local
2070 obj_request = container_of(kref, struct rbd_obj_request, kref); in rbd_obj_request_destroy()
2072 dout("%s: obj %p\n", __func__, obj_request); in rbd_obj_request_destroy()
2074 rbd_assert(obj_request->img_request == NULL); in rbd_obj_request_destroy()
2075 rbd_assert(obj_request->which == BAD_WHICH); in rbd_obj_request_destroy()
2077 if (obj_request->osd_req) in rbd_obj_request_destroy()
2078 rbd_osd_req_destroy(obj_request->osd_req); in rbd_obj_request_destroy()
2080 rbd_assert(obj_request_type_valid(obj_request->type)); in rbd_obj_request_destroy()
2081 switch (obj_request->type) { in rbd_obj_request_destroy()
2085 if (obj_request->bio_list) in rbd_obj_request_destroy()
2086 bio_chain_put(obj_request->bio_list); in rbd_obj_request_destroy()
2089 if (obj_request->pages) in rbd_obj_request_destroy()
2090 ceph_release_page_vector(obj_request->pages, in rbd_obj_request_destroy()
2091 obj_request->page_count); in rbd_obj_request_destroy()
2095 kfree(obj_request->object_name); in rbd_obj_request_destroy()
2096 obj_request->object_name = NULL; in rbd_obj_request_destroy()
2097 kmem_cache_free(rbd_obj_request_cache, obj_request); in rbd_obj_request_destroy()
2212 struct rbd_obj_request *obj_request; in rbd_img_request_destroy() local
2219 for_each_obj_request_safe(img_request, obj_request, next_obj_request) in rbd_img_request_destroy()
2220 rbd_img_obj_request_del(img_request, obj_request); in rbd_img_request_destroy()
2236 struct rbd_obj_request *obj_request, in rbd_parent_request_create() argument
2242 rbd_assert(obj_request->img_request); in rbd_parent_request_create()
2243 rbd_dev = obj_request->img_request->rbd_dev; in rbd_parent_request_create()
2251 rbd_obj_request_get(obj_request); in rbd_parent_request_create()
2252 parent_request->obj_request = obj_request; in rbd_parent_request_create()
2263 orig_request = parent_request->obj_request; in rbd_parent_request_destroy()
2265 parent_request->obj_request = NULL; in rbd_parent_request_destroy()
2272 static bool rbd_img_obj_end_request(struct rbd_obj_request *obj_request) in rbd_img_obj_end_request() argument
2279 rbd_assert(obj_request_img_data_test(obj_request)); in rbd_img_obj_end_request()
2280 img_request = obj_request->img_request; in rbd_img_obj_end_request()
2282 rbd_assert(obj_request->xferred <= (u64)UINT_MAX); in rbd_img_obj_end_request()
2283 xferred = (unsigned int)obj_request->xferred; in rbd_img_obj_end_request()
2284 result = obj_request->result; in rbd_img_obj_end_request()
2297 obj_op_name(op_type), obj_request->length, in rbd_img_obj_end_request()
2298 obj_request->img_offset, obj_request->offset); in rbd_img_obj_end_request()
2307 xferred = obj_request->length; in rbd_img_obj_end_request()
2312 if (obj_request->type == OBJ_REQUEST_PAGES) { in rbd_img_obj_end_request()
2313 obj_request->pages = NULL; in rbd_img_obj_end_request()
2314 obj_request->page_count = 0; in rbd_img_obj_end_request()
2318 rbd_assert(img_request->obj_request != NULL); in rbd_img_obj_end_request()
2319 more = obj_request->which < img_request->obj_request_count - 1; in rbd_img_obj_end_request()
2331 static void rbd_img_obj_callback(struct rbd_obj_request *obj_request) in rbd_img_obj_callback() argument
2334 u32 which = obj_request->which; in rbd_img_obj_callback()
2337 rbd_assert(obj_request_img_data_test(obj_request)); in rbd_img_obj_callback()
2338 img_request = obj_request->img_request; in rbd_img_obj_callback()
2340 dout("%s: img %p obj %p\n", __func__, img_request, obj_request); in rbd_img_obj_callback()
2350 for_each_obj_request_from(img_request, obj_request) { in rbd_img_obj_callback()
2354 if (!obj_request_done_test(obj_request)) in rbd_img_obj_callback()
2356 more = rbd_img_obj_end_request(obj_request); in rbd_img_obj_callback()
2375 static void rbd_img_obj_request_fill(struct rbd_obj_request *obj_request, in rbd_img_obj_request_fill() argument
2380 struct rbd_img_request *img_request = obj_request->img_request; in rbd_img_obj_request_fill()
2383 u64 offset = obj_request->offset; in rbd_img_obj_request_fill()
2384 u64 length = obj_request->length; in rbd_img_obj_request_fill()
2391 !obj_request_overlaps_parent(obj_request))) { in rbd_img_obj_request_fill()
2400 if (obj_request->img_offset + length == img_end) in rbd_img_obj_request_fill()
2423 if (obj_request->type == OBJ_REQUEST_BIO) in rbd_img_obj_request_fill()
2425 obj_request->bio_list, length); in rbd_img_obj_request_fill()
2426 else if (obj_request->type == OBJ_REQUEST_PAGES) in rbd_img_obj_request_fill()
2428 obj_request->pages, length, in rbd_img_obj_request_fill()
2433 rbd_osd_req_format_write(obj_request); in rbd_img_obj_request_fill()
2435 rbd_osd_req_format_read(obj_request); in rbd_img_obj_request_fill()
2451 struct rbd_obj_request *obj_request = NULL; in rbd_img_request_fill() local
2487 obj_request = rbd_obj_request_create(object_name, in rbd_img_request_fill()
2491 if (!obj_request) in rbd_img_request_fill()
2498 rbd_img_obj_request_add(img_request, obj_request); in rbd_img_request_fill()
2505 obj_request->bio_list = in rbd_img_request_fill()
2510 if (!obj_request->bio_list) in rbd_img_request_fill()
2515 obj_request->pages = pages; in rbd_img_request_fill()
2517 obj_request->page_count = page_count; in rbd_img_request_fill()
2525 obj_request); in rbd_img_request_fill()
2529 obj_request->osd_req = osd_req; in rbd_img_request_fill()
2530 obj_request->callback = rbd_img_obj_callback; in rbd_img_request_fill()
2531 obj_request->img_offset = img_offset; in rbd_img_request_fill()
2533 rbd_img_obj_request_fill(obj_request, osd_req, op_type, 0); in rbd_img_request_fill()
2544 for_each_obj_request_safe(img_request, obj_request, next_obj_request) in rbd_img_request_fill()
2545 rbd_img_obj_request_del(img_request, obj_request); in rbd_img_request_fill()
2551 rbd_osd_copyup_callback(struct rbd_obj_request *obj_request) in rbd_osd_copyup_callback() argument
2558 dout("%s: obj %p\n", __func__, obj_request); in rbd_osd_copyup_callback()
2560 rbd_assert(obj_request->type == OBJ_REQUEST_BIO || in rbd_osd_copyup_callback()
2561 obj_request->type == OBJ_REQUEST_NODATA); in rbd_osd_copyup_callback()
2562 rbd_assert(obj_request_img_data_test(obj_request)); in rbd_osd_copyup_callback()
2563 img_request = obj_request->img_request; in rbd_osd_copyup_callback()
2569 pages = obj_request->copyup_pages; in rbd_osd_copyup_callback()
2571 obj_request->copyup_pages = NULL; in rbd_osd_copyup_callback()
2572 page_count = obj_request->copyup_page_count; in rbd_osd_copyup_callback()
2574 obj_request->copyup_page_count = 0; in rbd_osd_copyup_callback()
2583 if (!obj_request->result) in rbd_osd_copyup_callback()
2584 obj_request->xferred = obj_request->length; in rbd_osd_copyup_callback()
2586 obj_request_done_set(obj_request); in rbd_osd_copyup_callback()
2613 orig_request = img_request->obj_request; in rbd_img_obj_parent_read_full_callback()
2698 static int rbd_img_obj_parent_read_full(struct rbd_obj_request *obj_request) in rbd_img_obj_parent_read_full() argument
2709 rbd_assert(obj_request_img_data_test(obj_request)); in rbd_img_obj_parent_read_full()
2710 rbd_assert(obj_request_type_valid(obj_request->type)); in rbd_img_obj_parent_read_full()
2712 img_request = obj_request->img_request; in rbd_img_obj_parent_read_full()
2721 img_offset = obj_request->img_offset - obj_request->offset; in rbd_img_obj_parent_read_full()
2747 parent_request = rbd_parent_request_create(obj_request, in rbd_img_obj_parent_read_full()
2765 parent_request->obj_request = NULL; in rbd_img_obj_parent_read_full()
2766 rbd_obj_request_put(obj_request); in rbd_img_obj_parent_read_full()
2772 obj_request->result = result; in rbd_img_obj_parent_read_full()
2773 obj_request->xferred = 0; in rbd_img_obj_parent_read_full()
2774 obj_request_done_set(obj_request); in rbd_img_obj_parent_read_full()
2779 static void rbd_img_obj_exists_callback(struct rbd_obj_request *obj_request) in rbd_img_obj_exists_callback() argument
2785 rbd_assert(!obj_request_img_data_test(obj_request)); in rbd_img_obj_exists_callback()
2792 orig_request = obj_request->obj_request; in rbd_img_obj_exists_callback()
2793 obj_request->obj_request = NULL; in rbd_img_obj_exists_callback()
2798 result = obj_request->result; in rbd_img_obj_exists_callback()
2799 obj_request->result = 0; in rbd_img_obj_exists_callback()
2802 obj_request, orig_request, result, in rbd_img_obj_exists_callback()
2803 obj_request->xferred, obj_request->length); in rbd_img_obj_exists_callback()
2804 rbd_obj_request_put(obj_request); in rbd_img_obj_exists_callback()
2846 static int rbd_img_obj_exists_submit(struct rbd_obj_request *obj_request) in rbd_img_obj_exists_submit() argument
2871 stat_request = rbd_obj_request_create(obj_request->object_name, 0, 0, in rbd_img_obj_exists_submit()
2876 rbd_obj_request_get(obj_request); in rbd_img_obj_exists_submit()
2877 stat_request->obj_request = obj_request; in rbd_img_obj_exists_submit()
2881 rbd_assert(obj_request->img_request); in rbd_img_obj_exists_submit()
2882 rbd_dev = obj_request->img_request->rbd_dev; in rbd_img_obj_exists_submit()
2898 rbd_obj_request_put(obj_request); in rbd_img_obj_exists_submit()
2903 static bool img_obj_request_simple(struct rbd_obj_request *obj_request) in img_obj_request_simple() argument
2908 rbd_assert(obj_request_img_data_test(obj_request)); in img_obj_request_simple()
2910 img_request = obj_request->img_request; in img_obj_request_simple()
2927 if (!obj_request_overlaps_parent(obj_request)) in img_obj_request_simple()
2934 if (!obj_request->offset && in img_obj_request_simple()
2935 obj_request->length == rbd_obj_bytes(&rbd_dev->header)) in img_obj_request_simple()
2942 if (obj_request_known_test(obj_request) && in img_obj_request_simple()
2943 obj_request_exists_test(obj_request)) in img_obj_request_simple()
2949 static int rbd_img_obj_request_submit(struct rbd_obj_request *obj_request) in rbd_img_obj_request_submit() argument
2951 if (img_obj_request_simple(obj_request)) { in rbd_img_obj_request_submit()
2955 rbd_dev = obj_request->img_request->rbd_dev; in rbd_img_obj_request_submit()
2958 return rbd_obj_request_submit(osdc, obj_request); in rbd_img_obj_request_submit()
2967 if (obj_request_known_test(obj_request)) in rbd_img_obj_request_submit()
2968 return rbd_img_obj_parent_read_full(obj_request); in rbd_img_obj_request_submit()
2972 return rbd_img_obj_exists_submit(obj_request); in rbd_img_obj_request_submit()
2977 struct rbd_obj_request *obj_request; in rbd_img_request_submit() local
2981 for_each_obj_request_safe(img_request, obj_request, next_obj_request) { in rbd_img_request_submit()
2984 ret = rbd_img_obj_request_submit(obj_request); in rbd_img_request_submit()
2994 struct rbd_obj_request *obj_request; in rbd_img_parent_read_callback() local
3004 obj_request = img_request->obj_request; in rbd_img_parent_read_callback()
3014 rbd_assert(obj_request); in rbd_img_parent_read_callback()
3015 rbd_assert(obj_request->img_request); in rbd_img_parent_read_callback()
3016 rbd_dev = obj_request->img_request->rbd_dev; in rbd_img_parent_read_callback()
3021 img_result = rbd_obj_request_submit(osdc, obj_request); in rbd_img_parent_read_callback()
3026 obj_request->result = img_result; in rbd_img_parent_read_callback()
3027 if (obj_request->result) in rbd_img_parent_read_callback()
3037 rbd_assert(obj_request->img_offset < U64_MAX - obj_request->length); in rbd_img_parent_read_callback()
3038 obj_end = obj_request->img_offset + obj_request->length; in rbd_img_parent_read_callback()
3042 if (obj_request->img_offset < rbd_dev->parent_overlap) in rbd_img_parent_read_callback()
3044 obj_request->img_offset; in rbd_img_parent_read_callback()
3046 obj_request->xferred = min(img_xferred, xferred); in rbd_img_parent_read_callback()
3048 obj_request->xferred = img_xferred; in rbd_img_parent_read_callback()
3051 rbd_img_obj_request_read_callback(obj_request); in rbd_img_parent_read_callback()
3052 rbd_obj_request_complete(obj_request); in rbd_img_parent_read_callback()
3055 static void rbd_img_parent_read(struct rbd_obj_request *obj_request) in rbd_img_parent_read() argument
3060 rbd_assert(obj_request_img_data_test(obj_request)); in rbd_img_parent_read()
3061 rbd_assert(obj_request->img_request != NULL); in rbd_img_parent_read()
3062 rbd_assert(obj_request->result == (s32) -ENOENT); in rbd_img_parent_read()
3063 rbd_assert(obj_request_type_valid(obj_request->type)); in rbd_img_parent_read()
3066 img_request = rbd_parent_request_create(obj_request, in rbd_img_parent_read()
3067 obj_request->img_offset, in rbd_img_parent_read()
3068 obj_request->length); in rbd_img_parent_read()
3073 if (obj_request->type == OBJ_REQUEST_BIO) in rbd_img_parent_read()
3075 obj_request->bio_list); in rbd_img_parent_read()
3078 obj_request->pages); in rbd_img_parent_read()
3091 obj_request->result = result; in rbd_img_parent_read()
3092 obj_request->xferred = 0; in rbd_img_parent_read()
3093 obj_request_done_set(obj_request); in rbd_img_parent_read()
3098 struct rbd_obj_request *obj_request; in rbd_obj_notify_ack_sync() local
3102 obj_request = rbd_obj_request_create(rbd_dev->header_name, 0, 0, in rbd_obj_notify_ack_sync()
3104 if (!obj_request) in rbd_obj_notify_ack_sync()
3108 obj_request->osd_req = rbd_osd_req_create(rbd_dev, OBJ_OP_READ, 1, in rbd_obj_notify_ack_sync()
3109 obj_request); in rbd_obj_notify_ack_sync()
3110 if (!obj_request->osd_req) in rbd_obj_notify_ack_sync()
3113 osd_req_op_watch_init(obj_request->osd_req, 0, CEPH_OSD_OP_NOTIFY_ACK, in rbd_obj_notify_ack_sync()
3115 rbd_osd_req_format_read(obj_request); in rbd_obj_notify_ack_sync()
3117 ret = rbd_obj_request_submit(osdc, obj_request); in rbd_obj_notify_ack_sync()
3120 ret = rbd_obj_request_wait(obj_request); in rbd_obj_notify_ack_sync()
3122 rbd_obj_request_put(obj_request); in rbd_obj_notify_ack_sync()
3164 struct rbd_obj_request *obj_request; in rbd_obj_watch_request_helper() local
3167 obj_request = rbd_obj_request_create(rbd_dev->header_name, 0, 0, in rbd_obj_watch_request_helper()
3169 if (!obj_request) in rbd_obj_watch_request_helper()
3172 obj_request->osd_req = rbd_osd_req_create(rbd_dev, OBJ_OP_WRITE, 1, in rbd_obj_watch_request_helper()
3173 obj_request); in rbd_obj_watch_request_helper()
3174 if (!obj_request->osd_req) { in rbd_obj_watch_request_helper()
3179 osd_req_op_watch_init(obj_request->osd_req, 0, CEPH_OSD_OP_WATCH, in rbd_obj_watch_request_helper()
3181 rbd_osd_req_format_write(obj_request); in rbd_obj_watch_request_helper()
3184 ceph_osdc_set_request_linger(osdc, obj_request->osd_req); in rbd_obj_watch_request_helper()
3186 ret = rbd_obj_request_submit(osdc, obj_request); in rbd_obj_watch_request_helper()
3190 ret = rbd_obj_request_wait_timeout(obj_request, opts->mount_timeout); in rbd_obj_watch_request_helper()
3194 ret = obj_request->result; in rbd_obj_watch_request_helper()
3197 rbd_obj_request_end(obj_request); in rbd_obj_watch_request_helper()
3201 return obj_request; in rbd_obj_watch_request_helper()
3204 rbd_obj_request_put(obj_request); in rbd_obj_watch_request_helper()
3214 struct rbd_obj_request *obj_request; in rbd_dev_header_watch_sync() local
3225 obj_request = rbd_obj_watch_request_helper(rbd_dev, true); in rbd_dev_header_watch_sync()
3226 if (IS_ERR(obj_request)) { in rbd_dev_header_watch_sync()
3229 return PTR_ERR(obj_request); in rbd_dev_header_watch_sync()
3240 rbd_dev->watch_request = obj_request; in rbd_dev_header_watch_sync()
3250 struct rbd_obj_request *obj_request; in rbd_dev_header_unwatch_sync() local
3259 obj_request = rbd_obj_watch_request_helper(rbd_dev, false); in rbd_dev_header_unwatch_sync()
3260 if (!IS_ERR(obj_request)) in rbd_dev_header_unwatch_sync()
3261 rbd_obj_request_put(obj_request); in rbd_dev_header_unwatch_sync()
3264 PTR_ERR(obj_request)); in rbd_dev_header_unwatch_sync()
3284 struct rbd_obj_request *obj_request; in rbd_obj_method_sync() local
3302 obj_request = rbd_obj_request_create(object_name, 0, inbound_size, in rbd_obj_method_sync()
3304 if (!obj_request) in rbd_obj_method_sync()
3307 obj_request->pages = pages; in rbd_obj_method_sync()
3308 obj_request->page_count = page_count; in rbd_obj_method_sync()
3310 obj_request->osd_req = rbd_osd_req_create(rbd_dev, OBJ_OP_READ, 1, in rbd_obj_method_sync()
3311 obj_request); in rbd_obj_method_sync()
3312 if (!obj_request->osd_req) in rbd_obj_method_sync()
3315 osd_req_op_cls_init(obj_request->osd_req, 0, CEPH_OSD_OP_CALL, in rbd_obj_method_sync()
3326 osd_req_op_cls_request_data_pagelist(obj_request->osd_req, 0, in rbd_obj_method_sync()
3329 osd_req_op_cls_response_data_pages(obj_request->osd_req, 0, in rbd_obj_method_sync()
3330 obj_request->pages, inbound_size, in rbd_obj_method_sync()
3332 rbd_osd_req_format_read(obj_request); in rbd_obj_method_sync()
3334 ret = rbd_obj_request_submit(osdc, obj_request); in rbd_obj_method_sync()
3337 ret = rbd_obj_request_wait(obj_request); in rbd_obj_method_sync()
3341 ret = obj_request->result; in rbd_obj_method_sync()
3345 rbd_assert(obj_request->xferred < (u64)INT_MAX); in rbd_obj_method_sync()
3346 ret = (int)obj_request->xferred; in rbd_obj_method_sync()
3347 ceph_copy_from_page_vector(pages, inbound, 0, obj_request->xferred); in rbd_obj_method_sync()
3349 if (obj_request) in rbd_obj_method_sync()
3350 rbd_obj_request_put(obj_request); in rbd_obj_method_sync()
3506 struct rbd_obj_request *obj_request; in rbd_obj_read_sync() local
3518 obj_request = rbd_obj_request_create(object_name, offset, length, in rbd_obj_read_sync()
3520 if (!obj_request) in rbd_obj_read_sync()
3523 obj_request->pages = pages; in rbd_obj_read_sync()
3524 obj_request->page_count = page_count; in rbd_obj_read_sync()
3526 obj_request->osd_req = rbd_osd_req_create(rbd_dev, OBJ_OP_READ, 1, in rbd_obj_read_sync()
3527 obj_request); in rbd_obj_read_sync()
3528 if (!obj_request->osd_req) in rbd_obj_read_sync()
3531 osd_req_op_extent_init(obj_request->osd_req, 0, CEPH_OSD_OP_READ, in rbd_obj_read_sync()
3533 osd_req_op_extent_osd_data_pages(obj_request->osd_req, 0, in rbd_obj_read_sync()
3534 obj_request->pages, in rbd_obj_read_sync()
3535 obj_request->length, in rbd_obj_read_sync()
3536 obj_request->offset & ~PAGE_MASK, in rbd_obj_read_sync()
3538 rbd_osd_req_format_read(obj_request); in rbd_obj_read_sync()
3540 ret = rbd_obj_request_submit(osdc, obj_request); in rbd_obj_read_sync()
3543 ret = rbd_obj_request_wait(obj_request); in rbd_obj_read_sync()
3547 ret = obj_request->result; in rbd_obj_read_sync()
3551 rbd_assert(obj_request->xferred <= (u64) SIZE_MAX); in rbd_obj_read_sync()
3552 size = (size_t) obj_request->xferred; in rbd_obj_read_sync()
3557 if (obj_request) in rbd_obj_read_sync()
3558 rbd_obj_request_put(obj_request); in rbd_obj_read_sync()