Beispiel #1
0
void handle_iscsi_events(int fd)
{
	struct session *session;
	struct iet_event event;
	int res;

retry:
	if ((res = nl_read(fd, &event, sizeof(event))) < 0) {
		if (errno == EAGAIN)
			return;
		if (errno == EINTR)
			goto retry;
		log_error("read netlink fd (%d)", errno);
		exit(1);
	}

	log_debug(1, "conn %u session %llu target %u, state %u",
		  event.cid, event.sid, event.tid, event.state);

	switch (event.state) {
	case E_CONN_CLOSE:
		if (!(session = session_find_id(event.tid, event.sid))) {
			log_warning("session %llu not found?", event.sid);
			goto retry;
		}

		if (--session->conn_cnt <= 0)
			session_remove(session);
		break;
	default:
		log_error("%s(%d) %u\n", __FUNCTION__, __LINE__, event.state);
		exit(-1);
		break;
	}
}
Beispiel #2
0
void async_event(char *data)
{
	struct tgt_event *ev = (struct tgt_event *) data;
	struct iet_msg *msg = (struct iet_msg *) ev->data;
	struct session *session;

	eprintf("%u %u\n", msg->msg_type, msg->result);

	switch (msg->k.conn_state_change.state) {
	case E_CONN_CLOSE:
		if (!(session = session_find_id(msg->k.conn_state_change.tid,
						msg->k.conn_state_change.sid))) {
			eprintf("session %#" PRIx64 " not found?",
				msg->k.conn_state_change.sid);
		}

		if (!--session->conn_cnt)
			session_remove(session);
		break;
	default:
		eprintf("%u\n", msg->k.conn_state_change.state);
		break;
	}
}