Lines Matching refs:adreq

90 static TAILQ_HEAD(, adreq) adist_free_list;
93 static TAILQ_HEAD(, adreq) adist_disk_list;
96 static TAILQ_HEAD(, adreq) adist_send_list;
101 adreq_clear(struct adreq *adreq)
104 adreq->adr_error = -1;
105 adreq->adr_byteorder = ADIST_BYTEORDER_UNDEFINED;
106 adreq->adr_cmd = ADIST_CMD_UNDEFINED;
107 adreq->adr_seq = 0;
108 adreq->adr_datasize = 0;
114 struct adreq *adreq;
128 adreq = malloc(sizeof(*adreq) + ADIST_BUF_SIZE);
129 if (adreq == NULL) {
131 "Unable to allocate %zu bytes of memory for adreq object.",
132 sizeof(*adreq) + ADIST_BUF_SIZE);
134 adreq_clear(adreq);
135 TAILQ_INSERT_TAIL(&adist_free_list, adreq, adr_next);
140 adreq_decode_and_validate_header(struct adreq *adreq)
144 if (adreq->adr_byteorder != ADIST_BYTEORDER) {
145 adreq->adr_byteorder = ADIST_BYTEORDER;
146 adreq->adr_seq = bswap64(adreq->adr_seq);
147 adreq->adr_datasize = bswap32(adreq->adr_datasize);
152 if (adreq->adr_datasize > ADIST_BUF_SIZE) {
154 (uintmax_t)adreq->adr_datasize);
157 switch (adreq->adr_cmd) {
161 if (adreq->adr_datasize == 0) {
164 (uintmax_t)adreq->adr_datasize);
169 if (adreq->adr_datasize > 0) {
172 (uintmax_t)adreq->adr_datasize);
177 adreq->adr_cmd);
182 adreq_validate_data(const struct adreq *adreq)
187 switch (adreq->adr_cmd) {
194 if (adreq->adr_data[adreq->adr_datasize - 1] != '\0' ||
195 strchr(adreq->adr_data, '\0') !=
196 (const char *)adreq->adr_data + adreq->adr_datasize - 1) {
210 struct adreq *adreq;
214 QUEUE_TAKE(adreq, &adist_free_list, 0);
215 pjdlog_debug(3, "recv: (%p) Got request.", adreq);
217 if (proto_recv(adhost->adh_remote, &adreq->adr_packet,
218 sizeof(adreq->adr_packet)) == -1) {
222 adreq_decode_and_validate_header(adreq);
224 switch (adreq->adr_cmd) {
226 adreq->adr_error = 0;
227 adreq_log(LOG_DEBUG, 2, -1, adreq,
228 "recv: (%p) Got request header: ", adreq);
231 adreq);
232 QUEUE_INSERT(adreq, &adist_send_list);
237 adreq_log(LOG_DEBUG, 2, ADIST_ERROR_READ, adreq,
238 "recv: (%p) Got request header: ", adreq);
241 adreq);
242 QUEUE_INSERT(adreq, &adist_disk_list);
247 if (proto_recv(adhost->adh_remote, adreq->adr_data,
248 adreq->adr_datasize) == -1) {
252 adreq_validate_data(adreq);
253 adreq_log(LOG_DEBUG, 2, -1, adreq,
254 "recv: (%p) Got request header: ", adreq);
257 adreq);
258 QUEUE_INSERT(adreq, &adist_disk_list);
459 struct adreq *adreq;
463 QUEUE_TAKE(adreq, &adist_disk_list, 0);
464 adreq_log(LOG_DEBUG, 3, -1, adreq, "disk: (%p) Got request: ",
465 adreq);
467 switch (adreq->adr_cmd) {
469 adreq->adr_error = receiver_open(adreq->adr_data);
472 adreq->adr_error = receiver_append(adreq->adr_data,
473 adreq->adr_datasize);
476 adreq->adr_error = receiver_close(adreq->adr_data);
479 adreq->adr_error = receiver_error();
483 adreq->adr_cmd);
485 if (adreq->adr_error != 0) {
486 adreq_log(LOG_ERR, 0, adreq->adr_error, adreq,
490 adreq);
491 QUEUE_INSERT(adreq, &adist_send_list);
503 struct adreq *adreq;
508 QUEUE_TAKE(adreq, &adist_send_list, 0);
509 adreq_log(LOG_DEBUG, 3, -1, adreq, "send: (%p) Got request: ",
510 adreq);
512 adrep.adrp_seq = adreq->adr_seq;
513 adrep.adrp_error = adreq->adr_error;
519 adreq);
520 adreq_clear(adreq);
521 QUEUE_INSERT(adreq, &adist_free_list);