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);