Lines Matching refs:qs

96 	struct o2quo_state *qs = &o2quo_state;
98 spin_lock(&qs->qs_lock);
100 lowest_hb = find_first_bit(qs->qs_hb_bm, O2NM_MAX_NODES);
102 lowest_reachable = test_bit(lowest_hb, qs->qs_conn_bm);
105 "lowest: %d (%sreachable)\n", qs->qs_heartbeating,
106 qs->qs_connected, lowest_hb, lowest_reachable ? "" : "un");
108 if (!test_bit(o2nm_this_node(), qs->qs_hb_bm) ||
109 qs->qs_heartbeating == 1)
112 if (qs->qs_heartbeating & 1) {
115 quorum = (qs->qs_heartbeating + 1)/2;
116 if (qs->qs_connected < quorum) {
120 qs->qs_connected, quorum,
121 qs->qs_heartbeating);
129 quorum = qs->qs_heartbeating / 2;
130 if (qs->qs_connected < quorum) {
134 qs->qs_connected, quorum,
135 qs->qs_heartbeating);
138 else if ((qs->qs_connected == quorum) &&
143 "node %u\n", quorum, qs->qs_heartbeating,
151 spin_unlock(&qs->qs_lock);
156 qs->qs_heartbeating, qs->qs_connected, lowest_hb,
158 spin_unlock(&qs->qs_lock);
164 static void o2quo_set_hold(struct o2quo_state *qs, u8 node)
166 assert_spin_locked(&qs->qs_lock);
168 if (!test_and_set_bit(node, qs->qs_hold_bm)) {
169 qs->qs_holds++;
170 mlog_bug_on_msg(qs->qs_holds == O2NM_MAX_NODES,
172 mlog(0, "node %u, %d total\n", node, qs->qs_holds);
176 static void o2quo_clear_hold(struct o2quo_state *qs, u8 node)
178 assert_spin_locked(&qs->qs_lock);
180 if (test_and_clear_bit(node, qs->qs_hold_bm)) {
181 mlog(0, "node %u, %d total\n", node, qs->qs_holds - 1);
182 if (--qs->qs_holds == 0) {
183 if (qs->qs_pending) {
184 qs->qs_pending = 0;
185 schedule_work(&qs->qs_work);
188 mlog_bug_on_msg(qs->qs_holds < 0, "node %u, holds %d\n",
189 node, qs->qs_holds);
199 struct o2quo_state *qs = &o2quo_state;
201 spin_lock(&qs->qs_lock);
203 qs->qs_heartbeating++;
204 mlog_bug_on_msg(qs->qs_heartbeating == O2NM_MAX_NODES,
206 mlog_bug_on_msg(test_bit(node, qs->qs_hb_bm), "node %u\n", node);
207 set_bit(node, qs->qs_hb_bm);
209 mlog(0, "node %u, %d total\n", node, qs->qs_heartbeating);
211 if (!test_bit(node, qs->qs_conn_bm))
212 o2quo_set_hold(qs, node);
214 o2quo_clear_hold(qs, node);
216 spin_unlock(&qs->qs_lock);
223 struct o2quo_state *qs = &o2quo_state;
225 spin_lock(&qs->qs_lock);
227 qs->qs_heartbeating--;
228 mlog_bug_on_msg(qs->qs_heartbeating < 0,
230 node, qs->qs_heartbeating);
231 mlog_bug_on_msg(!test_bit(node, qs->qs_hb_bm), "node %u\n", node);
232 clear_bit(node, qs->qs_hb_bm);
234 mlog(0, "node %u, %d total\n", node, qs->qs_heartbeating);
236 o2quo_clear_hold(qs, node);
238 spin_unlock(&qs->qs_lock);
248 struct o2quo_state *qs = &o2quo_state;
250 spin_lock(&qs->qs_lock);
254 qs->qs_pending = 1;
255 o2quo_clear_hold(qs, node);
257 spin_unlock(&qs->qs_lock);
267 struct o2quo_state *qs = &o2quo_state;
269 spin_lock(&qs->qs_lock);
271 qs->qs_connected++;
272 mlog_bug_on_msg(qs->qs_connected == O2NM_MAX_NODES,
274 mlog_bug_on_msg(test_bit(node, qs->qs_conn_bm), "node %u\n", node);
275 set_bit(node, qs->qs_conn_bm);
277 mlog(0, "node %u, %d total\n", node, qs->qs_connected);
279 if (!test_bit(node, qs->qs_hb_bm))
280 o2quo_set_hold(qs, node);
282 o2quo_clear_hold(qs, node);
284 spin_unlock(&qs->qs_lock);
293 struct o2quo_state *qs = &o2quo_state;
295 spin_lock(&qs->qs_lock);
297 if (test_bit(node, qs->qs_conn_bm)) {
298 qs->qs_connected--;
299 mlog_bug_on_msg(qs->qs_connected < 0,
301 node, qs->qs_connected);
303 clear_bit(node, qs->qs_conn_bm);
305 if (test_bit(node, qs->qs_hb_bm))
306 o2quo_set_hold(qs, node);
309 mlog(0, "node %u, %d total\n", node, qs->qs_connected);
312 spin_unlock(&qs->qs_lock);
317 struct o2quo_state *qs = &o2quo_state;
319 spin_lock_init(&qs->qs_lock);
320 INIT_WORK(&qs->qs_work, o2quo_make_decision);
325 struct o2quo_state *qs = &o2quo_state;
327 flush_work(&qs->qs_work);