iscsi_target_tq.h 2.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
#ifndef ISCSI_THREAD_QUEUE_H
#define ISCSI_THREAD_QUEUE_H

/*
 * Defines for thread sets.
 */
extern int iscsi_thread_set_force_reinstatement(struct iscsi_conn *);
extern int iscsi_allocate_thread_sets(u32);
extern void iscsi_deallocate_thread_sets(void);
extern void iscsi_activate_thread_set(struct iscsi_conn *, struct iscsi_thread_set *);
extern struct iscsi_thread_set *iscsi_get_thread_set(void);
extern void iscsi_set_thread_clear(struct iscsi_conn *, u8);
extern void iscsi_set_thread_set_signal(struct iscsi_conn *, u8);
extern int iscsi_release_thread_set(struct iscsi_conn *);
extern struct iscsi_conn *iscsi_rx_thread_pre_handler(struct iscsi_thread_set *);
extern struct iscsi_conn *iscsi_tx_thread_pre_handler(struct iscsi_thread_set *);
extern int iscsi_thread_set_init(void);
extern void iscsi_thread_set_free(void);

extern int iscsi_target_tx_thread(void *);
extern int iscsi_target_rx_thread(void *);

#define TARGET_THREAD_SET_COUNT			4

#define ISCSI_RX_THREAD                         1
#define ISCSI_TX_THREAD                         2
#define ISCSI_RX_THREAD_NAME			"iscsi_trx"
#define ISCSI_TX_THREAD_NAME			"iscsi_ttx"
#define ISCSI_BLOCK_RX_THREAD			0x1
#define ISCSI_BLOCK_TX_THREAD			0x2
#define ISCSI_CLEAR_RX_THREAD			0x1
#define ISCSI_CLEAR_TX_THREAD			0x2
#define ISCSI_SIGNAL_RX_THREAD			0x1
#define ISCSI_SIGNAL_TX_THREAD			0x2

/* struct iscsi_thread_set->status */
#define ISCSI_THREAD_SET_FREE			1
#define ISCSI_THREAD_SET_ACTIVE			2
#define ISCSI_THREAD_SET_DIE			3
#define ISCSI_THREAD_SET_RESET			4
#define ISCSI_THREAD_SET_DEALLOCATE_THREADS	5

/* By default allow a maximum of 32K iSCSI connections */
#define ISCSI_TS_BITMAP_BITS			32768

struct iscsi_thread_set {
	/* flags used for blocking and restarting sets */
	int	blocked_threads;
	/* flag for creating threads */
	int	create_threads;
	/* flag for delaying readding to inactive list */
	int	delay_inactive;
	/* status for thread set */
	int	status;
	/* which threads have had signals sent */
	int	signal_sent;
	/* flag for which threads exited first */
	int	thread_clear;
	/* Active threads in the thread set */
	int	thread_count;
	/* Unique thread ID */
	u32	thread_id;
	/* pointer to connection if set is active */
	struct iscsi_conn	*conn;
	/* used for controlling ts state accesses */
	spinlock_t	ts_state_lock;
	/* Used for rx side post startup */
	struct completion	rx_post_start_comp;
	/* Used for tx side post startup */
	struct completion	tx_post_start_comp;
	/* used for restarting thread queue */
	struct completion	rx_restart_comp;
	/* used for restarting thread queue */
	struct completion	tx_restart_comp;
	/* used for normal unused blocking */
	struct completion	rx_start_comp;
	/* used for normal unused blocking */
	struct completion	tx_start_comp;
	/* OS descriptor for rx thread */
	struct task_struct	*rx_thread;
	/* OS descriptor for tx thread */
	struct task_struct	*tx_thread;
	/* struct iscsi_thread_set in list list head*/
	struct list_head	ts_list;
};

#endif   /*** ISCSI_THREAD_QUEUE_H ***/