Lines Matching refs:msg

72 static int kdmsg_msg_receive_handling(kdmsg_msg_t *msg);
73 static int kdmsg_state_msgrx(kdmsg_msg_t *msg);
74 static int kdmsg_state_msgtx(kdmsg_msg_t *msg);
75 static void kdmsg_msg_write_locked(kdmsg_iocom_t *iocom, kdmsg_msg_t *msg);
76 static void kdmsg_state_cleanuprx(kdmsg_msg_t *msg);
77 static void kdmsg_state_cleanuptx(kdmsg_msg_t *msg);
83 static void kdmsg_drain_msg(kdmsg_msg_t *msg);
100 static int kdmsg_autorxmsg(kdmsg_msg_t *msg);
111 int (*rcvmsg)(kdmsg_msg_t *msg)) in kdmsg_iocom_init() argument
173 static int kdmsg_lnk_conn_reply(kdmsg_state_t *state, kdmsg_msg_t *msg);
174 static int kdmsg_lnk_span_reply(kdmsg_state_t *state, kdmsg_msg_t *msg);
178 void (*auto_callback)(kdmsg_msg_t *msg)) in kdmsg_iocom_autoinitiate() argument
180 kdmsg_msg_t *msg; in kdmsg_iocom_autoinitiate() local
184 msg = kdmsg_msg_alloc(&iocom->state0, in kdmsg_iocom_autoinitiate()
187 iocom->auto_lnk_conn.head = msg->any.head; in kdmsg_iocom_autoinitiate()
188 msg->any.lnk_conn = iocom->auto_lnk_conn; in kdmsg_iocom_autoinitiate()
189 iocom->conn_state = msg->state; in kdmsg_iocom_autoinitiate()
190 kdmsg_state_hold(msg->state); /* iocom->conn_state */ in kdmsg_iocom_autoinitiate()
191 kdmsg_msg_write(msg); in kdmsg_iocom_autoinitiate()
196 kdmsg_lnk_conn_reply(kdmsg_state_t *state, kdmsg_msg_t *msg) in kdmsg_lnk_conn_reply() argument
207 if ((msg->any.head.cmd & DMSGF_CREATE) && in kdmsg_lnk_conn_reply()
224 iocom->auto_callback(msg); in kdmsg_lnk_conn_reply()
227 (msg->any.head.cmd & DMSGF_DELETE)) { in kdmsg_lnk_conn_reply()
234 kdmsg_msg_reply(msg, 0); in kdmsg_lnk_conn_reply()
242 kdmsg_lnk_span_reply(kdmsg_state_t *state, kdmsg_msg_t *msg) in kdmsg_lnk_span_reply() argument
251 state->iocom->auto_callback(msg); in kdmsg_lnk_span_reply()
254 (msg->any.head.cmd & DMSGF_DELETE)) { in kdmsg_lnk_span_reply()
255 kdmsg_msg_reply(msg, 0); in kdmsg_lnk_span_reply()
267 kdmsg_msg_t *msg; in kdmsg_iocom_uninit() local
280 msg = kdmsg_msg_alloc(&iocom->state0, DMSG_LNK_PING, NULL, NULL); in kdmsg_iocom_uninit()
281 kdmsg_msg_write_locked(iocom, msg); in kdmsg_iocom_uninit()
330 kdmsg_msg_t *msg = NULL; in kdmsg_iocom_thread_rd() local
356 msg = kdmsg_msg_alloc(&iocom->state0, in kdmsg_iocom_thread_rd()
359 msg->any.head = hdr; in kdmsg_iocom_thread_rd()
360 msg->hdr_size = hbytes; in kdmsg_iocom_thread_rd()
362 error = fp_read(iocom->msg_fp, &msg->any.head + 1, in kdmsg_iocom_thread_rd()
372 msg->aux_size = hdr.aux_bytes; in kdmsg_iocom_thread_rd()
373 if (msg->aux_size > DMSG_AUX_MAX) { in kdmsg_iocom_thread_rd()
376 msg->aux_size); in kdmsg_iocom_thread_rd()
380 if (msg->aux_size) { in kdmsg_iocom_thread_rd()
381 abytes = DMSG_DOALIGN(msg->aux_size); in kdmsg_iocom_thread_rd()
382 msg->aux_data = kmalloc(abytes, iocom->mmsg, M_WAITOK); in kdmsg_iocom_thread_rd()
383 msg->flags |= KDMSG_FLAG_AUXALLOC; in kdmsg_iocom_thread_rd()
384 error = fp_read(iocom->msg_fp, msg->aux_data, in kdmsg_iocom_thread_rd()
393 error = kdmsg_msg_receive_handling(msg); in kdmsg_iocom_thread_rd()
394 msg = NULL; in kdmsg_iocom_thread_rd()
402 if (msg) in kdmsg_iocom_thread_rd()
403 kdmsg_msg_free(msg); in kdmsg_iocom_thread_rd()
431 kdmsg_msg_t *msg; in kdmsg_iocom_thread_wr() local
441 msg = NULL; in kdmsg_iocom_thread_wr()
457 while ((msg = TAILQ_FIRST(&iocom->msgq)) != NULL) { in kdmsg_iocom_thread_wr()
462 TAILQ_REMOVE(&iocom->msgq, msg, qentry); in kdmsg_iocom_thread_wr()
464 error = kdmsg_state_msgtx(msg); in kdmsg_iocom_thread_wr()
467 kdmsg_msg_free(msg); in kdmsg_iocom_thread_wr()
471 kdmsg_msg_free(msg); in kdmsg_iocom_thread_wr()
482 error = fp_write(iocom->msg_fp, &msg->any, in kdmsg_iocom_thread_wr()
483 msg->hdr_size, &res, UIO_SYSSPACE); in kdmsg_iocom_thread_wr()
484 if (error || res != msg->hdr_size) { in kdmsg_iocom_thread_wr()
488 kdmsg_state_cleanuptx(msg); in kdmsg_iocom_thread_wr()
491 if (msg->aux_size) { in kdmsg_iocom_thread_wr()
492 abytes = DMSG_DOALIGN(msg->aux_size); in kdmsg_iocom_thread_wr()
494 msg->aux_data, abytes, in kdmsg_iocom_thread_wr()
500 kdmsg_state_cleanuptx(msg); in kdmsg_iocom_thread_wr()
505 kdmsg_state_cleanuptx(msg); in kdmsg_iocom_thread_wr()
622 kdmsg_msg_t *msg; in kdmsg_drain_msgq() local
629 while ((msg = TAILQ_FIRST(&iocom->msgq)) != NULL) { in kdmsg_drain_msgq()
630 TAILQ_REMOVE(&iocom->msgq, msg, qentry); in kdmsg_drain_msgq()
631 kdmsg_drain_msg(msg); in kdmsg_drain_msgq()
640 kdmsg_drain_msg(kdmsg_msg_t *msg) in kdmsg_drain_msg() argument
642 if (kdmsg_state_msgtx(msg)) { in kdmsg_drain_msg()
643 kdmsg_msg_free(msg); in kdmsg_drain_msg()
645 if (msg->state) { in kdmsg_drain_msg()
646 kdmsg_simulate_failure(msg->state, in kdmsg_drain_msg()
649 kdmsg_state_cleanuptx(msg); in kdmsg_drain_msg()
661 kdmsg_msg_receive_handling(kdmsg_msg_t *msg) in kdmsg_msg_receive_handling() argument
663 kdmsg_iocom_t *iocom = msg->state->iocom; in kdmsg_msg_receive_handling()
672 error = kdmsg_state_msgrx(msg); in kdmsg_msg_receive_handling()
673 if (msg->state->flags & KDMSG_STATE_ABORTING) { in kdmsg_msg_receive_handling()
677 msg->state, msg->state->rxcmd, in kdmsg_msg_receive_handling()
678 msg->state->txcmd, error); in kdmsg_msg_receive_handling()
684 if (msg->state->flags & KDMSG_STATE_ABORTING) in kdmsg_msg_receive_handling()
687 msg->state, error); in kdmsg_msg_receive_handling()
688 kdmsg_msg_free(msg); in kdmsg_msg_receive_handling()
691 } else if (msg->state && msg->state->func) { in kdmsg_msg_receive_handling()
696 if (msg->state->flags & KDMSG_STATE_ABORTING) in kdmsg_msg_receive_handling()
699 msg->state, msg->state->func); in kdmsg_msg_receive_handling()
700 error = msg->state->func(msg->state, msg); in kdmsg_msg_receive_handling()
701 kdmsg_state_cleanuprx(msg); in kdmsg_msg_receive_handling()
703 if (msg->state->flags & KDMSG_STATE_ABORTING) in kdmsg_msg_receive_handling()
705 "X3 state %p\n", msg->state); in kdmsg_msg_receive_handling()
706 error = kdmsg_autorxmsg(msg); in kdmsg_msg_receive_handling()
707 kdmsg_state_cleanuprx(msg); in kdmsg_msg_receive_handling()
709 if (msg->state->flags & KDMSG_STATE_ABORTING) in kdmsg_msg_receive_handling()
711 "X4 state %p\n", msg->state); in kdmsg_msg_receive_handling()
712 error = iocom->rcvmsg(msg); in kdmsg_msg_receive_handling()
713 kdmsg_state_cleanuprx(msg); in kdmsg_msg_receive_handling()
773 kdmsg_state_msgrx(kdmsg_msg_t *msg) in kdmsg_state_msgrx() argument
775 kdmsg_iocom_t *iocom = msg->state->iocom; in kdmsg_state_msgrx()
807 if (msg->state == &iocom->state0) { in kdmsg_state_msgrx()
808 sdummy.msgid = msg->any.head.msgid; in kdmsg_state_msgrx()
810 if (msg->any.head.cmd & DMSGF_REVTRANS) { in kdmsg_state_msgrx()
831 kdmsg_state_drop(msg->state); /* iocom->state0 */ in kdmsg_state_msgrx()
832 msg->state = state; in kdmsg_state_msgrx()
834 state = msg->state; in kdmsg_state_msgrx()
840 if ((msg->any.head.cmd & (DMSGF_CREATE | DMSGF_DELETE | in kdmsg_state_msgrx()
850 switch(msg->any.head.cmd & (DMSGF_CREATE|DMSGF_DELETE|DMSGF_REPLY)) { in kdmsg_state_msgrx()
868 if (msg->any.head.circuit) { in kdmsg_state_msgrx()
869 sdummy.msgid = msg->any.head.circuit; in kdmsg_state_msgrx()
871 if (msg->any.head.cmd & DMSGF_REVCIRC) { in kdmsg_state_msgrx()
901 msg->state = state; /* inherits freerd ref */ in kdmsg_state_msgrx()
911 state->icmd = msg->any.head.cmd & DMSGF_BASECMDMASK; in kdmsg_state_msgrx()
912 state->rxcmd = msg->any.head.cmd & ~DMSGF_DELETE; in kdmsg_state_msgrx()
914 state->msgid = msg->any.head.msgid; in kdmsg_state_msgrx()
926 if (msg->any.head.cmd & DMSGF_ABORT) { in kdmsg_state_msgrx()
944 if (msg->any.head.cmd & DMSGF_ABORT) { in kdmsg_state_msgrx()
962 if (msg->any.head.cmd & DMSGF_ABORT) { in kdmsg_state_msgrx()
981 msg->any.head.cmd, in kdmsg_state_msgrx()
982 (intmax_t)msg->any.head.msgid); in kdmsg_state_msgrx()
986 state->rxcmd = msg->any.head.cmd & ~DMSGF_DELETE; in kdmsg_state_msgrx()
995 if (msg->any.head.cmd & DMSGF_ABORT) { in kdmsg_state_msgrx()
1012 if (msg->any.head.cmd & DMSGF_ABORT) { in kdmsg_state_msgrx()
1028 if (msg->any.head.cmd & DMSGF_ABORT) { in kdmsg_state_msgrx()
1050 if (msg->any.head.cmd & (DMSGF_CREATE | DMSGF_DELETE)) { in kdmsg_state_msgrx()
1052 msg->tcmd = (msg->state->icmd & DMSGF_BASECMDMASK) | in kdmsg_state_msgrx()
1053 (msg->any.head.cmd & (DMSGF_CREATE | in kdmsg_state_msgrx()
1057 msg->tcmd = 0; in kdmsg_state_msgrx()
1060 msg->tcmd = msg->any.head.cmd & DMSGF_CMDSWMASK; in kdmsg_state_msgrx()
1071 if ((state = msg->state) == NULL || error != 0) { in kdmsg_state_msgrx()
1075 } else if (msg->any.head.cmd & DMSGF_DELETE) { in kdmsg_state_msgrx()
1081 KKASSERT(msg->any.head.cmd & in kdmsg_state_msgrx()
1086 KKASSERT((msg->any.head.cmd & in kdmsg_state_msgrx()
1106 kdmsg_autorxmsg(kdmsg_msg_t *msg) in kdmsg_autorxmsg() argument
1108 kdmsg_iocom_t *iocom = msg->state->iocom; in kdmsg_autorxmsg()
1120 if (msg->state) { in kdmsg_autorxmsg()
1121 cmd = (msg->state->icmd & DMSGF_BASECMDMASK) | in kdmsg_autorxmsg()
1122 (msg->any.head.cmd & (DMSGF_CREATE | in kdmsg_autorxmsg()
1134 rep = kdmsg_msg_alloc(msg->state, DMSG_LNK_PING | DMSGF_REPLY, in kdmsg_autorxmsg()
1150 if ((msg->any.head.cmd & DMSGF_DELETE) == 0) { in kdmsg_autorxmsg()
1152 kdmsg_msg_result(msg, 0); in kdmsg_autorxmsg()
1154 iocom->auto_callback(msg); in kdmsg_autorxmsg()
1156 error = iocom->rcvmsg(msg); in kdmsg_autorxmsg()
1168 iocom->auto_callback(msg); in kdmsg_autorxmsg()
1169 kdmsg_msg_reply(msg, 0); in kdmsg_autorxmsg()
1171 error = iocom->rcvmsg(msg); in kdmsg_autorxmsg()
1184 if ((msg->any.head.cmd & DMSGF_DELETE) == 0) { in kdmsg_autorxmsg()
1186 iocom->auto_callback(msg); in kdmsg_autorxmsg()
1191 error = iocom->rcvmsg(msg); in kdmsg_autorxmsg()
1206 iocom->auto_callback(msg); in kdmsg_autorxmsg()
1207 kdmsg_msg_reply(msg, 0); in kdmsg_autorxmsg()
1209 error = iocom->rcvmsg(msg); in kdmsg_autorxmsg()
1220 error = iocom->rcvmsg(msg); in kdmsg_autorxmsg()
1236 kdmsg_state_cleanuprx(kdmsg_msg_t *msg) in kdmsg_state_cleanuprx() argument
1238 kdmsg_state_t *state = msg->state; in kdmsg_state_cleanuprx()
1247 if ((msg->any.head.cmd & DMSGF_DELETE) && in kdmsg_state_cleanuprx()
1248 TAILQ_FIRST(&msg->state->subq)) { in kdmsg_state_cleanuprx()
1252 msg->state, in kdmsg_state_cleanuprx()
1253 msg->state->rxcmd, in kdmsg_state_cleanuprx()
1254 msg->state->txcmd); in kdmsg_state_cleanuprx()
1255 kdmsg_simulate_failure(msg->state, in kdmsg_state_cleanuprx()
1272 kdmsg_msg_free(msg); in kdmsg_state_cleanuprx()
1357 kdmsg_msg_t *msg; in kdmsg_state_abort() local
1392 msg = kdmsg_msg_alloc(state, DMSG_LNK_ERROR, NULL, NULL); in kdmsg_state_abort()
1394 msg->any.head.cmd |= DMSGF_CREATE; in kdmsg_state_abort()
1395 msg->any.head.cmd |= DMSGF_DELETE | in kdmsg_state_abort()
1397 msg->any.head.cmd ^= (DMSGF_REVTRANS | DMSGF_REVCIRC); in kdmsg_state_abort()
1398 msg->any.head.error = DMSG_ERR_LOSTLINK; in kdmsg_state_abort()
1401 state, msg->any.head.cmd); in kdmsg_state_abort()
1404 kdmsg_msg_receive_handling(msg); in kdmsg_state_abort()
1406 msg = NULL; in kdmsg_state_abort()
1448 kdmsg_state_msgtx(kdmsg_msg_t *msg) in kdmsg_state_msgtx() argument
1450 kdmsg_iocom_t *iocom = msg->state->iocom; in kdmsg_state_msgtx()
1472 state = msg->state; in kdmsg_state_msgtx()
1477 if ((msg->any.head.cmd & (DMSGF_CREATE | DMSGF_DELETE | in kdmsg_state_msgtx()
1487 switch(msg->any.head.cmd & (DMSGF_CREATE | DMSGF_DELETE | in kdmsg_state_msgtx()
1502 state->icmd = msg->any.head.cmd & DMSGF_BASECMDMASK; in kdmsg_state_msgtx()
1503 state->txcmd = msg->any.head.cmd & ~DMSGF_DELETE; in kdmsg_state_msgtx()
1514 if (msg->any.head.cmd & DMSGF_ABORT) { in kdmsg_state_msgtx()
1520 msg->any.head.cmd, in kdmsg_state_msgtx()
1521 (intmax_t)msg->any.head.msgid); in kdmsg_state_msgtx()
1533 if (msg->any.head.cmd & DMSGF_ABORT) { in kdmsg_state_msgtx()
1549 if (msg->any.head.cmd & DMSGF_ABORT) { in kdmsg_state_msgtx()
1571 state->txcmd = msg->any.head.cmd & ~DMSGF_DELETE; in kdmsg_state_msgtx()
1586 if (msg->any.head.cmd & DMSGF_ABORT) { in kdmsg_state_msgtx()
1602 if (msg->any.head.cmd & DMSGF_ABORT) { in kdmsg_state_msgtx()
1620 if (msg->any.head.cmd & DMSGF_ABORT) { in kdmsg_state_msgtx()
1647 kdmsg_state_cleanuptx(kdmsg_msg_t *msg) in kdmsg_state_cleanuptx() argument
1649 kdmsg_iocom_t *iocom = msg->state->iocom; in kdmsg_state_cleanuptx()
1652 if ((state = msg->state) == NULL) { in kdmsg_state_cleanuptx()
1653 kdmsg_msg_free(msg); in kdmsg_state_cleanuptx()
1670 if (msg->any.head.cmd & DMSGF_DELETE) { in kdmsg_state_cleanuptx()
1676 KKASSERT(msg->any.head.cmd & in kdmsg_state_cleanuptx()
1681 KKASSERT((msg->any.head.cmd & in kdmsg_state_cleanuptx()
1706 kdmsg_msg_free(msg); in kdmsg_state_cleanuptx()
1709 kdmsg_msg_free(msg); in kdmsg_state_cleanuptx()
1712 kdmsg_msg_free(msg); in kdmsg_state_cleanuptx()
1772 kdmsg_msg_t *msg; in kdmsg_msg_alloc() local
1777 msg = kmalloc(offsetof(struct kdmsg_msg, any) + hbytes, in kdmsg_msg_alloc()
1779 msg->hdr_size = hbytes; in kdmsg_msg_alloc()
1831 msg->any.head.magic = DMSG_HDR_MAGIC; in kdmsg_msg_alloc()
1832 msg->any.head.cmd = cmd; in kdmsg_msg_alloc()
1833 msg->any.head.msgid = state->msgid; in kdmsg_msg_alloc()
1834 msg->any.head.circuit = pstate->msgid; in kdmsg_msg_alloc()
1835 msg->state = state; in kdmsg_msg_alloc()
1837 return (msg); in kdmsg_msg_alloc()
1841 kdmsg_msg_free(kdmsg_msg_t *msg) in kdmsg_msg_free() argument
1843 kdmsg_iocom_t *iocom = msg->state->iocom; in kdmsg_msg_free()
1846 if ((msg->flags & KDMSG_FLAG_AUXALLOC) && in kdmsg_msg_free()
1847 msg->aux_data && msg->aux_size) { in kdmsg_msg_free()
1848 kfree(msg->aux_data, iocom->mmsg); in kdmsg_msg_free()
1849 msg->aux_data = NULL; in kdmsg_msg_free()
1850 msg->flags &= ~KDMSG_FLAG_AUXALLOC; in kdmsg_msg_free()
1852 if ((state = msg->state) != NULL) { in kdmsg_msg_free()
1853 msg->state = NULL; in kdmsg_msg_free()
1856 msg->aux_data = NULL; in kdmsg_msg_free()
1857 msg->aux_size = 0; in kdmsg_msg_free()
1859 kfree(msg, iocom->mmsg); in kdmsg_msg_free()
1863 kdmsg_detach_aux_data(kdmsg_msg_t *msg, kdmsg_data_t *data) in kdmsg_detach_aux_data() argument
1865 if (msg->flags & KDMSG_FLAG_AUXALLOC) { in kdmsg_detach_aux_data()
1866 data->aux_data = msg->aux_data; in kdmsg_detach_aux_data()
1867 data->aux_size = msg->aux_size; in kdmsg_detach_aux_data()
1868 data->iocom = msg->state->iocom; in kdmsg_detach_aux_data()
1869 msg->flags &= ~KDMSG_FLAG_AUXALLOC; in kdmsg_detach_aux_data()
1873 data->iocom = msg->state->iocom; in kdmsg_detach_aux_data()
1921 kdmsg_msg_write(kdmsg_msg_t *msg) in kdmsg_msg_write() argument
1923 kdmsg_iocom_t *iocom = msg->state->iocom; in kdmsg_msg_write()
1926 kdmsg_msg_write_locked(iocom, msg); in kdmsg_msg_write()
1931 kdmsg_msg_write_locked(kdmsg_iocom_t *iocom, kdmsg_msg_t *msg) argument
1935 if (msg->state) {
1943 state = msg->state;
1944 msg->any.head.msgid = state->msgid;
1952 msg->any.head.msgid = 0;
1989 kdmsg_state_msgtx(msg);
1990 kdmsg_state_cleanuptx(msg);
2002 msg->any.head.salt = /* (random << 8) | */ (iocom->msg_seq & 255);
2005 if (msg->aux_data && msg->aux_size) {
2006 uint32_t abytes = DMSG_DOALIGN(msg->aux_size);
2008 msg->any.head.aux_bytes = msg->aux_size;
2009 msg->any.head.aux_crc = iscsi_crc32(msg->aux_data, abytes);
2011 msg->any.head.hdr_crc = 0;
2012 msg->any.head.hdr_crc = iscsi_crc32(msg->any.buf, msg->hdr_size);
2019 kdmsg_drain_msg(msg);
2021 TAILQ_INSERT_TAIL(&iocom->msgq, msg, qentry);
2036 kdmsg_msg_reply(kdmsg_msg_t *msg, uint32_t error) argument
2038 kdmsg_state_t *state = msg->state;
2065 if ((msg->any.head.cmd & DMSGF_REPLY) == 0)
2081 kdmsg_msg_result(kdmsg_msg_t *msg, uint32_t error) argument
2083 kdmsg_state_t *state = msg->state;
2110 if ((msg->any.head.cmd & DMSGF_REPLY) == 0)