lreq 548 include/linux/ceph/osd_client.h struct ceph_osd_linger_request *lreq); lreq 566 include/linux/ceph/osd_client.h struct ceph_osd_linger_request *lreq); lreq 245 net/ceph/debugfs.c struct ceph_osd_linger_request *lreq) lreq 247 net/ceph/debugfs.c seq_printf(s, "%llu\t", lreq->linger_id); lreq 248 net/ceph/debugfs.c dump_target(s, &lreq->t); lreq 250 net/ceph/debugfs.c seq_printf(s, "\t%u\t%s%s/%d\n", lreq->register_gen, lreq 251 net/ceph/debugfs.c lreq->is_watch ? "W" : "N", lreq->committed ? "C" : "", lreq 252 net/ceph/debugfs.c lreq->last_error); lreq 261 net/ceph/debugfs.c struct ceph_osd_linger_request *lreq = lreq 264 net/ceph/debugfs.c dump_linger_request(s, lreq); lreq 52 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq); lreq 54 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq); lreq 85 net/ceph/osd_client.c static inline void verify_lreq_locked(struct ceph_osd_linger_request *lreq) lreq 87 net/ceph/osd_client.c WARN_ON(!mutex_is_locked(&lreq->lock)); lreq 93 net/ceph/osd_client.c static inline void verify_lreq_locked(struct ceph_osd_linger_request *lreq) { } lreq 1327 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq = lreq 1332 net/ceph/osd_client.c dout(" reassigning lreq %p linger_id %llu\n", lreq, lreq 1333 net/ceph/osd_client.c lreq->linger_id); lreq 1334 net/ceph/osd_client.c unlink_linger(osd, lreq); lreq 1335 net/ceph/osd_client.c link_linger(&osdc->homeless_osd, lreq); lreq 2655 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq = lreq 2658 net/ceph/osd_client.c dout("%s lreq %p reg_req %p ping_req %p\n", __func__, lreq, lreq 2659 net/ceph/osd_client.c lreq->reg_req, lreq->ping_req); lreq 2660 net/ceph/osd_client.c WARN_ON(!RB_EMPTY_NODE(&lreq->node)); lreq 2661 net/ceph/osd_client.c WARN_ON(!RB_EMPTY_NODE(&lreq->osdc_node)); lreq 2662 net/ceph/osd_client.c WARN_ON(!RB_EMPTY_NODE(&lreq->mc_node)); lreq 2663 net/ceph/osd_client.c WARN_ON(!list_empty(&lreq->scan_item)); lreq 2664 net/ceph/osd_client.c WARN_ON(!list_empty(&lreq->pending_lworks)); lreq 2665 net/ceph/osd_client.c WARN_ON(lreq->osd); lreq 2667 net/ceph/osd_client.c if (lreq->reg_req) lreq 2668 net/ceph/osd_client.c ceph_osdc_put_request(lreq->reg_req); lreq 2669 net/ceph/osd_client.c if (lreq->ping_req) lreq 2670 net/ceph/osd_client.c ceph_osdc_put_request(lreq->ping_req); lreq 2671 net/ceph/osd_client.c target_destroy(&lreq->t); lreq 2672 net/ceph/osd_client.c kfree(lreq); lreq 2675 net/ceph/osd_client.c static void linger_put(struct ceph_osd_linger_request *lreq) lreq 2677 net/ceph/osd_client.c if (lreq) lreq 2678 net/ceph/osd_client.c kref_put(&lreq->kref, linger_release); lreq 2682 net/ceph/osd_client.c linger_get(struct ceph_osd_linger_request *lreq) lreq 2684 net/ceph/osd_client.c kref_get(&lreq->kref); lreq 2685 net/ceph/osd_client.c return lreq; lreq 2691 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq; lreq 2693 net/ceph/osd_client.c lreq = kzalloc(sizeof(*lreq), GFP_NOIO); lreq 2694 net/ceph/osd_client.c if (!lreq) lreq 2697 net/ceph/osd_client.c kref_init(&lreq->kref); lreq 2698 net/ceph/osd_client.c mutex_init(&lreq->lock); lreq 2699 net/ceph/osd_client.c RB_CLEAR_NODE(&lreq->node); lreq 2700 net/ceph/osd_client.c RB_CLEAR_NODE(&lreq->osdc_node); lreq 2701 net/ceph/osd_client.c RB_CLEAR_NODE(&lreq->mc_node); lreq 2702 net/ceph/osd_client.c INIT_LIST_HEAD(&lreq->scan_item); lreq 2703 net/ceph/osd_client.c INIT_LIST_HEAD(&lreq->pending_lworks); lreq 2704 net/ceph/osd_client.c init_completion(&lreq->reg_commit_wait); lreq 2705 net/ceph/osd_client.c init_completion(&lreq->notify_finish_wait); lreq 2707 net/ceph/osd_client.c lreq->osdc = osdc; lreq 2708 net/ceph/osd_client.c target_init(&lreq->t); lreq 2710 net/ceph/osd_client.c dout("%s lreq %p\n", __func__, lreq); lreq 2711 net/ceph/osd_client.c return lreq; lreq 2724 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq) lreq 2727 net/ceph/osd_client.c WARN_ON(!lreq->linger_id || lreq->osd); lreq 2729 net/ceph/osd_client.c osd->o_osd, lreq, lreq->linger_id); lreq 2737 net/ceph/osd_client.c insert_linger(&osd->o_linger_requests, lreq); lreq 2738 net/ceph/osd_client.c lreq->osd = osd; lreq 2742 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq) lreq 2745 net/ceph/osd_client.c WARN_ON(lreq->osd != osd); lreq 2747 net/ceph/osd_client.c osd->o_osd, lreq, lreq->linger_id); lreq 2749 net/ceph/osd_client.c lreq->osd = NULL; lreq 2750 net/ceph/osd_client.c erase_linger(&osd->o_linger_requests, lreq); lreq 2759 net/ceph/osd_client.c static bool __linger_registered(struct ceph_osd_linger_request *lreq) lreq 2761 net/ceph/osd_client.c verify_osdc_locked(lreq->osdc); lreq 2763 net/ceph/osd_client.c return !RB_EMPTY_NODE(&lreq->osdc_node); lreq 2766 net/ceph/osd_client.c static bool linger_registered(struct ceph_osd_linger_request *lreq) lreq 2768 net/ceph/osd_client.c struct ceph_osd_client *osdc = lreq->osdc; lreq 2772 net/ceph/osd_client.c registered = __linger_registered(lreq); lreq 2778 net/ceph/osd_client.c static void linger_register(struct ceph_osd_linger_request *lreq) lreq 2780 net/ceph/osd_client.c struct ceph_osd_client *osdc = lreq->osdc; lreq 2783 net/ceph/osd_client.c WARN_ON(lreq->linger_id); lreq 2785 net/ceph/osd_client.c linger_get(lreq); lreq 2786 net/ceph/osd_client.c lreq->linger_id = ++osdc->last_linger_id; lreq 2787 net/ceph/osd_client.c insert_linger_osdc(&osdc->linger_requests, lreq); lreq 2790 net/ceph/osd_client.c static void linger_unregister(struct ceph_osd_linger_request *lreq) lreq 2792 net/ceph/osd_client.c struct ceph_osd_client *osdc = lreq->osdc; lreq 2796 net/ceph/osd_client.c erase_linger_osdc(&osdc->linger_requests, lreq); lreq 2797 net/ceph/osd_client.c linger_put(lreq); lreq 2802 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq = req->r_priv; lreq 2806 net/ceph/osd_client.c linger_put(lreq); lreq 2811 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq; lreq 2830 net/ceph/osd_client.c static struct linger_work *lwork_alloc(struct ceph_osd_linger_request *lreq, lreq 2841 net/ceph/osd_client.c lwork->lreq = linger_get(lreq); lreq 2848 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq = lwork->lreq; lreq 2850 net/ceph/osd_client.c mutex_lock(&lreq->lock); lreq 2852 net/ceph/osd_client.c mutex_unlock(&lreq->lock); lreq 2854 net/ceph/osd_client.c linger_put(lreq); lreq 2860 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq = lwork->lreq; lreq 2861 net/ceph/osd_client.c struct ceph_osd_client *osdc = lreq->osdc; lreq 2863 net/ceph/osd_client.c verify_lreq_locked(lreq); lreq 2867 net/ceph/osd_client.c list_add_tail(&lwork->pending_item, &lreq->pending_lworks); lreq 2874 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq = lwork->lreq; lreq 2876 net/ceph/osd_client.c if (!linger_registered(lreq)) { lreq 2877 net/ceph/osd_client.c dout("%s lreq %p not registered\n", __func__, lreq); lreq 2881 net/ceph/osd_client.c WARN_ON(!lreq->is_watch); lreq 2883 net/ceph/osd_client.c __func__, lreq, lwork->notify.notify_id, lwork->notify.notifier_id, lreq 2885 net/ceph/osd_client.c lreq->wcb(lreq->data, lwork->notify.notify_id, lreq->linger_id, lreq 2897 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq = lwork->lreq; lreq 2899 net/ceph/osd_client.c if (!linger_registered(lreq)) { lreq 2900 net/ceph/osd_client.c dout("%s lreq %p not registered\n", __func__, lreq); lreq 2904 net/ceph/osd_client.c dout("%s lreq %p err %d\n", __func__, lreq, lwork->error.err); lreq 2905 net/ceph/osd_client.c lreq->errcb(lreq->data, lreq->linger_id, lwork->error.err); lreq 2911 net/ceph/osd_client.c static void queue_watch_error(struct ceph_osd_linger_request *lreq) lreq 2915 net/ceph/osd_client.c lwork = lwork_alloc(lreq, do_watch_error); lreq 2921 net/ceph/osd_client.c lwork->error.err = lreq->last_error; lreq 2925 net/ceph/osd_client.c static void linger_reg_commit_complete(struct ceph_osd_linger_request *lreq, lreq 2928 net/ceph/osd_client.c if (!completion_done(&lreq->reg_commit_wait)) { lreq 2929 net/ceph/osd_client.c lreq->reg_commit_error = (result <= 0 ? result : 0); lreq 2930 net/ceph/osd_client.c complete_all(&lreq->reg_commit_wait); lreq 2936 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq = req->r_priv; lreq 2938 net/ceph/osd_client.c mutex_lock(&lreq->lock); lreq 2939 net/ceph/osd_client.c dout("%s lreq %p linger_id %llu result %d\n", __func__, lreq, lreq 2940 net/ceph/osd_client.c lreq->linger_id, req->r_result); lreq 2941 net/ceph/osd_client.c linger_reg_commit_complete(lreq, req->r_result); lreq 2942 net/ceph/osd_client.c lreq->committed = true; lreq 2944 net/ceph/osd_client.c if (!lreq->is_watch) { lreq 2954 net/ceph/osd_client.c lreq->notify_id = ceph_decode_64(&p); lreq 2955 net/ceph/osd_client.c dout("lreq %p notify_id %llu\n", lreq, lreq 2956 net/ceph/osd_client.c lreq->notify_id); lreq 2958 net/ceph/osd_client.c dout("lreq %p no notify_id\n", lreq); lreq 2962 net/ceph/osd_client.c mutex_unlock(&lreq->lock); lreq 2963 net/ceph/osd_client.c linger_put(lreq); lreq 2981 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq = req->r_priv; lreq 2983 net/ceph/osd_client.c mutex_lock(&lreq->lock); lreq 2985 net/ceph/osd_client.c lreq, lreq->linger_id, req->r_result, lreq->last_error); lreq 2987 net/ceph/osd_client.c if (!lreq->last_error) { lreq 2988 net/ceph/osd_client.c lreq->last_error = normalize_watch_error(req->r_result); lreq 2989 net/ceph/osd_client.c queue_watch_error(lreq); lreq 2993 net/ceph/osd_client.c mutex_unlock(&lreq->lock); lreq 2994 net/ceph/osd_client.c linger_put(lreq); lreq 2997 net/ceph/osd_client.c static void send_linger(struct ceph_osd_linger_request *lreq) lreq 2999 net/ceph/osd_client.c struct ceph_osd_request *req = lreq->reg_req; lreq 3003 net/ceph/osd_client.c dout("%s lreq %p linger_id %llu\n", __func__, lreq, lreq->linger_id); lreq 3009 net/ceph/osd_client.c ceph_oid_copy(&req->r_base_oid, &lreq->t.base_oid); lreq 3010 net/ceph/osd_client.c ceph_oloc_copy(&req->r_base_oloc, &lreq->t.base_oloc); lreq 3011 net/ceph/osd_client.c req->r_flags = lreq->t.flags; lreq 3012 net/ceph/osd_client.c req->r_mtime = lreq->mtime; lreq 3014 net/ceph/osd_client.c mutex_lock(&lreq->lock); lreq 3015 net/ceph/osd_client.c if (lreq->is_watch && lreq->committed) { lreq 3017 net/ceph/osd_client.c op->watch.cookie != lreq->linger_id); lreq 3019 net/ceph/osd_client.c op->watch.gen = ++lreq->register_gen; lreq 3020 net/ceph/osd_client.c dout("lreq %p reconnect register_gen %u\n", lreq, lreq 3024 net/ceph/osd_client.c if (!lreq->is_watch) lreq 3025 net/ceph/osd_client.c lreq->notify_id = 0; lreq 3028 net/ceph/osd_client.c dout("lreq %p register\n", lreq); lreq 3031 net/ceph/osd_client.c mutex_unlock(&lreq->lock); lreq 3033 net/ceph/osd_client.c req->r_priv = linger_get(lreq); lreq 3041 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq = req->r_priv; lreq 3043 net/ceph/osd_client.c mutex_lock(&lreq->lock); lreq 3045 net/ceph/osd_client.c __func__, lreq, lreq->linger_id, req->r_result, lreq->ping_sent, lreq 3046 net/ceph/osd_client.c lreq->last_error); lreq 3047 net/ceph/osd_client.c if (lreq->register_gen == req->r_ops[0].watch.gen) { lreq 3049 net/ceph/osd_client.c lreq->watch_valid_thru = lreq->ping_sent; lreq 3050 net/ceph/osd_client.c } else if (!lreq->last_error) { lreq 3051 net/ceph/osd_client.c lreq->last_error = normalize_watch_error(req->r_result); lreq 3052 net/ceph/osd_client.c queue_watch_error(lreq); lreq 3055 net/ceph/osd_client.c dout("lreq %p register_gen %u ignoring old pong %u\n", lreq, lreq 3056 net/ceph/osd_client.c lreq->register_gen, req->r_ops[0].watch.gen); lreq 3059 net/ceph/osd_client.c mutex_unlock(&lreq->lock); lreq 3060 net/ceph/osd_client.c linger_put(lreq); lreq 3063 net/ceph/osd_client.c static void send_linger_ping(struct ceph_osd_linger_request *lreq) lreq 3065 net/ceph/osd_client.c struct ceph_osd_client *osdc = lreq->osdc; lreq 3066 net/ceph/osd_client.c struct ceph_osd_request *req = lreq->ping_req; lreq 3074 net/ceph/osd_client.c lreq->ping_sent = jiffies; lreq 3076 net/ceph/osd_client.c __func__, lreq, lreq->linger_id, lreq->ping_sent, lreq 3077 net/ceph/osd_client.c lreq->register_gen); lreq 3083 net/ceph/osd_client.c target_copy(&req->r_t, &lreq->t); lreq 3086 net/ceph/osd_client.c op->watch.cookie != lreq->linger_id || lreq 3088 net/ceph/osd_client.c op->watch.gen = lreq->register_gen; lreq 3090 net/ceph/osd_client.c req->r_priv = linger_get(lreq); lreq 3096 net/ceph/osd_client.c link_request(lreq->osd, req); lreq 3100 net/ceph/osd_client.c static void linger_submit(struct ceph_osd_linger_request *lreq) lreq 3102 net/ceph/osd_client.c struct ceph_osd_client *osdc = lreq->osdc; lreq 3106 net/ceph/osd_client.c linger_register(lreq); lreq 3107 net/ceph/osd_client.c if (lreq->is_watch) { lreq 3108 net/ceph/osd_client.c lreq->reg_req->r_ops[0].watch.cookie = lreq->linger_id; lreq 3109 net/ceph/osd_client.c lreq->ping_req->r_ops[0].watch.cookie = lreq->linger_id; lreq 3111 net/ceph/osd_client.c lreq->reg_req->r_ops[0].notify.cookie = lreq->linger_id; lreq 3114 net/ceph/osd_client.c calc_target(osdc, &lreq->t, false); lreq 3115 net/ceph/osd_client.c osd = lookup_create_osd(osdc, lreq->t.osd, true); lreq 3116 net/ceph/osd_client.c link_linger(osd, lreq); lreq 3118 net/ceph/osd_client.c send_linger(lreq); lreq 3122 net/ceph/osd_client.c static void cancel_linger_map_check(struct ceph_osd_linger_request *lreq) lreq 3124 net/ceph/osd_client.c struct ceph_osd_client *osdc = lreq->osdc; lreq 3130 net/ceph/osd_client.c lreq->linger_id); lreq 3134 net/ceph/osd_client.c WARN_ON(lookup_lreq != lreq); lreq 3135 net/ceph/osd_client.c erase_linger_mc(&osdc->linger_map_checks, lreq); lreq 3136 net/ceph/osd_client.c linger_put(lreq); lreq 3142 net/ceph/osd_client.c static void __linger_cancel(struct ceph_osd_linger_request *lreq) lreq 3144 net/ceph/osd_client.c if (lreq->is_watch && lreq->ping_req->r_osd) lreq 3145 net/ceph/osd_client.c cancel_linger_request(lreq->ping_req); lreq 3146 net/ceph/osd_client.c if (lreq->reg_req->r_osd) lreq 3147 net/ceph/osd_client.c cancel_linger_request(lreq->reg_req); lreq 3148 net/ceph/osd_client.c cancel_linger_map_check(lreq); lreq 3149 net/ceph/osd_client.c unlink_linger(lreq->osd, lreq); lreq 3150 net/ceph/osd_client.c linger_unregister(lreq); lreq 3153 net/ceph/osd_client.c static void linger_cancel(struct ceph_osd_linger_request *lreq) lreq 3155 net/ceph/osd_client.c struct ceph_osd_client *osdc = lreq->osdc; lreq 3158 net/ceph/osd_client.c if (__linger_registered(lreq)) lreq 3159 net/ceph/osd_client.c __linger_cancel(lreq); lreq 3163 net/ceph/osd_client.c static void send_linger_map_check(struct ceph_osd_linger_request *lreq); lreq 3165 net/ceph/osd_client.c static void check_linger_pool_dne(struct ceph_osd_linger_request *lreq) lreq 3167 net/ceph/osd_client.c struct ceph_osd_client *osdc = lreq->osdc; lreq 3173 net/ceph/osd_client.c if (lreq->register_gen) { lreq 3174 net/ceph/osd_client.c lreq->map_dne_bound = map->epoch; lreq 3176 net/ceph/osd_client.c lreq, lreq->linger_id); lreq 3179 net/ceph/osd_client.c __func__, lreq, lreq->linger_id, lreq->map_dne_bound, lreq 3183 net/ceph/osd_client.c if (lreq->map_dne_bound) { lreq 3184 net/ceph/osd_client.c if (map->epoch >= lreq->map_dne_bound) { lreq 3187 net/ceph/osd_client.c lreq->linger_id); lreq 3188 net/ceph/osd_client.c linger_reg_commit_complete(lreq, -ENOENT); lreq 3189 net/ceph/osd_client.c __linger_cancel(lreq); lreq 3192 net/ceph/osd_client.c send_linger_map_check(lreq); lreq 3199 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq; lreq 3205 net/ceph/osd_client.c lreq = lookup_linger_mc(&osdc->linger_map_checks, linger_id); lreq 3206 net/ceph/osd_client.c if (!lreq) { lreq 3212 net/ceph/osd_client.c __func__, lreq, lreq->linger_id, lreq->map_dne_bound, lreq 3214 net/ceph/osd_client.c if (!lreq->map_dne_bound) lreq 3215 net/ceph/osd_client.c lreq->map_dne_bound = greq->u.newest; lreq 3216 net/ceph/osd_client.c erase_linger_mc(&osdc->linger_map_checks, lreq); lreq 3217 net/ceph/osd_client.c check_linger_pool_dne(lreq); lreq 3219 net/ceph/osd_client.c linger_put(lreq); lreq 3224 net/ceph/osd_client.c static void send_linger_map_check(struct ceph_osd_linger_request *lreq) lreq 3226 net/ceph/osd_client.c struct ceph_osd_client *osdc = lreq->osdc; lreq 3233 net/ceph/osd_client.c lreq->linger_id); lreq 3235 net/ceph/osd_client.c WARN_ON(lookup_lreq != lreq); lreq 3239 net/ceph/osd_client.c linger_get(lreq); lreq 3240 net/ceph/osd_client.c insert_linger_mc(&osdc->linger_map_checks, lreq); lreq 3242 net/ceph/osd_client.c linger_map_check_cb, lreq->linger_id); lreq 3246 net/ceph/osd_client.c static int linger_reg_commit_wait(struct ceph_osd_linger_request *lreq) lreq 3250 net/ceph/osd_client.c dout("%s lreq %p linger_id %llu\n", __func__, lreq, lreq->linger_id); lreq 3251 net/ceph/osd_client.c ret = wait_for_completion_interruptible(&lreq->reg_commit_wait); lreq 3252 net/ceph/osd_client.c return ret ?: lreq->reg_commit_error; lreq 3255 net/ceph/osd_client.c static int linger_notify_finish_wait(struct ceph_osd_linger_request *lreq) lreq 3259 net/ceph/osd_client.c dout("%s lreq %p linger_id %llu\n", __func__, lreq, lreq->linger_id); lreq 3260 net/ceph/osd_client.c ret = wait_for_completion_interruptible(&lreq->notify_finish_wait); lreq 3261 net/ceph/osd_client.c return ret ?: lreq->notify_finish_error; lreq 3311 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq = lreq 3315 net/ceph/osd_client.c lreq, lreq->linger_id, osd->o_osd); lreq 3318 net/ceph/osd_client.c mutex_lock(&lreq->lock); lreq 3319 net/ceph/osd_client.c if (lreq->is_watch && lreq->committed && !lreq->last_error) lreq 3320 net/ceph/osd_client.c send_linger_ping(lreq); lreq 3321 net/ceph/osd_client.c mutex_unlock(&lreq->lock); lreq 3728 net/ceph/osd_client.c recalc_linger_target(struct ceph_osd_linger_request *lreq) lreq 3730 net/ceph/osd_client.c struct ceph_osd_client *osdc = lreq->osdc; lreq 3733 net/ceph/osd_client.c ct_res = calc_target(osdc, &lreq->t, true); lreq 3737 net/ceph/osd_client.c osd = lookup_create_osd(osdc, lreq->t.osd, true); lreq 3738 net/ceph/osd_client.c if (osd != lreq->osd) { lreq 3739 net/ceph/osd_client.c unlink_linger(lreq->osd, lreq); lreq 3740 net/ceph/osd_client.c link_linger(osd, lreq); lreq 3762 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq = lreq 3768 net/ceph/osd_client.c dout("%s lreq %p linger_id %llu\n", __func__, lreq, lreq 3769 net/ceph/osd_client.c lreq->linger_id); lreq 3770 net/ceph/osd_client.c ct_res = recalc_linger_target(lreq); lreq 3775 net/ceph/osd_client.c pool_cleared_full(osdc, lreq->t.base_oloc.pool)); lreq 3781 net/ceph/osd_client.c cancel_linger_map_check(lreq); lreq 3787 net/ceph/osd_client.c if (list_empty(&lreq->scan_item)) lreq 3788 net/ceph/osd_client.c list_add_tail(&lreq->scan_item, need_resend_linger); lreq 3791 net/ceph/osd_client.c list_del_init(&lreq->scan_item); lreq 3792 net/ceph/osd_client.c check_linger_pool_dne(lreq); lreq 3902 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq, *nlreq; lreq 3940 net/ceph/osd_client.c list_for_each_entry_safe(lreq, nlreq, need_resend_linger, scan_item) { lreq 3941 net/ceph/osd_client.c if (!osd_homeless(lreq->osd)) lreq 3942 net/ceph/osd_client.c send_linger(lreq); lreq 3944 net/ceph/osd_client.c list_del_init(&lreq->scan_item); lreq 4088 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq = lreq 4091 net/ceph/osd_client.c send_linger(lreq); lreq 4382 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq; lreq 4411 net/ceph/osd_client.c lreq = lookup_linger_osdc(&osdc->linger_requests, cookie); lreq 4412 net/ceph/osd_client.c if (!lreq) { lreq 4418 net/ceph/osd_client.c mutex_lock(&lreq->lock); lreq 4420 net/ceph/osd_client.c opcode, cookie, lreq, lreq->is_watch); lreq 4422 net/ceph/osd_client.c if (!lreq->last_error) { lreq 4423 net/ceph/osd_client.c lreq->last_error = -ENOTCONN; lreq 4424 net/ceph/osd_client.c queue_watch_error(lreq); lreq 4426 net/ceph/osd_client.c } else if (!lreq->is_watch) { lreq 4428 net/ceph/osd_client.c if (lreq->notify_id && lreq->notify_id != notify_id) { lreq 4429 net/ceph/osd_client.c dout("lreq %p notify_id %llu != %llu, ignoring\n", lreq, lreq 4430 net/ceph/osd_client.c lreq->notify_id, notify_id); lreq 4431 net/ceph/osd_client.c } else if (!completion_done(&lreq->notify_finish_wait)) { lreq 4436 net/ceph/osd_client.c if (lreq->preply_pages) { lreq 4439 net/ceph/osd_client.c *lreq->preply_pages = data->pages; lreq 4440 net/ceph/osd_client.c *lreq->preply_len = data->length; lreq 4444 net/ceph/osd_client.c lreq->notify_finish_error = return_code; lreq 4445 net/ceph/osd_client.c complete_all(&lreq->notify_finish_wait); lreq 4449 net/ceph/osd_client.c lwork = lwork_alloc(lreq, do_watch_notify); lreq 4464 net/ceph/osd_client.c mutex_unlock(&lreq->lock); lreq 4577 net/ceph/osd_client.c alloc_linger_request(struct ceph_osd_linger_request *lreq) lreq 4581 net/ceph/osd_client.c req = ceph_osdc_alloc_request(lreq->osdc, NULL, 1, false, GFP_NOIO); lreq 4585 net/ceph/osd_client.c ceph_oid_copy(&req->r_base_oid, &lreq->t.base_oid); lreq 4586 net/ceph/osd_client.c ceph_oloc_copy(&req->r_base_oloc, &lreq->t.base_oloc); lreq 4591 net/ceph/osd_client.c alloc_watch_request(struct ceph_osd_linger_request *lreq, u8 watch_opcode) lreq 4595 net/ceph/osd_client.c req = alloc_linger_request(lreq); lreq 4624 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq; lreq 4627 net/ceph/osd_client.c lreq = linger_alloc(osdc); lreq 4628 net/ceph/osd_client.c if (!lreq) lreq 4631 net/ceph/osd_client.c lreq->is_watch = true; lreq 4632 net/ceph/osd_client.c lreq->wcb = wcb; lreq 4633 net/ceph/osd_client.c lreq->errcb = errcb; lreq 4634 net/ceph/osd_client.c lreq->data = data; lreq 4635 net/ceph/osd_client.c lreq->watch_valid_thru = jiffies; lreq 4637 net/ceph/osd_client.c ceph_oid_copy(&lreq->t.base_oid, oid); lreq 4638 net/ceph/osd_client.c ceph_oloc_copy(&lreq->t.base_oloc, oloc); lreq 4639 net/ceph/osd_client.c lreq->t.flags = CEPH_OSD_FLAG_WRITE; lreq 4640 net/ceph/osd_client.c ktime_get_real_ts64(&lreq->mtime); lreq 4642 net/ceph/osd_client.c lreq->reg_req = alloc_watch_request(lreq, CEPH_OSD_WATCH_OP_WATCH); lreq 4643 net/ceph/osd_client.c if (!lreq->reg_req) { lreq 4648 net/ceph/osd_client.c lreq->ping_req = alloc_watch_request(lreq, CEPH_OSD_WATCH_OP_PING); lreq 4649 net/ceph/osd_client.c if (!lreq->ping_req) { lreq 4654 net/ceph/osd_client.c linger_submit(lreq); lreq 4655 net/ceph/osd_client.c ret = linger_reg_commit_wait(lreq); lreq 4657 net/ceph/osd_client.c linger_cancel(lreq); lreq 4661 net/ceph/osd_client.c return lreq; lreq 4664 net/ceph/osd_client.c linger_put(lreq); lreq 4677 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq) lreq 4687 net/ceph/osd_client.c ceph_oid_copy(&req->r_base_oid, &lreq->t.base_oid); lreq 4688 net/ceph/osd_client.c ceph_oloc_copy(&req->r_base_oloc, &lreq->t.base_oloc); lreq 4691 net/ceph/osd_client.c osd_req_op_watch_init(req, 0, lreq->linger_id, lreq 4699 net/ceph/osd_client.c linger_cancel(lreq); lreq 4700 net/ceph/osd_client.c linger_put(lreq); lreq 4824 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq; lreq 4834 net/ceph/osd_client.c lreq = linger_alloc(osdc); lreq 4835 net/ceph/osd_client.c if (!lreq) lreq 4838 net/ceph/osd_client.c lreq->preply_pages = preply_pages; lreq 4839 net/ceph/osd_client.c lreq->preply_len = preply_len; lreq 4841 net/ceph/osd_client.c ceph_oid_copy(&lreq->t.base_oid, oid); lreq 4842 net/ceph/osd_client.c ceph_oloc_copy(&lreq->t.base_oloc, oloc); lreq 4843 net/ceph/osd_client.c lreq->t.flags = CEPH_OSD_FLAG_READ; lreq 4845 net/ceph/osd_client.c lreq->reg_req = alloc_linger_request(lreq); lreq 4846 net/ceph/osd_client.c if (!lreq->reg_req) { lreq 4855 net/ceph/osd_client.c ret = osd_req_op_notify_init(lreq->reg_req, 0, 0, 1, timeout, lreq 4866 net/ceph/osd_client.c ceph_osd_data_pages_init(osd_req_op_data(lreq->reg_req, 0, notify, lreq 4870 net/ceph/osd_client.c ret = ceph_osdc_alloc_messages(lreq->reg_req, GFP_NOIO); lreq 4874 net/ceph/osd_client.c linger_submit(lreq); lreq 4875 net/ceph/osd_client.c ret = linger_reg_commit_wait(lreq); lreq 4877 net/ceph/osd_client.c ret = linger_notify_finish_wait(lreq); lreq 4879 net/ceph/osd_client.c dout("lreq %p failed to initiate notify %d\n", lreq, ret); lreq 4881 net/ceph/osd_client.c linger_cancel(lreq); lreq 4883 net/ceph/osd_client.c linger_put(lreq); lreq 4894 net/ceph/osd_client.c struct ceph_osd_linger_request *lreq) lreq 4900 net/ceph/osd_client.c mutex_lock(&lreq->lock); lreq 4901 net/ceph/osd_client.c stamp = lreq->watch_valid_thru; lreq 4902 net/ceph/osd_client.c if (!list_empty(&lreq->pending_lworks)) { lreq 4904 net/ceph/osd_client.c list_first_entry(&lreq->pending_lworks, lreq 4913 net/ceph/osd_client.c lreq, lreq->linger_id, age, lreq->last_error); lreq 4915 net/ceph/osd_client.c ret = lreq->last_error ?: 1 + jiffies_to_msecs(age); lreq 4917 net/ceph/osd_client.c mutex_unlock(&lreq->lock);