• Home
  • Raw
  • Download

Lines Matching refs:req

467 static void put_request_session(struct ceph_mds_request *req)  in put_request_session()  argument
469 if (req->r_session) { in put_request_session()
470 ceph_put_mds_session(req->r_session); in put_request_session()
471 req->r_session = NULL; in put_request_session()
477 struct ceph_mds_request *req = container_of(kref, in ceph_mdsc_release_request() local
480 if (req->r_request) in ceph_mdsc_release_request()
481 ceph_msg_put(req->r_request); in ceph_mdsc_release_request()
482 if (req->r_reply) { in ceph_mdsc_release_request()
483 ceph_msg_put(req->r_reply); in ceph_mdsc_release_request()
484 destroy_reply_info(&req->r_reply_info); in ceph_mdsc_release_request()
486 if (req->r_inode) { in ceph_mdsc_release_request()
487 ceph_put_cap_refs(ceph_inode(req->r_inode), CEPH_CAP_PIN); in ceph_mdsc_release_request()
488 iput(req->r_inode); in ceph_mdsc_release_request()
490 if (req->r_locked_dir) in ceph_mdsc_release_request()
491 ceph_put_cap_refs(ceph_inode(req->r_locked_dir), CEPH_CAP_PIN); in ceph_mdsc_release_request()
492 if (req->r_target_inode) in ceph_mdsc_release_request()
493 iput(req->r_target_inode); in ceph_mdsc_release_request()
494 if (req->r_dentry) in ceph_mdsc_release_request()
495 dput(req->r_dentry); in ceph_mdsc_release_request()
496 if (req->r_old_dentry) { in ceph_mdsc_release_request()
503 ceph_put_cap_refs(ceph_inode(req->r_old_dentry_dir), in ceph_mdsc_release_request()
505 dput(req->r_old_dentry); in ceph_mdsc_release_request()
506 iput(req->r_old_dentry_dir); in ceph_mdsc_release_request()
508 kfree(req->r_path1); in ceph_mdsc_release_request()
509 kfree(req->r_path2); in ceph_mdsc_release_request()
510 put_request_session(req); in ceph_mdsc_release_request()
511 ceph_unreserve_caps(req->r_mdsc, &req->r_caps_reservation); in ceph_mdsc_release_request()
512 kfree(req); in ceph_mdsc_release_request()
523 struct ceph_mds_request *req; in __lookup_request() local
527 req = rb_entry(n, struct ceph_mds_request, r_node); in __lookup_request()
528 if (tid < req->r_tid) in __lookup_request()
530 else if (tid > req->r_tid) in __lookup_request()
533 ceph_mdsc_get_request(req); in __lookup_request()
534 return req; in __lookup_request()
545 struct ceph_mds_request *req = NULL; in __insert_request() local
549 req = rb_entry(parent, struct ceph_mds_request, r_node); in __insert_request()
550 if (new->r_tid < req->r_tid) in __insert_request()
552 else if (new->r_tid > req->r_tid) in __insert_request()
569 struct ceph_mds_request *req, in __register_request() argument
572 req->r_tid = ++mdsc->last_tid; in __register_request()
573 if (req->r_num_caps) in __register_request()
574 ceph_reserve_caps(mdsc, &req->r_caps_reservation, in __register_request()
575 req->r_num_caps); in __register_request()
576 dout("__register_request %p tid %lld\n", req, req->r_tid); in __register_request()
577 ceph_mdsc_get_request(req); in __register_request()
578 __insert_request(mdsc, req); in __register_request()
580 req->r_uid = current_fsuid(); in __register_request()
581 req->r_gid = current_fsgid(); in __register_request()
588 req->r_unsafe_dir = dir; in __register_request()
589 list_add_tail(&req->r_unsafe_dir_item, &ci->i_unsafe_dirops); in __register_request()
595 struct ceph_mds_request *req) in __unregister_request() argument
597 dout("__unregister_request %p tid %lld\n", req, req->r_tid); in __unregister_request()
598 rb_erase(&req->r_node, &mdsc->request_tree); in __unregister_request()
599 RB_CLEAR_NODE(&req->r_node); in __unregister_request()
601 if (req->r_unsafe_dir) { in __unregister_request()
602 struct ceph_inode_info *ci = ceph_inode(req->r_unsafe_dir); in __unregister_request()
605 list_del_init(&req->r_unsafe_dir_item); in __unregister_request()
608 iput(req->r_unsafe_dir); in __unregister_request()
609 req->r_unsafe_dir = NULL; in __unregister_request()
612 ceph_mdsc_put_request(req); in __unregister_request()
637 struct ceph_mds_request *req) in __choose_mds() argument
642 int mode = req->r_direct_mode; in __choose_mds()
644 u32 hash = req->r_direct_hash; in __choose_mds()
645 bool is_hash = req->r_direct_is_hash; in __choose_mds()
651 if (req->r_resend_mds >= 0 && in __choose_mds()
652 (__have_session(mdsc, req->r_resend_mds) || in __choose_mds()
653 ceph_mdsmap_get_state(mdsc->mdsmap, req->r_resend_mds) > 0)) { in __choose_mds()
655 req->r_resend_mds); in __choose_mds()
656 return req->r_resend_mds; in __choose_mds()
663 if (req->r_inode) { in __choose_mds()
664 inode = req->r_inode; in __choose_mds()
665 } else if (req->r_dentry) { in __choose_mds()
667 struct dentry *parent = req->r_dentry->d_parent; in __choose_mds()
672 inode = req->r_dentry->d_inode; in __choose_mds()
679 } else if (req->r_dentry->d_inode) { in __choose_mds()
681 inode = req->r_dentry->d_inode; in __choose_mds()
685 hash = ceph_dentry_hash(dir, req->r_dentry); in __choose_mds()
1393 struct ceph_mds_request *req = kzalloc(sizeof(*req), GFP_NOFS); in ceph_mdsc_create_request() local
1395 if (!req) in ceph_mdsc_create_request()
1398 mutex_init(&req->r_fill_mutex); in ceph_mdsc_create_request()
1399 req->r_mdsc = mdsc; in ceph_mdsc_create_request()
1400 req->r_started = jiffies; in ceph_mdsc_create_request()
1401 req->r_resend_mds = -1; in ceph_mdsc_create_request()
1402 INIT_LIST_HEAD(&req->r_unsafe_dir_item); in ceph_mdsc_create_request()
1403 req->r_fmode = -1; in ceph_mdsc_create_request()
1404 kref_init(&req->r_kref); in ceph_mdsc_create_request()
1405 INIT_LIST_HEAD(&req->r_wait); in ceph_mdsc_create_request()
1406 init_completion(&req->r_completion); in ceph_mdsc_create_request()
1407 init_completion(&req->r_safe_completion); in ceph_mdsc_create_request()
1408 INIT_LIST_HEAD(&req->r_unsafe_item); in ceph_mdsc_create_request()
1410 req->r_op = op; in ceph_mdsc_create_request()
1411 req->r_direct_mode = mode; in ceph_mdsc_create_request()
1412 return req; in ceph_mdsc_create_request()
1430 struct ceph_mds_request *req = __get_oldest_req(mdsc); in __get_oldest_tid() local
1432 if (req) in __get_oldest_tid()
1433 return req->r_tid; in __get_oldest_tid()
1614 struct ceph_mds_request *req, in create_request_message() argument
1629 ret = set_request_path_attr(req->r_inode, req->r_dentry, in create_request_message()
1630 req->r_path1, req->r_ino1.ino, in create_request_message()
1637 ret = set_request_path_attr(NULL, req->r_old_dentry, in create_request_message()
1638 req->r_path2, req->r_ino2.ino, in create_request_message()
1650 (!!req->r_inode_drop + !!req->r_dentry_drop + in create_request_message()
1651 !!req->r_old_inode_drop + !!req->r_old_dentry_drop); in create_request_message()
1652 if (req->r_dentry_drop) in create_request_message()
1653 len += req->r_dentry->d_name.len; in create_request_message()
1654 if (req->r_old_dentry_drop) in create_request_message()
1655 len += req->r_old_dentry->d_name.len; in create_request_message()
1663 msg->hdr.tid = cpu_to_le64(req->r_tid); in create_request_message()
1670 head->op = cpu_to_le32(req->r_op); in create_request_message()
1671 head->caller_uid = cpu_to_le32(req->r_uid); in create_request_message()
1672 head->caller_gid = cpu_to_le32(req->r_gid); in create_request_message()
1673 head->args = req->r_args; in create_request_message()
1679 req->r_request_release_offset = p - msg->front.iov_base; in create_request_message()
1683 if (req->r_inode_drop) in create_request_message()
1685 req->r_inode ? req->r_inode : req->r_dentry->d_inode, in create_request_message()
1686 mds, req->r_inode_drop, req->r_inode_unless, 0); in create_request_message()
1687 if (req->r_dentry_drop) in create_request_message()
1688 releases += ceph_encode_dentry_release(&p, req->r_dentry, in create_request_message()
1689 mds, req->r_dentry_drop, req->r_dentry_unless); in create_request_message()
1690 if (req->r_old_dentry_drop) in create_request_message()
1691 releases += ceph_encode_dentry_release(&p, req->r_old_dentry, in create_request_message()
1692 mds, req->r_old_dentry_drop, req->r_old_dentry_unless); in create_request_message()
1693 if (req->r_old_inode_drop) in create_request_message()
1695 req->r_old_dentry->d_inode, in create_request_message()
1696 mds, req->r_old_inode_drop, req->r_old_inode_unless, 0); in create_request_message()
1703 msg->pages = req->r_pages; in create_request_message()
1704 msg->nr_pages = req->r_num_pages; in create_request_message()
1705 msg->hdr.data_len = cpu_to_le32(req->r_data_len); in create_request_message()
1723 struct ceph_mds_request *req) in complete_request() argument
1725 if (req->r_callback) in complete_request()
1726 req->r_callback(mdsc, req); in complete_request()
1728 complete_all(&req->r_completion); in complete_request()
1735 struct ceph_mds_request *req, in __prepare_send_request() argument
1742 req->r_attempts++; in __prepare_send_request()
1743 if (req->r_inode) { in __prepare_send_request()
1745 ceph_get_cap_for_mds(ceph_inode(req->r_inode), mds); in __prepare_send_request()
1748 req->r_sent_on_mseq = cap->mseq; in __prepare_send_request()
1750 req->r_sent_on_mseq = -1; in __prepare_send_request()
1752 dout("prepare_send_request %p tid %lld %s (attempt %d)\n", req, in __prepare_send_request()
1753 req->r_tid, ceph_mds_op_name(req->r_op), req->r_attempts); in __prepare_send_request()
1755 if (req->r_got_unsafe) { in __prepare_send_request()
1762 msg = req->r_request; in __prepare_send_request()
1769 if (req->r_target_inode) in __prepare_send_request()
1770 rhead->ino = cpu_to_le64(ceph_ino(req->r_target_inode)); in __prepare_send_request()
1772 rhead->num_retry = req->r_attempts - 1; in __prepare_send_request()
1776 msg->hdr.front_len = cpu_to_le32(req->r_request_release_offset); in __prepare_send_request()
1777 msg->front.iov_len = req->r_request_release_offset; in __prepare_send_request()
1781 if (req->r_request) { in __prepare_send_request()
1782 ceph_msg_put(req->r_request); in __prepare_send_request()
1783 req->r_request = NULL; in __prepare_send_request()
1785 msg = create_request_message(mdsc, req, mds); in __prepare_send_request()
1787 req->r_err = PTR_ERR(msg); in __prepare_send_request()
1788 complete_request(mdsc, req); in __prepare_send_request()
1791 req->r_request = msg; in __prepare_send_request()
1795 if (req->r_got_unsafe) in __prepare_send_request()
1797 if (req->r_locked_dir) in __prepare_send_request()
1800 rhead->num_fwd = req->r_num_fwd; in __prepare_send_request()
1801 rhead->num_retry = req->r_attempts - 1; in __prepare_send_request()
1804 dout(" r_locked_dir = %p\n", req->r_locked_dir); in __prepare_send_request()
1812 struct ceph_mds_request *req) in __do_request() argument
1818 if (req->r_err || req->r_got_result) in __do_request()
1821 if (req->r_timeout && in __do_request()
1822 time_after_eq(jiffies, req->r_started + req->r_timeout)) { in __do_request()
1828 put_request_session(req); in __do_request()
1830 mds = __choose_mds(mdsc, req); in __do_request()
1834 list_add(&req->r_wait, &mdsc->waiting_for_map); in __do_request()
1847 req->r_session = get_session(session); in __do_request()
1856 list_add(&req->r_wait, &session->s_waiting); in __do_request()
1861 req->r_resend_mds = -1; /* forget any previous mds hint */ in __do_request()
1863 if (req->r_request_started == 0) /* note request start time */ in __do_request()
1864 req->r_request_started = jiffies; in __do_request()
1866 err = __prepare_send_request(mdsc, req, mds); in __do_request()
1868 ceph_msg_get(req->r_request); in __do_request()
1869 ceph_con_send(&session->s_con, req->r_request); in __do_request()
1878 req->r_err = err; in __do_request()
1879 complete_request(mdsc, req); in __do_request()
1889 struct ceph_mds_request *req; in __wake_requests() local
1895 req = list_entry(tmp_list.next, in __wake_requests()
1897 list_del_init(&req->r_wait); in __wake_requests()
1898 __do_request(mdsc, req); in __wake_requests()
1908 struct ceph_mds_request *req; in kick_requests() local
1913 req = rb_entry(p, struct ceph_mds_request, r_node); in kick_requests()
1914 if (req->r_got_unsafe) in kick_requests()
1916 if (req->r_session && in kick_requests()
1917 req->r_session->s_mds == mds) { in kick_requests()
1918 dout(" kicking tid %llu\n", req->r_tid); in kick_requests()
1919 __do_request(mdsc, req); in kick_requests()
1925 struct ceph_mds_request *req) in ceph_mdsc_submit_request() argument
1927 dout("submit_request on %p\n", req); in ceph_mdsc_submit_request()
1929 __register_request(mdsc, req, NULL); in ceph_mdsc_submit_request()
1930 __do_request(mdsc, req); in ceph_mdsc_submit_request()
1940 struct ceph_mds_request *req) in ceph_mdsc_do_request() argument
1944 dout("do_request on %p\n", req); in ceph_mdsc_do_request()
1947 if (req->r_inode) in ceph_mdsc_do_request()
1948 ceph_get_cap_refs(ceph_inode(req->r_inode), CEPH_CAP_PIN); in ceph_mdsc_do_request()
1949 if (req->r_locked_dir) in ceph_mdsc_do_request()
1950 ceph_get_cap_refs(ceph_inode(req->r_locked_dir), CEPH_CAP_PIN); in ceph_mdsc_do_request()
1951 if (req->r_old_dentry) in ceph_mdsc_do_request()
1952 ceph_get_cap_refs(ceph_inode(req->r_old_dentry_dir), in ceph_mdsc_do_request()
1957 __register_request(mdsc, req, dir); in ceph_mdsc_do_request()
1958 __do_request(mdsc, req); in ceph_mdsc_do_request()
1960 if (req->r_err) { in ceph_mdsc_do_request()
1961 err = req->r_err; in ceph_mdsc_do_request()
1962 __unregister_request(mdsc, req); in ceph_mdsc_do_request()
1970 if (req->r_timeout) { in ceph_mdsc_do_request()
1972 &req->r_completion, req->r_timeout); in ceph_mdsc_do_request()
1976 err = wait_for_completion_killable(&req->r_completion); in ceph_mdsc_do_request()
1982 if (req->r_got_result) { in ceph_mdsc_do_request()
1983 err = le32_to_cpu(req->r_reply_info.head->result); in ceph_mdsc_do_request()
1985 dout("aborted request %lld with %d\n", req->r_tid, err); in ceph_mdsc_do_request()
1992 mutex_lock(&req->r_fill_mutex); in ceph_mdsc_do_request()
1993 req->r_err = err; in ceph_mdsc_do_request()
1994 req->r_aborted = true; in ceph_mdsc_do_request()
1995 mutex_unlock(&req->r_fill_mutex); in ceph_mdsc_do_request()
1997 if (req->r_locked_dir && in ceph_mdsc_do_request()
1998 (req->r_op & CEPH_MDS_OP_WRITE)) in ceph_mdsc_do_request()
1999 ceph_invalidate_dir_request(req); in ceph_mdsc_do_request()
2001 err = req->r_err; in ceph_mdsc_do_request()
2006 dout("do_request %p done, result %d\n", req, err); in ceph_mdsc_do_request()
2014 void ceph_invalidate_dir_request(struct ceph_mds_request *req) in ceph_invalidate_dir_request() argument
2016 struct inode *inode = req->r_locked_dir; in ceph_invalidate_dir_request()
2025 if (req->r_dentry) in ceph_invalidate_dir_request()
2026 ceph_invalidate_dentry_lease(req->r_dentry); in ceph_invalidate_dir_request()
2027 if (req->r_old_dentry) in ceph_invalidate_dir_request()
2028 ceph_invalidate_dentry_lease(req->r_old_dentry); in ceph_invalidate_dir_request()
2041 struct ceph_mds_request *req; in handle_reply() local
2057 req = __lookup_request(mdsc, tid); in handle_reply()
2058 if (!req) { in handle_reply()
2063 dout("handle_reply %p\n", req); in handle_reply()
2066 if (req->r_session != session) { in handle_reply()
2069 req->r_session ? req->r_session->s_mds : -1); in handle_reply()
2075 if ((req->r_got_unsafe && !head->safe) || in handle_reply()
2076 (req->r_got_safe && head->safe)) { in handle_reply()
2082 if (req->r_got_safe && !head->safe) { in handle_reply()
2099 dout("got ESTALE on request %llu", req->r_tid); in handle_reply()
2100 if (!req->r_inode) { in handle_reply()
2102 } else if (req->r_direct_mode != USE_AUTH_MDS) { in handle_reply()
2104 req->r_direct_mode = USE_AUTH_MDS; in handle_reply()
2105 __do_request(mdsc, req); in handle_reply()
2109 struct ceph_inode_info *ci = ceph_inode(req->r_inode); in handle_reply()
2112 if (req->r_session) in handle_reply()
2114 req->r_session->s_mds); in handle_reply()
2118 (cap->mseq != req->r_sent_on_mseq)) { in handle_reply()
2120 __do_request(mdsc, req); in handle_reply()
2125 dout("have to return ESTALE on request %llu", req->r_tid); in handle_reply()
2130 req->r_got_safe = true; in handle_reply()
2131 __unregister_request(mdsc, req); in handle_reply()
2132 complete_all(&req->r_safe_completion); in handle_reply()
2134 if (req->r_got_unsafe) { in handle_reply()
2143 list_del_init(&req->r_unsafe_item); in handle_reply()
2152 req->r_got_unsafe = true; in handle_reply()
2153 list_add_tail(&req->r_unsafe_item, &req->r_session->s_unsafe); in handle_reply()
2157 rinfo = &req->r_reply_info; in handle_reply()
2180 mutex_lock(&req->r_fill_mutex); in handle_reply()
2181 err = ceph_fill_trace(mdsc->fsc->sb, req, req->r_session); in handle_reply()
2183 if (result == 0 && req->r_op != CEPH_MDS_OP_GETFILELOCK && in handle_reply()
2185 ceph_readdir_prepopulate(req, req->r_session); in handle_reply()
2186 ceph_unreserve_caps(mdsc, &req->r_caps_reservation); in handle_reply()
2188 mutex_unlock(&req->r_fill_mutex); in handle_reply()
2193 if (!req->r_aborted) { in handle_reply()
2195 req->r_err = err; in handle_reply()
2197 req->r_reply = msg; in handle_reply()
2199 req->r_got_result = true; in handle_reply()
2206 ceph_add_cap_releases(mdsc, req->r_session); in handle_reply()
2210 complete_request(mdsc, req); in handle_reply()
2212 ceph_mdsc_put_request(req); in handle_reply()
2225 struct ceph_mds_request *req; in handle_forward() local
2238 req = __lookup_request(mdsc, tid); in handle_forward()
2239 if (!req) { in handle_forward()
2244 if (req->r_aborted) { in handle_forward()
2246 __unregister_request(mdsc, req); in handle_forward()
2247 } else if (fwd_seq <= req->r_num_fwd) { in handle_forward()
2249 tid, next_mds, req->r_num_fwd, fwd_seq); in handle_forward()
2253 BUG_ON(req->r_err); in handle_forward()
2254 BUG_ON(req->r_got_result); in handle_forward()
2255 req->r_num_fwd = fwd_seq; in handle_forward()
2256 req->r_resend_mds = next_mds; in handle_forward()
2257 put_request_session(req); in handle_forward()
2258 __do_request(mdsc, req); in handle_forward()
2260 ceph_mdsc_put_request(req); in handle_forward()
2372 struct ceph_mds_request *req, *nreq; in replay_unsafe_requests() local
2378 list_for_each_entry_safe(req, nreq, &session->s_unsafe, r_unsafe_item) { in replay_unsafe_requests()
2379 err = __prepare_send_request(mdsc, req, session->s_mds); in replay_unsafe_requests()
2381 ceph_msg_get(req->r_request); in replay_unsafe_requests()
2382 ceph_con_send(&session->s_con, req->r_request); in replay_unsafe_requests()
3060 struct ceph_mds_request *req; in wait_requests() local
3073 while ((req = __get_oldest_req(mdsc))) { in wait_requests()
3075 req->r_tid); in wait_requests()
3076 __unregister_request(mdsc, req); in wait_requests()
3108 struct ceph_mds_request *req = NULL, *nextreq; in wait_unsafe_requests() local
3114 req = __get_oldest_req(mdsc); in wait_unsafe_requests()
3115 while (req && req->r_tid <= want_tid) { in wait_unsafe_requests()
3117 n = rb_next(&req->r_node); in wait_unsafe_requests()
3122 if ((req->r_op & CEPH_MDS_OP_WRITE)) { in wait_unsafe_requests()
3124 ceph_mdsc_get_request(req); in wait_unsafe_requests()
3129 req->r_tid, want_tid); in wait_unsafe_requests()
3130 wait_for_completion(&req->r_safe_completion); in wait_unsafe_requests()
3132 ceph_mdsc_put_request(req); in wait_unsafe_requests()
3142 req = nextreq; in wait_unsafe_requests()