亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? target.c

?? Ubuntu公司提供免費(fèi)的iSCSI Target
?? C
字號:
/* * Copyright (C) 2002-2003 Ardis Technolgies <roman@ardistech.com> * * Released under the terms of the GNU GPL v2.0. */#include "iscsi.h"#include "digest.h"#include "iscsi_dbg.h"#define	MAX_NR_TARGETS	(1UL << 30)static LIST_HEAD(target_list);static DECLARE_MUTEX(target_list_sem);static u32 next_target_id;static u32 nr_targets;static struct iscsi_sess_param default_session_param = {	.initial_r2t = 1,	.immediate_data = 1,	.max_connections = 1,	.max_recv_data_length = 8192,	.max_xmit_data_length = 8192,	.max_burst_length = 262144,	.first_burst_length = 65536,	.default_wait_time = 2,	.default_retain_time = 20,	.max_outstanding_r2t = 1,	.data_pdu_inorder = 1,	.data_sequence_inorder = 1,	.error_recovery_level = 0,	.header_digest = DIGEST_NONE,	.data_digest = DIGEST_NONE,	.ofmarker = 0,	.ifmarker = 0,	.ofmarkint = 2048,	.ifmarkint = 2048,};static struct iscsi_trgt_param default_target_param = {	.wthreads = DEFAULT_NR_WTHREADS,	.target_type = 0,	.queued_cmnds = DEFAULT_NR_QUEUED_CMNDS,};inline int target_lock(struct iscsi_target *target, int interruptible){	int err = 0;	if (interruptible)		err = down_interruptible(&target->target_sem);	else		down(&target->target_sem);	return err;}inline void target_unlock(struct iscsi_target *target){	up(&target->target_sem);}static struct iscsi_target *__target_lookup_by_id(u32 id){	struct iscsi_target *target;	list_for_each_entry(target, &target_list, t_list) {		if (target->tid == id)			return target;	}	return NULL;}static struct iscsi_target *__target_lookup_by_name(char *name){	struct iscsi_target *target;	list_for_each_entry(target, &target_list, t_list) {		if (!strcmp(target->name, name))			return target;	}	return NULL;}struct iscsi_target *target_lookup_by_id(u32 id){	struct iscsi_target *target;	down(&target_list_sem);	target = __target_lookup_by_id(id);	up(&target_list_sem);	return target;}static int target_thread_start(struct iscsi_target *target){	int err;	if ((err = nthread_start(target)) < 0)		return err;	if ((err = wthread_start(target)) < 0) {		nthread_stop(target);	}	return err;}static void target_thread_stop(struct iscsi_target *target){	wthread_stop(target);	nthread_stop(target);}static int iscsi_target_create(struct target_info *info, u32 tid){	int err = -EINVAL, len;	char *name = info->name;	struct iscsi_target *target;	dprintk(D_SETUP, "%u %s\n", tid, name);	if (!(len = strlen(name))) {		eprintk("The length of the target name is zero %u\n", tid);		return err;	}	if (!try_module_get(THIS_MODULE)) {		eprintk("Fail to get module %u\n", tid);		return err;	}	target = kzalloc(sizeof(*target), GFP_KERNEL);	if (!target) {		err = -ENOMEM;		goto out;	}	target->tid = info->tid = tid;	memcpy(&target->sess_param, &default_session_param, sizeof(default_session_param));	memcpy(&target->trgt_param, &default_target_param, sizeof(default_target_param));	strncpy(target->name, name, sizeof(target->name) - 1);	init_MUTEX(&target->target_sem);	INIT_LIST_HEAD(&target->session_list);	INIT_LIST_HEAD(&target->volumes);	atomic_set(&target->nr_volumes, 0);	list_add(&target->t_list, &target_list);	nthread_init(target);	wthread_init(target);	if ((err = target_thread_start(target)) < 0) {		target_thread_stop(target);		goto out;	}	return 0;out:	kfree(target);	module_put(THIS_MODULE);	return err;}int target_add(struct target_info *info){	int err = -EEXIST;	u32 tid = info->tid;	down(&target_list_sem);	if (nr_targets > MAX_NR_TARGETS) {		err = -EBUSY;		goto out;	}	if (__target_lookup_by_name(info->name))		goto out;	if (tid && __target_lookup_by_id(tid))		goto out;	if (!tid) {		do {			if (!++next_target_id)				++next_target_id;		} while (__target_lookup_by_id(next_target_id));		tid = next_target_id;	}	if (!(err = iscsi_target_create(info, tid)))		nr_targets++;out:	up(&target_list_sem);	return err;}static void target_destroy(struct iscsi_target *target){	dprintk(D_SETUP, "%u\n", target->tid);	target_thread_stop(target);	while (!list_empty(&target->volumes)) {		struct iet_volume *volume;		volume = list_entry(target->volumes.next, struct iet_volume, list);		volume->l_state = IDEV_DEL;		iscsi_volume_destroy(volume);	}	kfree(target);	module_put(THIS_MODULE);}int target_del(u32 id){	struct iscsi_target *target;	int err;	if ((err = down_interruptible(&target_list_sem)) < 0)		return err;	if (!(target = __target_lookup_by_id(id))) {		err = -ENOENT;		goto out;	}	target_lock(target, 0);	if (!list_empty(&target->session_list)) {		err = -EBUSY;		target_unlock(target);		goto out;	}	list_del(&target->t_list);	nr_targets--;	target_unlock(target);	up(&target_list_sem);	target_destroy(target);	return 0;out:	up(&target_list_sem);	return err;}int iet_info_show(struct seq_file *seq, iet_show_info_t *func){	int err;	struct iscsi_target *target;	if ((err = down_interruptible(&target_list_sem)) < 0)		return err;	list_for_each_entry(target, &target_list, t_list) {		seq_printf(seq, "tid:%u name:%s\n", target->tid, target->name);		if ((err = target_lock(target, 1)) < 0)			break;		func(seq, target);		target_unlock(target);	}	up(&target_list_sem);	return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品小仙女| 国产日韩亚洲欧美综合| www国产精品av| 亚洲最大的成人av| 成人中文字幕电影| 欧美一区二区网站| 亚洲午夜精品网| 91偷拍与自偷拍精品| 国产三级一区二区三区| 蜜臀久久久99精品久久久久久| 91丨九色丨黑人外教| 久久看人人爽人人| 激情国产一区二区| 91精品国产91久久久久久最新毛片| 亚洲视频狠狠干| youjizz国产精品| 国产三级精品三级在线专区| 久久99国产精品尤物| 911精品国产一区二区在线| 亚洲尤物视频在线| 91久久精品国产91性色tv | 亚洲综合色视频| 本田岬高潮一区二区三区| 国产午夜亚洲精品午夜鲁丝片| 久久精品国产99| 日韩色在线观看| 久久99这里只有精品| 日韩欧美国产综合一区| 蜜桃在线一区二区三区| 中文字幕视频一区| 成人av午夜电影| 国产精品夫妻自拍| 亚洲精品高清在线| 99视频一区二区三区| 国产精品美女久久福利网站| 成人av免费在线播放| 国产精品欧美一区喷水| 国产精品77777| 国产乱码精品一区二区三区忘忧草 | 久久久久久久综合色一本| 一本久久a久久精品亚洲| 精品一区二区在线免费观看| 一区二区三区四区视频精品免费| 精品欧美一区二区久久| 欧美色倩网站大全免费| 成人免费视频视频| 韩国精品主播一区二区在线观看| 亚洲成人免费影院| 中文字幕一区二区三区不卡在线 | 国产乱色国产精品免费视频| 亚洲成a人v欧美综合天堂下载| 国产精品免费视频一区| 精品毛片乱码1区2区3区| 欧美日韩久久久久久| 成人动漫在线一区| 国产成人综合精品三级| 美女精品自拍一二三四| 亚洲成人免费影院| 亚洲尤物视频在线| 亚洲激情五月婷婷| 中文字幕一区二区三区色视频| 久久综合九色综合欧美98| 91精品国产手机| 717成人午夜免费福利电影| 欧美日韩精品免费| 欧美艳星brazzers| 在线精品视频一区二区三四| 97久久精品人人做人人爽50路| 国产成人免费视频网站| 国产福利不卡视频| 精品一区二区三区日韩| 乱一区二区av| 精品一区二区成人精品| 狠狠色丁香婷婷综合久久片| 看片的网站亚洲| 精品一区二区三区在线播放视频| 美女国产一区二区| 久久99国产精品久久| 国产最新精品免费| 国产传媒欧美日韩成人| 成人一级片在线观看| 不卡的av网站| 一本色道a无线码一区v| 欧美在线啊v一区| 欧美片网站yy| 日韩欧美综合一区| 久久亚洲欧美国产精品乐播| 国产午夜三级一区二区三| 国产精品二三区| 亚洲福利电影网| 九九九精品视频| 国产ts人妖一区二区| 色综合天天在线| 欧美精品久久99久久在免费线| 7777精品伊人久久久大香线蕉| 日韩欧美国产麻豆| 国产校园另类小说区| 亚洲视频狠狠干| 日韩vs国产vs欧美| 国产成人免费xxxxxxxx| 色婷婷综合久久久久中文一区二区 | 91国产丝袜在线播放| 欧美日本在线观看| xnxx国产精品| 亚洲视频免费观看| 日本系列欧美系列| 高潮精品一区videoshd| 一道本成人在线| 日韩一级免费观看| 国产精品国产三级国产普通话三级| 一区二区三区日韩精品| 蜜桃传媒麻豆第一区在线观看| 国产69精品一区二区亚洲孕妇| 欧美午夜寂寞影院| 久久久噜噜噜久噜久久综合| 一区二区三区中文免费| 精品一区二区三区日韩| 色综合天天综合网天天狠天天| 欧美一级高清大全免费观看| 国产精品国产三级国产| 蜜臀av性久久久久蜜臀aⅴ | 久久久91精品国产一区二区三区| 亚洲影院免费观看| 国产精品一区一区| 9191久久久久久久久久久| 国产精品嫩草久久久久| 久久99在线观看| 欧美日韩在线播放| 国产精品国产三级国产aⅴ原创| 日本人妖一区二区| 91蝌蚪porny| 久久综合久久综合九色| 水野朝阳av一区二区三区| a在线播放不卡| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲一区中文在线| 99综合影院在线| 国产亚洲自拍一区| 麻豆91小视频| 欧美精品在线一区二区| 一区二区三区四区不卡在线| 成人在线综合网站| 日韩精品一区二区三区在线播放| 亚洲欧美一区二区三区久本道91| 国产精品99久久久久| 日韩久久精品一区| 日本成人在线不卡视频| 色婷婷精品久久二区二区蜜臀av| 欧美国产禁国产网站cc| 国产高清成人在线| 亚洲精品一区二区三区影院 | 亚洲自拍偷拍麻豆| 色偷偷一区二区三区| 综合激情成人伊人| 99精品视频在线免费观看| 久久久久国产免费免费| 国产一区二区三区黄视频 | 91亚洲国产成人精品一区二三| 国产日韩三级在线| 国产成人鲁色资源国产91色综| 欧美不卡在线视频| 韩国精品免费视频| 精品国产免费人成电影在线观看四季| 日韩va亚洲va欧美va久久| 在线成人免费观看| 免费观看久久久4p| 欧美mv日韩mv亚洲| 国产乱色国产精品免费视频| 久久―日本道色综合久久| 国产精品66部| 国产精品网站在线| 91色在线porny| 亚洲一二三区在线观看| 欧美日韩国产一级二级| 日韩影视精彩在线| 欧美电影免费观看高清完整版在| 久久激情五月婷婷| 久久久久久久精| 成人激情综合网站| 亚洲激情在线播放| 欧美日韩午夜影院| 免费观看日韩av| 中文子幕无线码一区tr| 色先锋资源久久综合| 丝袜亚洲另类丝袜在线| 日韩欧美三级在线| 成人av网在线| 亚洲国产色一区| 久久综合九色综合久久久精品综合| 福利一区在线观看| 一区二区三区色| 日韩午夜av电影| 成人18视频在线播放| 亚洲国产毛片aaaaa无费看 | 波多野洁衣一区| 五月天久久比比资源色| 久久蜜臀精品av| 色婷婷av一区| 国产最新精品免费| 亚洲精品免费在线|