Lines Matching defs:session
64 static int create_listen_socket_v2(ndmpd_session_t *session, ulong_t *addr,
66 static int tape_read(ndmpd_session_t *session, char *data);
67 static int change_tape(ndmpd_session_t *session);
68 static int discard_data(ndmpd_session_t *session, ulong_t length);
69 static int mover_tape_read_one_buf(ndmpd_session_t *session, tlm_buffer_t *buf);
70 static int mover_socket_write_one_buf(ndmpd_session_t *session,
72 static int start_mover_for_restore(ndmpd_session_t *session);
73 static int mover_socket_read_one_buf(ndmpd_session_t *session,
75 static int mover_tape_write_one_buf(ndmpd_session_t *session,
77 static int start_mover_for_backup(ndmpd_session_t *session);
78 static boolean_t is_writer_running_v3(ndmpd_session_t *session);
79 static int mover_pause_v3(ndmpd_session_t *session,
81 static int mover_tape_write_v3(ndmpd_session_t *session, char *data,
83 static int mover_tape_flush_v3(ndmpd_session_t *session);
84 static int mover_tape_read_v3(ndmpd_session_t *session, char *data);
85 static int create_listen_socket_v3(ndmpd_session_t *session, ulong_t *addr,
91 static ndmp_error mover_connect_sock(ndmpd_session_t *session,
93 static boolean_t is_writer_running(ndmpd_session_t *session);
140 ndmpd_session_t *session = ndmp_get_client_data(connection);
143 reply.state = session->ns_mover.md_state;
144 reply.pause_reason = session->ns_mover.md_pause_reason;
145 reply.halt_reason = session->ns_mover.md_halt_reason;
146 reply.record_size = session->ns_mover.md_record_size;
147 reply.record_num = session->ns_mover.md_record_num;
149 long_long_to_quad(session->ns_mover.md_data_written);
151 long_long_to_quad(session->ns_mover.md_seek_position);
153 long_long_to_quad(session->ns_mover.md_bytes_left_to_read);
155 long_long_to_quad(session->ns_mover.md_window_offset);
157 long_long_to_quad(session->ns_mover.md_window_length);
181 ndmpd_session_t *session = ndmp_get_client_data(connection);
187 if (session->ns_mover.md_state != NDMP_MOVER_STATE_IDLE ||
188 session->ns_data.dd_state != NDMP_DATA_STATE_IDLE) {
195 session->ns_mover.md_mode = request->mode;
200 if (create_listen_socket_v2(session, &addr, &port) < 0) {
211 session->ns_mover.md_state = NDMP_MOVER_STATE_LISTEN;
218 session->ns_mover.md_window_offset = 0;
219 session->ns_mover.md_window_length = MAX_WINDOW_SIZE;
220 session->ns_mover.md_position = 0;
245 ndmpd_session_t *session = ndmp_get_client_data(connection);
247 if (session->ns_mover.md_state != NDMP_MOVER_STATE_PAUSED) {
255 session->ns_mover.md_state = NDMP_MOVER_STATE_ACTIVE;
279 ndmpd_session_t *session = ndmp_get_client_data(connection);
281 if (session->ns_mover.md_state == NDMP_MOVER_STATE_IDLE ||
282 session->ns_mover.md_state == NDMP_MOVER_STATE_HALTED) {
295 ndmpd_mover_error(session, NDMP_MOVER_HALT_ABORTED);
296 ndmp_stop_buffer_worker(session);
317 ndmpd_session_t *session = ndmp_get_client_data(connection);
319 if (session->ns_mover.md_state != NDMP_MOVER_STATE_HALTED) {
328 ndmp_waitfor_op(session);
333 ndmp_lbr_cleanup(session);
334 ndmpd_mover_cleanup(session);
335 (void) ndmpd_mover_init(session);
336 (void) ndmp_lbr_init(session);
358 ndmpd_session_t *session = ndmp_get_client_data(connection);
369 if (session->ns_mover.md_state != NDMP_MOVER_STATE_IDLE &&
370 session->ns_mover.md_state != NDMP_MOVER_STATE_PAUSED &&
371 session->ns_mover.md_state != NDMP_MOVER_STATE_LISTEN) {
374 session->ns_mover.md_state);
382 session->ns_mover.md_window_offset =
384 session->ns_mover.md_window_length =
386 session->ns_mover.md_position =
387 session->ns_mover.md_window_offset;
419 ndmpd_session_t *session = ndmp_get_client_data(connection);
422 if (session->ns_mover.md_state != NDMP_MOVER_STATE_ACTIVE ||
423 session->ns_mover.md_bytes_left_to_read != 0 ||
424 session->ns_mover.md_mode != NDMP_MOVER_MODE_WRITE) {
431 if (session->ns_tape.td_fd == -1) {
442 err = ndmpd_mover_seek(session, quad_to_long_long(request->offset),
445 ndmpd_mover_error(session, NDMP_MOVER_HALT_INTERNAL_ERROR);
458 if (start_mover_for_restore(session) < 0)
459 ndmpd_mover_error(session, NDMP_MOVER_HALT_INTERNAL_ERROR);
480 ndmpd_session_t *session = ndmp_get_client_data(connection);
482 if (session->ns_mover.md_state != NDMP_MOVER_STATE_PAUSED) {
490 free(session->ns_mover.md_data_addr_v4.tcp_addr_v4);
495 ndmpd_mover_error(session, NDMP_MOVER_HALT_CONNECT_CLOSED);
516 ndmpd_session_t *session = ndmp_get_client_data(connection);
520 session->ns_mover.md_record_size = request->len;
521 session->ns_mover.md_buf = realloc(session->ns_mover.md_buf,
554 ndmpd_session_t *session = ndmp_get_client_data(connection);
559 reply.state = session->ns_mover.md_state;
560 reply.pause_reason = session->ns_mover.md_pause_reason;
561 reply.halt_reason = session->ns_mover.md_halt_reason;
562 reply.record_size = session->ns_mover.md_record_size;
563 reply.record_num = session->ns_mover.md_record_num;
565 long_long_to_quad(session->ns_mover.md_data_written);
567 long_long_to_quad(session->ns_mover.md_seek_position);
569 long_long_to_quad(session->ns_mover.md_bytes_left_to_read);
571 long_long_to_quad(session->ns_mover.md_window_offset);
573 long_long_to_quad(session->ns_mover.md_window_length);
574 if (session->ns_mover.md_state != NDMP_MOVER_STATE_IDLE)
576 &session->ns_mover.md_data_addr);
603 ndmpd_session_t *session = ndmp_get_client_data(connection);
620 } else if (session->ns_mover.md_state != NDMP_MOVER_STATE_IDLE) {
624 } else if (session->ns_data.dd_state != NDMP_DATA_STATE_IDLE) {
628 } else if (session->ns_tape.td_fd == -1) {
632 session->ns_tape.td_mode == NDMP_TAPE_READ_MODE) {
646 session->ns_mover.md_data_addr.addr_type = NDMP_ADDR_LOCAL;
650 if (create_listen_socket_v3(session, &addr, &port) < 0) {
658 session->ns_mover.md_data_addr.addr_type = NDMP_ADDR_TCP;
659 session->ns_mover.md_data_addr.tcp_ip_v3 = addr;
660 session->ns_mover.md_data_addr.tcp_port_v3 = ntohs(port);
662 session->ns_mover.md_listen_sock);
671 session->ns_mover.md_mode = request->mode;
672 session->ns_mover.md_state = NDMP_MOVER_STATE_LISTEN;
697 ndmpd_session_t *session = ndmp_get_client_data(connection);
698 ndmp_lbr_params_t *nlp = ndmp_get_nlp(session);
703 if (session->ns_mover.md_state != NDMP_MOVER_STATE_PAUSED) {
711 if (session->ns_protocol_version == NDMPV4 &&
712 !session->ns_mover.md_pre_cond) {
724 if (session->ns_mover.md_pause_reason == NDMP_MOVER_PAUSE_SEEK &&
725 session->ns_mover.md_sock != -1) {
735 ret = ndmpd_mover_seek(session,
736 session->ns_mover.md_seek_position,
737 session->ns_mover.md_bytes_left_to_read);
739 ndmpd_mover_error(session,
745 if (ndmpd_add_file_handler(session, (void*) session,
746 session->ns_mover.md_sock, NDMPD_SELECT_MODE_WRITE,
748 ndmpd_mover_error(session,
757 ndmpd_mover_error(session,
764 session->ns_mover.md_state = NDMP_MOVER_STATE_ACTIVE;
765 session->ns_mover.md_pause_reason = NDMP_MOVER_PAUSE_NA;
767 session->ns_tape.td_record_count = 0;
794 ndmpd_session_t *session = ndmp_get_client_data(connection);
796 if (session->ns_mover.md_state == NDMP_MOVER_STATE_IDLE ||
797 session->ns_mover.md_state == NDMP_MOVER_STATE_HALTED) {
810 ndmpd_mover_error(session, NDMP_MOVER_HALT_ABORTED);
832 ndmpd_session_t *session = ndmp_get_client_data(connection);
842 if (session->ns_mover.md_state != NDMP_MOVER_STATE_IDLE &&
843 session->ns_mover.md_state != NDMP_MOVER_STATE_LISTEN &&
844 session->ns_mover.md_state != NDMP_MOVER_STATE_PAUSED) {
847 session->ns_mover.md_state);
848 } else if (session->ns_mover.md_record_size == 0) {
849 if (session->ns_protocol_version == NDMPV4)
869 session->ns_mover.md_pre_cond = TRUE;
870 session->ns_mover.md_window_offset = quad_to_long_long(request->offset);
871 session->ns_mover.md_window_length = quad_to_long_long(request->length);
885 if (session->ns_mover.md_mode != NDMP_MOVER_MODE_WRITE)
887 session->ns_mover.md_position =
888 session->ns_mover.md_window_offset;
919 ndmpd_session_t *session = ndmp_get_client_data(connection);
924 if (session->ns_mover.md_state != NDMP_MOVER_STATE_ACTIVE ||
925 session->ns_mover.md_mode != NDMP_MOVER_MODE_WRITE) {
928 } else if (session->ns_mover.md_bytes_left_to_read != 0) {
931 } else if (session->ns_tape.td_fd == -1) {
948 err = ndmpd_mover_seek(session, quad_to_long_long(request->offset),
951 ndmpd_mover_error(session, NDMP_MOVER_HALT_INTERNAL_ERROR);
965 if (ndmpd_add_file_handler(session, (void*)session,
966 session->ns_mover.md_sock, NDMPD_SELECT_MODE_WRITE, HC_MOVER,
968 ndmpd_mover_error(session, NDMP_MOVER_HALT_INTERNAL_ERROR);
991 ndmpd_session_t *session = ndmp_get_client_data(connection);
996 if (session->ns_mover.md_state != NDMP_MOVER_STATE_IDLE) {
999 session->ns_mover.md_state);
1005 } else if (request->len == session->ns_mover.md_record_size)
1007 else if (!(cp = realloc(session->ns_mover.md_buf, request->len))) {
1011 session->ns_mover.md_buf = cp;
1012 session->ns_mover.md_record_size = request->len;
1013 session->ns_mover.md_window_offset = 0;
1014 session->ns_mover.md_window_length = 0;
1039 ndmpd_session_t *session = ndmp_get_client_data(connection);
1053 } else if (session->ns_mover.md_state != NDMP_MOVER_STATE_IDLE) {
1056 session->ns_mover.md_state);
1057 } else if (session->ns_tape.td_fd == -1) {
1061 session->ns_tape.td_mode == NDMP_TAPE_READ_MODE) {
1079 if (session->ns_data.dd_state != NDMP_DATA_STATE_LISTEN ||
1080 session->ns_data.dd_listen_sock != -1) {
1085 session->ns_data.dd_state = NDMP_DATA_STATE_CONNECTED;
1089 reply.error = mover_connect_sock(session, request->mode,
1100 session->ns_mover.md_data_addr.addr_type =
1102 session->ns_mover.md_state = NDMP_MOVER_STATE_ACTIVE;
1103 session->ns_mover.md_mode = request->mode;
1135 ndmpd_session_t *session = ndmp_get_client_data(connection);
1140 reply.state = session->ns_mover.md_state;
1141 reply.mode = session->ns_mover.md_mode;
1142 reply.pause_reason = session->ns_mover.md_pause_reason;
1143 reply.halt_reason = session->ns_mover.md_halt_reason;
1144 reply.record_size = session->ns_mover.md_record_size;
1145 reply.record_num = session->ns_mover.md_record_num;
1147 long_long_to_quad(session->ns_mover.md_data_written);
1149 long_long_to_quad(session->ns_mover.md_seek_position);
1151 long_long_to_quad(session->ns_mover.md_bytes_left_to_read);
1153 long_long_to_quad(session->ns_mover.md_window_offset);
1155 long_long_to_quad(session->ns_mover.md_window_length);
1156 if (session->ns_mover.md_state != NDMP_MOVER_STATE_IDLE)
1158 &session->ns_mover.md_data_addr_v4);
1187 ndmpd_session_t *session = ndmp_get_client_data(connection);
1204 } else if (session->ns_mover.md_state != NDMP_MOVER_STATE_IDLE) {
1208 } else if (session->ns_data.dd_state != NDMP_DATA_STATE_IDLE) {
1212 } else if (session->ns_tape.td_fd == -1) {
1215 } else if (session->ns_mover.md_record_size == 0) {
1219 session->ns_tape.td_mode == NDMP_TAPE_READ_MODE) {
1233 session->ns_mover.md_data_addr.addr_type = NDMP_ADDR_LOCAL;
1237 if (create_listen_socket_v3(session, &addr, &port) < 0) {
1243 session->ns_mover.md_data_addr_v4.addr_type = NDMP_ADDR_TCP;
1244 session->ns_mover.md_data_addr_v4.tcp_len_v4 = 1;
1245 session->ns_mover.md_data_addr_v4.tcp_addr_v4 =
1248 session->ns_mover.md_data_addr_v4.tcp_ip_v4(0) = addr;
1249 session->ns_mover.md_data_addr_v4.tcp_port_v4(0) = ntohs(port);
1252 &session->ns_mover.md_data_addr_v4);
1255 session->ns_mover.md_data_addr.addr_type = NDMP_ADDR_TCP;
1256 session->ns_mover.md_data_addr.tcp_ip_v3 = addr;
1257 session->ns_mover.md_data_addr.tcp_port_v3 = ntohs(port);
1259 session->ns_mover.md_listen_sock);
1268 session->ns_mover.md_mode = request->mode;
1269 session->ns_mover.md_state = NDMP_MOVER_STATE_LISTEN;
1294 ndmpd_session_t *session = ndmp_get_client_data(connection);
1307 } else if (session->ns_mover.md_state != NDMP_MOVER_STATE_IDLE) {
1310 session->ns_mover.md_state);
1311 } else if (session->ns_tape.td_fd == -1) {
1315 session->ns_tape.td_mode == NDMP_TAPE_READ_MODE) {
1318 } else if (session->ns_mover.md_record_size == 0) {
1336 if (session->ns_data.dd_state != NDMP_DATA_STATE_LISTEN ||
1337 session->ns_data.dd_listen_sock != -1) {
1342 session->ns_data.dd_state = NDMP_DATA_STATE_CONNECTED;
1346 reply.error = mover_connect_sock(session, request->mode,
1357 session->ns_mover.md_data_addr.addr_type =
1359 session->ns_mover.md_state = NDMP_MOVER_STATE_ACTIVE;
1360 session->ns_mover.md_mode = request->mode;
1383 * session (input) - session pointer.
1392 ndmpd_local_write(ndmpd_session_t *session, char *data, ulong_t length)
1403 if (session->ns_mover.md_w_index == 0)
1407 &session->ns_mover.md_buf[session->ns_mover.md_w_index],
1408 0, session->ns_mover.md_record_size -
1409 session->ns_mover.md_w_index);
1411 n = mover_tape_write_v3(session, session->ns_mover.md_buf,
1412 session->ns_mover.md_record_size);
1414 ndmpd_mover_error(session,
1419 session->ns_mover.md_position += n;
1420 session->ns_mover.md_data_written +=
1421 session->ns_mover.md_w_index;
1422 session->ns_mover.md_record_num++;
1423 session->ns_mover.md_w_index = 0;
1435 if (session->ns_mover.md_w_index == 0 &&
1436 length - count >= session->ns_mover.md_record_size) {
1437 n = mover_tape_write_v3(session, &data[count],
1438 session->ns_mover.md_record_size);
1440 ndmpd_mover_error(session,
1445 session->ns_mover.md_position += n;
1446 session->ns_mover.md_data_written += n;
1447 session->ns_mover.md_record_num++;
1453 if (len > session->ns_mover.md_record_size -
1454 session->ns_mover.md_w_index)
1455 len = session->ns_mover.md_record_size -
1456 session->ns_mover.md_w_index;
1459 &session->ns_mover.md_buf[session->ns_mover.md_w_index],
1461 session->ns_mover.md_w_index += len;
1465 if (session->ns_mover.md_w_index ==
1466 session->ns_mover.md_record_size) {
1467 n = mover_tape_write_v3(session,
1468 session->ns_mover.md_buf,
1469 session->ns_mover.md_record_size);
1471 ndmpd_mover_error(session,
1476 session->ns_mover.md_position += n;
1477 session->ns_mover.md_data_written += n;
1478 session->ns_mover.md_record_num++;
1479 session->ns_mover.md_w_index = 0;
1493 * session (input) - session pointer.
1502 ndmpd_remote_write(ndmpd_session_t *session, char *data, ulong_t length)
1508 if (session->ns_eof == TRUE ||
1509 session->ns_data.dd_abort == TRUE)
1512 if ((n = write(session->ns_data.dd_sock, &data[count],
1530 * session (input) - session pointer.
1537 * 1 - session terminated or operation aborted.
1540 ndmpd_local_read(ndmpd_session_t *session, char *data, ulong_t length)
1554 if (length > session->ns_mover.md_bytes_left_to_read) {
1556 if (session->ns_data.dd_read_length == 0) {
1557 session->ns_mover.md_bytes_left_to_read = ~0LL;
1558 session->ns_data.dd_read_offset = 0LL;
1559 session->ns_data.dd_read_length = ~0LL;
1561 session->ns_mover.md_bytes_left_to_read = length;
1562 session->ns_data.dd_read_offset =
1563 session->ns_mover.md_position;
1564 session->ns_data.dd_read_length = length;
1575 if (session->ns_mover.md_position >=
1576 session->ns_mover.md_window_offset +
1577 session->ns_mover.md_window_length) {
1579 session->ns_mover.md_state = NDMP_MOVER_STATE_PAUSED;
1580 session->ns_mover.md_pause_reason =
1584 long_long_to_quad(session->ns_mover.md_position);
1586 if (ndmp_send_request(session->ns_connection,
1591 ndmpd_mover_error(session,
1599 if (ndmp_wait_for_mover(session) != 0)
1608 session->ns_mover.md_window_offset +
1609 session->ns_mover.md_window_length -
1610 session->ns_mover.md_position)
1611 len = session->ns_mover.md_window_offset +
1612 session->ns_mover.md_window_length -
1613 session->ns_mover.md_position;
1618 if (session->ns_mover.md_w_index -
1619 session->ns_mover.md_r_index != 0) {
1623 if (len > session->ns_mover.md_w_index -
1624 session->ns_mover.md_r_index)
1625 len = session->ns_mover.md_w_index
1626 - session->ns_mover.md_r_index;
1629 &session->ns_mover.md_buf[session->
1632 session->ns_mover.md_r_index += len;
1633 session->ns_mover.md_bytes_left_to_read -= len;
1634 session->ns_mover.md_position += len;
1644 if (len >= session->ns_mover.md_record_size &&
1645 session->ns_mover.md_position >=
1646 session->ns_mover.md_seek_position) {
1647 n = tape_read(session, &data[count]);
1652 ndmpd_mover_error(session,
1658 session->ns_mover.md_bytes_left_to_read -= n;
1659 session->ns_mover.md_position += n;
1663 n = tape_read(session, session->ns_mover.md_buf);
1668 ndmpd_mover_error(session,
1673 session->ns_mover.md_w_index = n;
1674 session->ns_mover.md_r_index = 0;
1685 if (session->ns_mover.md_position <
1686 session->ns_mover.md_seek_position) {
1687 session->ns_mover.md_r_index =
1688 session->ns_mover.md_seek_position -
1689 session->ns_mover.md_position;
1690 session->ns_mover.md_position =
1691 session->ns_mover.md_seek_position;
1705 * session (input) - session pointer.
1712 * 1 - session terminated or operation aborted.
1715 ndmpd_remote_read(ndmpd_session_t *session, char *data, ulong_t length)
1735 if (session->ns_mover.md_bytes_left_to_read == 0) {
1737 if (session->ns_data.dd_read_length == 0) {
1738 session->ns_mover.md_bytes_left_to_read = ~0LL;
1739 session->ns_data.dd_read_offset = 0LL;
1740 session->ns_data.dd_read_length = ~0LL;
1742 session->ns_mover.md_bytes_left_to_read = len;
1743 session->ns_data.dd_read_offset =
1744 session->ns_mover.md_position;
1745 session->ns_data.dd_read_length = len;
1749 long_long_to_quad(session->ns_data.dd_read_offset);
1751 long_long_to_quad(session->ns_data.dd_read_length);
1753 if (ndmp_send_request_lock(session->ns_connection,
1761 if (session->ns_eof == TRUE ||
1762 session->ns_data.dd_abort == TRUE)
1770 if (session->ns_mover.md_discard_length != 0) {
1771 n = discard_data(session,
1772 (ulong_t)session->ns_mover.md_discard_length);
1775 session->ns_mover.md_discard_length -= n;
1781 if (len > session->ns_mover.md_bytes_left_to_read)
1782 len = session->ns_mover.md_bytes_left_to_read;
1786 if ((n = read(session->ns_data.dd_sock, &data[count],
1796 session->ns_mover.md_bytes_left_to_read -= n;
1797 session->ns_mover.md_position += n;
1808 * Initialize mover specific session variables.
1814 * session (input) - session pointer.
1821 ndmpd_mover_init(ndmpd_session_t *session)
1823 session->ns_mover.md_state = NDMP_MOVER_STATE_IDLE;
1824 session->ns_mover.md_pause_reason = NDMP_MOVER_PAUSE_NA;
1825 session->ns_mover.md_halt_reason = NDMP_MOVER_HALT_NA;
1826 session->ns_mover.md_data_written = 0LL;
1827 session->ns_mover.md_seek_position = 0LL;
1828 session->ns_mover.md_bytes_left_to_read = 0LL;
1829 session->ns_mover.md_window_offset = 0LL;
1830 session->ns_mover.md_window_length = MAX_WINDOW_SIZE;
1831 session->ns_mover.md_position = 0LL;
1832 session->ns_mover.md_discard_length = 0;
1833 session->ns_mover.md_record_num = 0;
1834 session->ns_mover.md_record_size = 0;
1835 session->ns_mover.md_listen_sock = -1;
1836 session->ns_mover.md_pre_cond = FALSE;
1837 session->ns_mover.md_sock = -1;
1838 session->ns_mover.md_r_index = 0;
1839 session->ns_mover.md_w_index = 0;
1840 session->ns_mover.md_buf = ndmp_malloc(MAX_RECORD_SIZE);
1841 if (!session->ns_mover.md_buf)
1844 if (ndmp_get_version(session->ns_connection) == NDMPV3) {
1845 session->ns_mover.md_mode = NDMP_MOVER_MODE_READ;
1846 (void) memset(&session->ns_mover.md_data_addr, 0,
1859 * session (input) - session pointer.
1865 ndmpd_mover_shut_down(ndmpd_session_t *session)
1869 if ((nlp = ndmp_get_nlp(session)) == NULL)
1873 if (session->ns_mover.md_listen_sock != -1) {
1875 session->ns_mover.md_listen_sock);
1876 (void) ndmpd_remove_file_handler(session,
1877 session->ns_mover.md_listen_sock);
1878 (void) close(session->ns_mover.md_listen_sock);
1879 session->ns_mover.md_listen_sock = -1;
1881 if (session->ns_mover.md_sock != -1) {
1883 session->ns_mover.md_sock);
1884 (void) ndmpd_remove_file_handler(session,
1885 session->ns_mover.md_sock);
1886 (void) close(session->ns_mover.md_sock);
1887 session->ns_mover.md_sock = -1;
1898 * session (input) - session pointer.
1904 ndmpd_mover_cleanup(ndmpd_session_t *session)
1906 NDMP_FREE(session->ns_mover.md_buf);
1915 * session (input) - session pointer
1921 ndmpd_mover_connect(ndmpd_session_t *session, ndmp_mover_mode mover_mode)
1923 ndmp_mover_addr *mover = &session->ns_data.dd_mover;
1946 session->ns_data.dd_sock =
1947 session->ns_mover.md_sock;
1967 if ((session->ns_mover.md_state !=
1969 (session->ns_mover.md_sock == -1)) {
1974 session->ns_mover.md_state,
1975 session->ns_mover.md_sock);
1979 sock = session->ns_mover.md_sock;
1981 "session: 0x%x setting data sock fd: %d to be"
1982 " same as listen_sock", session, sock);
1987 session->ns_data.dd_sock = sock;
1995 if (session->ns_mover.md_state != NDMP_MOVER_STATE_LISTEN) {
1999 if (session->ns_tape.td_fd == -1) {
2004 session->ns_tape.td_mode == NDMP_TAPE_READ_MODE) {
2008 session->ns_mover.md_state = NDMP_MOVER_STATE_ACTIVE;
2009 session->ns_mover.md_mode = mover_mode;
2030 * session (input) - session pointer.
2040 ndmpd_mover_seek(ndmpd_session_t *session, u_longlong_t offset,
2049 session->ns_mover.md_seek_position = offset;
2050 session->ns_mover.md_bytes_left_to_read = length;
2056 if (session->ns_mover.md_seek_position <
2057 session->ns_mover.md_window_offset ||
2058 session->ns_mover.md_seek_position >=
2059 session->ns_mover.md_window_offset +
2060 session->ns_mover.md_window_length) {
2062 session->ns_mover.md_seek_position);
2064 session->ns_mover.md_w_index = 0;
2065 session->ns_mover.md_r_index = 0;
2067 session->ns_mover.md_state = NDMP_MOVER_STATE_PAUSED;
2068 session->ns_mover.md_pause_reason = NDMP_MOVER_PAUSE_SEEK;
2072 if (ndmp_send_request(session->ns_connection,
2085 buf_position = session->ns_mover.md_position -
2086 (session->ns_mover.md_position % session->ns_mover.md_record_size);
2093 if (session->ns_mover.md_w_index != 0)
2094 tape_position += session->ns_mover.md_record_size;
2101 session->ns_mover.md_position = offset;
2102 session->ns_mover.md_r_index = session->ns_mover.md_position -
2106 session->ns_mover.md_position,
2107 session->ns_mover.md_r_index);
2113 if (tape_position > session->ns_mover.md_seek_position) {
2117 / session->ns_mover.md_record_size) + 1;
2119 session->ns_mover.md_record_size) + 1) *
2120 (u_longlong_t)session->ns_mover.md_record_size);
2122 } else if (offset >= tape_position + session->ns_mover.md_record_size) {
2126 / session->ns_mover.md_record_size);
2128 session->ns_mover.md_record_size)) *
2129 (u_longlong_t)session->ns_mover.md_record_size);
2135 (void) ndmp_mtioctl(session->ns_tape.td_fd, ctlcmd, ctlcnt);
2138 session->ns_mover.md_position = tape_position;
2139 session->ns_mover.md_r_index = 0;
2140 session->ns_mover.md_w_index = 0;
2142 NDMP_LOG(LOG_DEBUG, "pos %llu", session->ns_mover.md_position);
2156 * session (input) - session pointer.
2165 create_listen_socket_v2(ndmpd_session_t *session, ulong_t *addr, ushort_t *port)
2167 session->ns_mover.md_listen_sock = ndmp_create_socket(addr, port);
2168 if (session->ns_mover.md_listen_sock < 0)
2176 if (ndmpd_add_file_handler(session, (void *) session,
2177 session->ns_mover.md_listen_sock, NDMPD_SELECT_MODE_READ, HC_MOVER,
2179 (void) close(session->ns_mover.md_listen_sock);
2180 session->ns_mover.md_listen_sock = -1;
2196 * cookie (input) - session pointer.
2207 ndmpd_session_t *session = (ndmpd_session_t *)cookie;
2212 session->ns_mover.md_sock = accept(fd, (struct sockaddr *)&from,
2215 (void) ndmpd_remove_file_handler(session, fd);
2216 (void) close(session->ns_mover.md_listen_sock);
2217 session->ns_mover.md_listen_sock = -1;
2219 if (session->ns_mover.md_sock < 0) {
2221 ndmpd_mover_error(session, NDMP_MOVER_HALT_CONNECT_ERROR);
2224 set_socket_options(session->ns_mover.md_sock);
2226 NDMP_LOG(LOG_DEBUG, "sock fd: %d", session->ns_mover.md_sock);
2228 if (session->ns_mover.md_mode == NDMP_MOVER_MODE_READ) {
2229 if (start_mover_for_backup(session) < 0) {
2230 ndmpd_mover_error(session,
2245 session->ns_mover.md_state = NDMP_MOVER_STATE_ACTIVE;
2254 * session (input) - session pointer.
2263 tape_read(ndmpd_session_t *session, char *data)
2267 int count = session->ns_mover.md_record_size;
2270 n = read(session->ns_tape.td_fd, data, count);
2278 if (!is_writer_running(session))
2287 NDMP_APILOG((void*)session, NDMP_LOG_NORMAL,
2294 err = change_tape(session);
2303 if (count != session->ns_mover.md_record_size) {
2305 session->ns_tape.td_fd, MTBSR, 1);
2317 session->ns_mover.md_record_num++;
2318 session->ns_tape.td_record_count++;
2335 * client_data (input) - session pointer.
2342 change_tape(ndmpd_session_t *session)
2346 session->ns_mover.md_state = NDMP_MOVER_STATE_PAUSED;
2348 if (session->ns_mover.md_mode == NDMP_MOVER_MODE_READ)
2349 session->ns_mover.md_pause_reason = NDMP_MOVER_PAUSE_EOM;
2351 session->ns_mover.md_pause_reason = NDMP_MOVER_PAUSE_EOF;
2353 request.reason = session->ns_mover.md_pause_reason;
2357 session->ns_mover.md_pause_reason);
2359 if (ndmp_send_request(session->ns_connection,
2370 return (ndmp_wait_for_mover(session));
2382 * session (input) - session pointer.
2389 discard_data(ndmpd_session_t *session, ulong_t length)
2398 n = read(session->ns_mover.md_sock, addr, length);
2416 * session (input) - session pointer.
2424 mover_tape_read_one_buf(ndmpd_session_t *session, tlm_buffer_t *buf)
2438 if (session->ns_mover.md_position >=
2439 session->ns_mover.md_window_offset +
2440 session->ns_mover.md_window_length) {
2445 session->ns_mover.md_state = NDMP_MOVER_STATE_PAUSED;
2446 session->ns_mover.md_pause_reason = NDMP_MOVER_PAUSE_SEEK;
2449 long_long_to_quad(session->ns_mover.md_position);
2451 if (ndmp_send_request(session->ns_connection,
2456 ndmpd_mover_error(session,
2463 n = tape_read(session, buf->tb_buffer_data);
2469 ndmpd_mover_error(session,
2476 buf->tb_buffer_size = session->ns_mover.md_record_size;
2485 if (session->ns_mover.md_position < session->ns_mover.md_seek_position)
2486 session->ns_mover.md_position =
2487 session->ns_mover.md_seek_position;
2500 * session (input) - session pointer.
2507 mover_tape_reader(ndmpd_session_t *session)
2517 if ((nlp = ndmp_get_nlp(session)) == NULL) {
2550 rv = mover_tape_read_one_buf(session, buf);
2595 * session (input) - session pointer.
2603 mover_socket_write_one_buf(ndmpd_session_t *session, tlm_buffer_t *buf)
2609 n = write(session->ns_mover.md_sock, buf->tb_buffer_data,
2616 ndmpd_mover_error(session, NDMP_MOVER_HALT_CONNECT_CLOSED);
2620 session->ns_mover.md_position += n;
2621 session->ns_mover.md_bytes_left_to_read -= n;
2630 if (session->ns_mover.md_bytes_left_to_read == 0) {
2632 (void) ndmpd_remove_file_handler(session,
2633 session->ns_mover.md_sock);
2649 * session (input) - session pointer.
2656 mover_socket_writer(ndmpd_session_t *session)
2665 if ((nlp = ndmp_get_nlp(session)) == NULL) {
2690 if (mover_socket_write_one_buf(session, buf) < 0) {
2739 * session (input) - session pointer.
2746 start_mover_for_restore(ndmpd_session_t *session)
2753 if ((nlp = ndmp_get_nlp(session)) == NULL) {
2761 xfer_size = ndmp_buffer_get_size(session);
2775 rc = pthread_create(NULL, NULL, (funct_t)mover_tape_reader, session);
2784 rc = pthread_create(NULL, NULL, (funct_t)mover_socket_writer, session);
2805 * session (input) - session pointer.
2814 mover_socket_read_one_buf(ndmpd_session_t *session, tlm_buffer_t *buf,
2825 n = read(session->ns_mover.md_sock, &buf->tb_buffer_data[index],
2871 * session (input) - session pointer.
2878 mover_socket_reader(ndmpd_session_t *session)
2888 if ((nlp = ndmp_get_nlp(session)) == NULL) {
2920 (void) mover_socket_read_one_buf(session, buf,
2965 * session (input) - session pointer.
2973 mover_tape_write_one_buf(ndmpd_session_t *session, tlm_buffer_t *buf)
2982 n = mover_tape_write_v3(session, buf->tb_buffer_data,
2988 ndmpd_mover_error(session, (n == 0 ? NDMP_MOVER_HALT_ABORTED
2992 session->ns_mover.md_position += n;
2993 session->ns_mover.md_data_written += n;
2994 session->ns_mover.md_record_num++;
3011 * session (input) - session pointer.
3018 mover_tape_writer(ndmpd_session_t *session)
3028 if ((nlp = ndmp_get_nlp(session)) == NULL) {
3052 if (mover_tape_write_one_buf(session, buf) < 0) {
3084 ndmpd_mover_error(session, NDMP_MOVER_HALT_CONNECT_CLOSED);
3087 ndmpd_mover_error(session, NDMP_MOVER_HALT_INTERNAL_ERROR);
3111 * session (input) - session pointer.
3118 start_mover_for_backup(ndmpd_session_t *session)
3124 if ((nlp = ndmp_get_nlp(session)) == NULL) {
3133 session->ns_mover.md_record_size);
3146 rc = pthread_create(NULL, NULL, (funct_t)mover_socket_reader, session);
3155 rc = pthread_create(NULL, NULL, (funct_t)mover_tape_writer, session);
3175 * session (input) - session pointer.
3186 is_writer_running(ndmpd_session_t *session)
3191 if (session && (session->ns_butype > NDMP_BUTYPE_DUMP))
3194 if (session == NULL)
3196 else if ((nlp = ndmp_get_nlp(session)) == NULL)
3211 * session (input) - session pointer.
3222 is_writer_running_v3(ndmpd_session_t *session)
3227 if (session && (session->ns_butype > NDMP_BUTYPE_DUMP))
3230 if (session == NULL)
3232 else if (session->ns_mover.md_data_addr.addr_type == NDMP_ADDR_TCP)
3234 else if ((nlp = ndmp_get_nlp(session)) == NULL)
3249 * session (input) - session pointer.
3256 ndmpd_mover_error_send(ndmpd_session_t *session, ndmp_mover_halt_reason reason)
3263 return (ndmp_send_request(session->ns_connection,
3274 * session (input) - session pointer.
3281 ndmpd_mover_error_send_v4(ndmpd_session_t *session,
3288 return (ndmp_send_request(session->ns_connection,
3301 * session (input) - session pointer.
3308 ndmpd_mover_error(ndmpd_session_t *session, ndmp_mover_halt_reason reason)
3310 ndmp_lbr_params_t *nlp = ndmp_get_nlp(session);
3312 if (session->ns_mover.md_state == NDMP_MOVER_STATE_HALTED ||
3313 (session->ns_protocol_version > NDMPV2 &&
3314 session->ns_mover.md_state == NDMP_MOVER_STATE_IDLE))
3317 if (session->ns_protocol_version == NDMPV4) {
3318 if (ndmpd_mover_error_send_v4(session, reason) < 0)
3325 if (ndmpd_mover_error_send(session, reason) < 0)
3331 if (session->ns_mover.md_listen_sock != -1) {
3332 (void) ndmpd_remove_file_handler(session,
3333 session->ns_mover.md_listen_sock);
3334 (void) close(session->ns_mover.md_listen_sock);
3335 session->ns_mover.md_listen_sock = -1;
3337 if (session->ns_mover.md_sock != -1) {
3338 (void) ndmpd_remove_file_handler(session,
3339 session->ns_mover.md_sock);
3340 (void) close(session->ns_mover.md_sock);
3341 session->ns_mover.md_sock = -1;
3344 session->ns_mover.md_state = NDMP_MOVER_STATE_HALTED;
3345 session->ns_mover.md_halt_reason = reason;
3360 * client_data (input) - session pointer.
3368 mover_pause_v3(ndmpd_session_t *session, ndmp_mover_pause_reason reason)
3374 session->ns_mover.md_state = NDMP_MOVER_STATE_PAUSED;
3375 session->ns_mover.md_pause_reason = reason;
3376 session->ns_mover.md_pre_cond = FALSE;
3378 request.reason = session->ns_mover.md_pause_reason;
3380 long_long_to_quad(session->ns_mover.md_position);
3382 if (ndmp_send_request(session->ns_connection, NDMP_NOTIFY_MOVER_PAUSED,
3397 if (session->ns_mover.md_data_addr.addr_type == NDMP_ADDR_TCP) {
3403 if (ndmpd_select(session, TRUE, HC_CLIENT) < 0)
3406 if (session->ns_eof == TRUE)
3409 switch (session->ns_mover.md_state) {
3411 session->ns_tape.td_record_count = 0;
3423 if (session->ns_mover.md_data_addr.addr_type ==
3425 rv = ndmp_wait_for_mover(session);
3428 session->ns_mover.md_data_addr.addr_type);
3443 * session (input) - session pointer.
3453 mover_tape_write_v3(ndmpd_session_t *session, char *data, ssize_t length)
3462 if (session->ns_mover.md_position >=
3463 session->ns_mover.md_window_offset +
3464 session->ns_mover.md_window_length) {
3467 if (mover_pause_v3(session, NDMP_MOVER_PAUSE_EOW) < 0)
3473 n = write(session->ns_tape.td_fd, data, count);
3481 session->ns_tape.td_record_count++;
3488 (void) ioctl(session->ns_tape.td_fd, MTIOCGET,
3492 session->ns_tape.td_record_count,
3499 NDMP_APILOG((void*)session, NDMP_LOG_NORMAL,
3503 if (mover_pause_v3(session, NDMP_MOVER_PAUSE_EOM) < 0)
3520 * session (input) - session pointer.
3529 mover_tape_flush_v3(ndmpd_session_t *session)
3533 if (session->ns_mover.md_w_index == 0)
3536 (void) memset((void*)&session->ns_mover.md_buf[session->
3538 session->ns_mover.md_record_size - session->ns_mover.md_w_index);
3540 n = mover_tape_write_v3(session, session->ns_mover.md_buf,
3541 session->ns_mover.md_record_size);
3547 session->ns_mover.md_w_index = 0;
3548 session->ns_mover.md_position += n;
3560 * session (input) - session pointer.
3569 ndmpd_local_write_v3(ndmpd_session_t *session, char *data, ulong_t length)
3575 if (session->ns_mover.md_state == NDMP_MOVER_STATE_IDLE ||
3576 session->ns_mover.md_state == NDMP_MOVER_STATE_LISTEN ||
3577 session->ns_mover.md_state == NDMP_MOVER_STATE_HALTED) {
3587 if (session->ns_mover.md_w_index == 0)
3590 (void) memset((void*)&session->ns_mover.md_buf[session->
3591 ns_mover.md_w_index], 0, session->ns_mover.md_record_size -
3592 session->ns_mover.md_w_index);
3594 n = mover_tape_write_v3(session, session->ns_mover.md_buf,
3595 session->ns_mover.md_record_size);
3597 ndmpd_mover_error(session,
3603 session->ns_mover.md_position += n;
3604 session->ns_mover.md_data_written +=
3605 session->ns_mover.md_w_index;
3606 session->ns_mover.md_record_num++;
3607 session->ns_mover.md_w_index = 0;
3620 if (session->ns_mover.md_w_index == 0 &&
3621 length - count >= session->ns_mover.md_record_size) {
3622 n = mover_tape_write_v3(session, &data[count],
3623 session->ns_mover.md_record_size);
3625 ndmpd_mover_error(session,
3631 session->ns_mover.md_position += n;
3632 session->ns_mover.md_data_written += n;
3633 session->ns_mover.md_record_num++;
3640 if (len > session->ns_mover.md_record_size -
3641 session->ns_mover.md_w_index)
3642 len = session->ns_mover.md_record_size -
3643 session->ns_mover.md_w_index;
3645 (void) memcpy(&session->ns_mover.md_buf[session->
3647 session->ns_mover.md_w_index += len;
3651 if (session->ns_mover.md_w_index ==
3652 session->ns_mover.md_record_size) {
3653 n = mover_tape_write_v3(session,
3654 session->ns_mover.md_buf,
3655 session->ns_mover.md_record_size);
3657 ndmpd_mover_error(session,
3663 session->ns_mover.md_position += n;
3664 session->ns_mover.md_data_written += n;
3665 session->ns_mover.md_record_num++;
3666 session->ns_mover.md_w_index = 0;
3681 * cookie (input) - session pointer.
3692 ndmpd_session_t *session = (ndmpd_session_t *)cookie;
3696 n = read(fd, &session->ns_mover.md_buf[session->ns_mover.md_w_index],
3697 session->ns_mover.md_record_size - session->ns_mover.md_w_index);
3707 ndmpd_mover_error(session,
3717 ndmpd_mover_error(session,
3722 index = session->ns_mover.md_w_index;
3725 if (mover_tape_flush_v3(session) > 0) {
3726 session->ns_mover.md_data_written += index;
3727 session->ns_mover.md_record_num++;
3735 session->ns_mover.md_w_index += n;
3737 if (session->ns_mover.md_w_index == session->ns_mover.md_record_size) {
3738 n = mover_tape_write_v3(session, session->ns_mover.md_buf,
3739 session->ns_mover.md_record_size);
3741 ndmpd_mover_error(session,
3747 session->ns_mover.md_position += n;
3748 session->ns_mover.md_w_index = 0;
3749 session->ns_mover.md_data_written += n;
3750 session->ns_mover.md_record_num++;
3760 * session (input) - session pointer.
3770 mover_tape_read_v3(ndmpd_session_t *session, char *data)
3777 count = session->ns_mover.md_record_size;
3781 n = read(session->ns_tape.td_fd, data, count);
3787 if (errno == EIO && tape_is_at_bof(session)) {
3790 NDMP_APILOG((void*)session, NDMP_LOG_NORMAL,
3798 else if (errno == EIO && tape_is_at_bot(session)) {
3801 NDMP_APILOG((void*)session, NDMP_LOG_NORMAL,
3813 session->ns_tape.td_record_count++;
3815 if (!is_writer_running_v3(session))
3824 if (tape_is_at_bof(session)) {
3827 NDMP_APILOG((void*)session, NDMP_LOG_NORMAL,
3832 fm_dance(session);
3834 NDMP_APILOG((void*)session, NDMP_LOG_NORMAL,
3840 err = mover_pause_v3(session, pause_reason);
3849 return (session->ns_mover.md_record_size);
3862 * cookie (input) - session pointer.
3873 ndmpd_session_t *session = (ndmpd_session_t *)cookie;
3886 if (session->ns_mover.md_position >= session->ns_mover.md_window_offset
3887 + session->ns_mover.md_window_length) {
3889 "MOVER_PAUSE_SEEK(%llu)", session->ns_mover.md_position);
3891 session->ns_mover.md_w_index = 0;
3892 session->ns_mover.md_r_index = 0;
3894 session->ns_mover.md_state = NDMP_MOVER_STATE_PAUSED;
3895 session->ns_mover.md_pause_reason = NDMP_MOVER_PAUSE_SEEK;
3898 long_long_to_quad(session->ns_mover.md_position);
3899 session->ns_mover.md_seek_position =
3900 session->ns_mover.md_position;
3902 (void) ndmpd_remove_file_handler(session, fd);
3904 if (ndmp_send_request(session->ns_connection,
3909 ndmpd_mover_error(session,
3918 if (session->ns_mover.md_w_index == 0) {
3919 n = mover_tape_read_v3(session, session->ns_mover.md_buf);
3925 ndmpd_mover_error(session, (n == 0 ?
3938 if (session->ns_mover.md_position <
3939 session->ns_mover.md_seek_position) {
3940 session->ns_mover.md_r_index =
3941 session->ns_mover.md_seek_position -
3942 session->ns_mover.md_position;
3943 session->ns_mover.md_position =
3944 session->ns_mover.md_seek_position;
3947 session->ns_mover.md_w_index = n;
3948 session->ns_mover.md_record_num++;
3959 if (session->ns_mover.md_position +
3960 session->ns_mover.md_bytes_left_to_read >
3961 session->ns_mover.md_window_offset +
3962 session->ns_mover.md_window_length)
3963 wlen = session->ns_mover.md_window_offset +
3964 session->ns_mover.md_window_length -
3965 session->ns_mover.md_position;
3967 wlen = session->ns_mover.md_bytes_left_to_read;
3974 if (wlen > session->ns_mover.md_w_index - session->ns_mover.md_r_index)
3975 wlen = session->ns_mover.md_w_index -
3976 session->ns_mover.md_r_index;
3985 n = write(session->ns_mover.md_sock,
3986 &session->ns_mover.md_buf[session->ns_mover.md_r_index], len);
3995 ndmpd_mover_error(session, NDMP_MOVER_HALT_CONNECT_CLOSED);
4001 n, len, session->ns_mover.md_position,
4002 session->ns_mover.md_r_index);
4004 session->ns_mover.md_r_index += n;
4005 session->ns_mover.md_position += n;
4006 session->ns_mover.md_bytes_left_to_read -= n;
4013 if (session->ns_mover.md_r_index == session->ns_mover.md_w_index) {
4014 session->ns_mover.md_r_index = 0;
4015 session->ns_mover.md_w_index = 0;
4024 if (session->ns_mover.md_bytes_left_to_read == 0)
4025 (void) ndmpd_remove_file_handler(session, fd);
4037 * cookie (input) - session pointer.
4048 ndmpd_session_t *session = (ndmpd_session_t *)cookie;
4053 session->ns_mover.md_sock = accept(fd, (struct sockaddr *)&from,
4059 (void) ndmpd_remove_file_handler(session, fd);
4060 (void) close(session->ns_mover.md_listen_sock);
4061 session->ns_mover.md_listen_sock = -1;
4063 if (session->ns_mover.md_sock < 0) {
4065 ndmpd_mover_error(session, NDMP_MOVER_HALT_CONNECT_ERROR);
4072 session->ns_mover.md_data_addr.tcp_ip_v3 = from.sin_addr.s_addr;
4073 session->ns_mover.md_data_addr.tcp_port_v3 = ntohs(from.sin_port);
4076 set_socket_options(session->ns_mover.md_sock);
4084 if (!set_socket_nonblock(session->ns_mover.md_sock)) {
4087 ndmpd_mover_error(session, NDMP_MOVER_HALT_INTERNAL_ERROR);
4091 NDMP_LOG(LOG_DEBUG, "sock fd: %d", session->ns_mover.md_sock);
4093 if (session->ns_mover.md_mode == NDMP_MOVER_MODE_READ) {
4094 if (ndmpd_add_file_handler(session, (void*)session,
4095 session->ns_mover.md_sock, NDMPD_SELECT_MODE_READ,
4097 ndmpd_mover_error(session,
4110 session->ns_mover.md_state = NDMP_MOVER_STATE_ACTIVE;
4120 * session (input) - session pointer.
4129 create_listen_socket_v3(ndmpd_session_t *session, ulong_t *addr, ushort_t *port)
4131 session->ns_mover.md_listen_sock = ndmp_create_socket(addr, port);
4132 if (session->ns_mover.md_listen_sock < 0)
4140 if (ndmpd_add_file_handler(session, (void *) session,
4141 session->ns_mover.md_listen_sock, NDMPD_SELECT_MODE_READ, HC_MOVER,
4143 (void) close(session->ns_mover.md_listen_sock);
4144 session->ns_mover.md_listen_sock = -1;
4159 * session (input) - session pointer.
4168 mover_connect_sock(ndmpd_session_t *session, ndmp_mover_mode mode,
4191 if (ndmpd_add_file_handler(session, (void*)session, sock,
4197 session->ns_mover.md_sock = sock;
4198 session->ns_mover.md_data_addr.addr_type = NDMP_ADDR_TCP;
4199 session->ns_mover.md_data_addr.tcp_ip_v3 = ntohl(addr);
4200 session->ns_mover.md_data_addr.tcp_port_v3 = port;
4212 * session (input) - session pointer.
4222 ndmpd_local_read_v3(ndmpd_session_t *session, char *data, ulong_t length)
4229 if (session->ns_mover.md_state == NDMP_MOVER_STATE_IDLE ||
4230 session->ns_mover.md_state == NDMP_MOVER_STATE_LISTEN ||
4231 session->ns_mover.md_state == NDMP_MOVER_STATE_HALTED) {
4243 if (length > session->ns_mover.md_bytes_left_to_read) {
4245 if (session->ns_data.dd_read_length == 0) {
4246 session->ns_mover.md_bytes_left_to_read = ~0LL;
4247 session->ns_data.dd_read_offset = 0LL;
4248 session->ns_data.dd_read_length = ~0LL;
4250 session->ns_mover.md_bytes_left_to_read = length;
4251 session->ns_data.dd_read_offset =
4252 session->ns_mover.md_position;
4253 session->ns_data.dd_read_length = length;
4265 if (session->ns_mover.md_position >=
4266 session->ns_mover.md_window_offset +
4267 session->ns_mover.md_window_length) {
4268 if (mover_pause_v3(session,
4270 ndmpd_mover_error(session,
4282 if (len > session->ns_mover.md_window_offset +
4283 session->ns_mover.md_window_length -
4284 session->ns_mover.md_position)
4285 len = session->ns_mover.md_window_offset +
4286 session->ns_mover.md_window_length -
4287 session->ns_mover.md_position;
4292 if (session->ns_mover.md_w_index -
4293 session->ns_mover.md_r_index != 0) {
4297 if (len > session->ns_mover.md_w_index -
4298 session->ns_mover.md_r_index)
4299 len = session->ns_mover.md_w_index -
4300 session->ns_mover.md_r_index;
4302 &session->ns_mover.md_buf[session->
4305 session->ns_mover.md_r_index += len;
4306 session->ns_mover.md_bytes_left_to_read -= len;
4307 session->ns_mover.md_position += len;
4318 if (len >= session->ns_mover.md_record_size &&
4319 session->ns_mover.md_position >=
4320 session->ns_mover.md_seek_position) {
4321 n = mover_tape_read_v3(session, &data[count]);
4326 ndmpd_mover_error(session,
4333 session->ns_mover.md_bytes_left_to_read -= n;
4334 session->ns_mover.md_position += n;
4335 session->ns_mover.md_record_num++;
4340 n = mover_tape_read_v3(session, session->ns_mover.md_buf);
4345 ndmpd_mover_error(session,
4351 session->ns_mover.md_w_index = n;
4352 session->ns_mover.md_r_index = 0;
4353 session->ns_mover.md_record_num++;
4364 if (session->ns_mover.md_position <
4365 session->ns_mover.md_seek_position) {
4366 session->ns_mover.md_r_index =
4367 session->ns_mover.md_seek_position -
4368 session->ns_mover.md_position;
4369 session->ns_mover.md_position =
4370 session->ns_mover.md_seek_position;