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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? volume.c

?? Ubuntu公司提供免費的iSCSI Target
?? C
字號:
/* * Volume manager * (C) 2004 - 2005 FUJITA Tomonori <tomof@acm.org> * This code is licenced under the GPL. */#include "iscsi.h"#include "iscsi_dbg.h"#include "iotype.h"#include <linux/parser.h>struct iet_volume *volume_lookup(struct iscsi_target *target, u32 lun){	struct iet_volume *volume;	list_for_each_entry(volume, &target->volumes, list) {		if (volume->lun == lun)			return volume;	}	return NULL;}enum {	Opt_type,	Opt_iomode,	Opt_err,};static match_table_t tokens = {	{Opt_type, "Type=%s"},	{Opt_iomode, "IOMode=%s"},	{Opt_err, NULL},};static int set_iotype(struct iet_volume *volume, char *params){	int err = 0;	substring_t args[MAX_OPT_ARGS];	char *p, *argp = NULL, *buf = (char *) get_zeroed_page(GFP_USER);	if (!buf)		return -ENOMEM;	strncpy(buf, params, PAGE_CACHE_SIZE);	while ((p = strsep(&buf, ",")) != NULL) {		int token;		if (!*p)			continue;		token = match_token(p, tokens, args);		switch (token) {		case Opt_type:			if (!(argp = match_strdup(&args[0])))				err = -ENOMEM;			if (argp && !(volume->iotype = get_iotype(argp)))				err = -ENOENT;			kfree(argp);			break;		case Opt_iomode:			if (!(argp = match_strdup(&args[0])))				err = -ENOMEM;			if (argp && !strcmp(argp, "ro"))				SetLUReadonly(volume);			else if (argp && !strcmp(argp, "wb"))				SetLUAsync(volume);			kfree(argp);			break;		default:			break;		}	}	if (!err && !volume->iotype && !(volume->iotype = get_iotype("fileio"))) {		eprintk("%s\n", "Cannot find fileio");		err = -EINVAL;	}	free_page((unsigned long) buf);	return err;}int volume_add(struct iscsi_target *target, struct volume_info *info){	int ret;	struct iet_volume *volume;	char *args;	volume = volume_lookup(target, info->lun);	if (volume)		return -EEXIST;	if (info->lun > 0x3fff)		return -EINVAL;	volume = kzalloc(sizeof(*volume), GFP_KERNEL);	if (!volume)		return -ENOMEM;	volume->target = target;	volume->lun = info->lun;	args = kzalloc(info->args_len + 1, GFP_KERNEL);	if (!args) {		ret = -ENOMEM;		goto free_volume;	}	ret = copy_from_user(args, (void *)(unsigned long)info->args_ptr,			     info->args_len);	if (ret) {		ret = -EFAULT;		goto free_args;	}	ret = set_iotype(volume, args);	if (ret < 0)		goto free_args;	ret = volume->iotype->attach(volume, args);	if (ret < 0)		goto free_args;	INIT_LIST_HEAD(&volume->queue.wait_list);	spin_lock_init(&volume->queue.queue_lock);	spin_lock_init(&volume->reserve_lock);	volume->l_state = IDEV_RUNNING;	atomic_set(&volume->l_count, 0);	list_add_tail(&volume->list, &target->volumes);	atomic_inc(&target->nr_volumes);	kfree(args);	return 0;free_args:	kfree(args);free_volume:	put_iotype(volume->iotype);	kfree(volume);	return ret;}void iscsi_volume_destroy(struct iet_volume *volume){	assert(volume->l_state == IDEV_DEL);	assert(!atomic_read(&volume->l_count));	volume->iotype->detach(volume);	put_iotype(volume->iotype);	list_del(&volume->list);	kfree(volume);}int iscsi_volume_del(struct iscsi_target *target, struct volume_info *info){	struct iet_volume *volume;	eprintk("%x %x\n", target->tid, info->lun);	if (!(volume = volume_lookup(target, info->lun)))		return -ENOENT;	volume->l_state = IDEV_DEL;	atomic_dec(&target->nr_volumes);	if (!atomic_read(&volume->l_count))		iscsi_volume_destroy(volume);	return 0;}struct iet_volume *volume_get(struct iscsi_target *target, u32 lun){	struct iet_volume *volume;	if ((volume = volume_lookup(target, lun))) {		if (volume->l_state == IDEV_RUNNING)			atomic_inc(&volume->l_count);		else			volume = NULL;	}	return volume;}void volume_put(struct iet_volume *volume){	if (atomic_dec_and_test(&volume->l_count) && volume->l_state == IDEV_DEL)		iscsi_volume_destroy(volume);}int volume_reserve(struct iet_volume *volume, u64 sid){	if (!volume)		return -ENOENT;	spin_lock(&volume->reserve_lock);	if (volume->reserve_sid && volume->reserve_sid != sid) {		spin_unlock(&volume->reserve_lock);		return -EBUSY;	}	volume->reserve_sid = sid;	spin_unlock(&volume->reserve_lock);	return 0;}int is_volume_reserved(struct iet_volume *volume, u64 sid){	if (!volume || !volume->reserve_sid || volume->reserve_sid == sid)		return 0;	return -EBUSY;}int volume_release(struct iet_volume *volume, u64 sid, int force){	if (force || volume->reserve_sid == sid)		volume->reserve_sid = 0;	return 0;}static void iet_volume_info_show(struct seq_file *seq, struct iscsi_target *target){	struct iet_volume *volume;	list_for_each_entry(volume, &target->volumes, list) {		seq_printf(seq, "\tlun:%u state:%x iotype:%s",			   volume->lun, volume->l_state, volume->iotype->name);		if (LUReadonly(volume))			seq_printf(seq, " iomode:ro");		else if (LUAsync(volume))			seq_printf(seq, " iomode:wb");		else			seq_printf(seq, " iomode:wt");		if (volume->iotype->show)			volume->iotype->show(volume, seq);		else			seq_printf(seq, "\n");	}}static int iet_volumes_info_show(struct seq_file *seq, void *v){	return iet_info_show(seq, iet_volume_info_show);}static int iet_volume_seq_open(struct inode *inode, struct file *file){	return single_open(file, iet_volumes_info_show, NULL);}struct file_operations volume_seq_fops = {	.owner		= THIS_MODULE,	.open		= iet_volume_seq_open,	.read		= seq_read,	.llseek		= seq_lseek,	.release	= single_release,};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www.欧美色图| 亚洲人成网站精品片在线观看| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 午夜国产不卡在线观看视频| 国产一区二区三区蝌蚪| 欧美在线看片a免费观看| 精品久久久久久久一区二区蜜臀| 欧美一区日本一区韩国一区| 综合久久久久久久| 久久av资源网| 欧美日韩精品免费观看视频| 国产精品国产a| 成人午夜又粗又硬又大| 日韩免费在线观看| 日韩国产欧美三级| 欧美日韩国产另类一区| 一区二区三区中文在线观看| 99精品久久久久久| 成人免费在线播放视频| 国产69精品久久久久777| 国产日韩欧美精品综合| 国产一区二区91| 欧美精品一区在线观看| 久久成人免费日本黄色| 日韩一区二区在线观看视频| 视频一区中文字幕国产| 欧美三级电影精品| 午夜精品影院在线观看| 欧美色图免费看| 天天综合天天综合色| 欧美日本精品一区二区三区| 午夜欧美一区二区三区在线播放| 免费成人性网站| 日韩亚洲欧美一区二区三区| 久久99久国产精品黄毛片色诱| 国产电影一区二区三区| 久久精品在线观看| 成人福利在线看| 亚洲男女一区二区三区| 欧洲人成人精品| 日韩精品电影在线| 欧美成人a在线| 成人激情图片网| 亚洲黄色尤物视频| 欧美一区二区三区免费在线看| 国产精品色噜噜| 日本韩国视频一区二区| 亚洲成a人在线观看| 7777精品久久久大香线蕉| 天堂在线一区二区| 久久久久久99久久久精品网站| 亚洲成人自拍一区| 欧美成人精品福利| 成人av电影在线观看| 尤物在线观看一区| 欧美岛国在线观看| 成人av电影免费观看| 亚洲图片有声小说| 欧美精品一区二区高清在线观看| 亚洲中国最大av网站| 日韩一区二区在线观看视频| 国产成人精品影视| 亚洲精品日韩专区silk| 欧美一区二区视频在线观看2022| 亚洲综合色噜噜狠狠| 91精品国产综合久久久久久久久久| 国产精品蜜臀在线观看| 欧美精品一卡两卡| 激情伊人五月天久久综合| 亚洲视频一区在线| 精品少妇一区二区三区在线视频| 爽好多水快深点欧美视频| 欧美tickle裸体挠脚心vk| 色偷偷88欧美精品久久久| 蜜臂av日日欢夜夜爽一区| 中文字幕在线一区免费| 欧美一级艳片视频免费观看| 99在线热播精品免费| 国内精品自线一区二区三区视频| 日韩一级大片在线观看| 不卡av免费在线观看| 蜜臀va亚洲va欧美va天堂| 日韩美女久久久| 精品国产乱码久久久久久久久 | 精品一区二区三区视频在线观看| 欧美日韩一区二区三区在线| 精品午夜一区二区三区在线观看 | 91在线一区二区| 国产在线播精品第三| 亚洲第一主播视频| 一区免费观看视频| 国产日韩精品一区二区浪潮av| 国产真实精品久久二三区| 亚洲午夜激情网站| 国产精品高潮呻吟久久| 国产丝袜美腿一区二区三区| 精品国精品自拍自在线| 欧美一区二区三区在线视频| 欧美日韩黄色影视| 欧美三级中文字幕| 91美女精品福利| 99re6这里只有精品视频在线观看| 亚洲一区二区三区四区在线免费观看 | 18成人在线观看| 欧美videofree性高清杂交| 欧美精品久久久久久久多人混战 | 国产精品视频麻豆| 久久久久久久久伊人| 精品久久久久久久久久久院品网| 精品在线免费视频| 久久99在线观看| 丝袜国产日韩另类美女| 日韩成人一区二区三区在线观看| 久久久久久久久久久久久夜| wwwwxxxxx欧美| 久久久久九九视频| 国产精品毛片久久久久久久| 亚洲视频小说图片| 玉米视频成人免费看| 亚洲chinese男男1069| 免费观看在线综合色| 国产一区二区久久| 国产乱码字幕精品高清av | 自拍偷拍国产精品| 国产精品欧美一区二区三区| 中文字幕在线一区免费| 夜夜嗨av一区二区三区| 亚洲chinese男男1069| 青青草伊人久久| 国产精品亚洲第一区在线暖暖韩国| 亚洲一区二区三区四区在线| 日本中文字幕一区| 国产美女一区二区| 91丨porny丨首页| 欧美揉bbbbb揉bbbbb| 91精品国产免费| 中文字幕av在线一区二区三区| 制服丝袜亚洲色图| 日韩免费高清视频| 亚洲国产精品传媒在线观看| 一区二区三区在线视频播放| 蜜臀va亚洲va欧美va天堂| 高清beeg欧美| 欧日韩精品视频| 日韩欧美二区三区| 国产精品欧美久久久久无广告| 久久综合色8888| 亚洲精品第1页| 精品一区中文字幕| 色婷婷国产精品综合在线观看| 国产成人在线电影| 欧美裸体一区二区三区| 国产亚洲精品中文字幕| 亚洲一区二区高清| 久草这里只有精品视频| 色综合激情久久| 久久精品在这里| 天堂一区二区在线| 99视频在线精品| 久久网站热最新地址| 亚洲国产视频直播| 成人激情免费电影网址| 欧美大尺度电影在线| 亚洲一区二区av在线| 成人精品鲁一区一区二区| 在线播放/欧美激情| 亚洲男人天堂av网| 国产宾馆实践打屁股91| 91麻豆精品91久久久久久清纯| 欧美精品成人一区二区三区四区| 欧美三级午夜理伦三级中视频| 97久久精品人人做人人爽| 亚洲精品在线电影| 亚洲不卡在线观看| 91麻豆精品在线观看| 国产欧美一区二区精品忘忧草 | 在线不卡免费av| 亚洲视频每日更新| 国产丶欧美丶日本不卡视频| 精品欧美一区二区久久| 午夜成人在线视频| 在线观看网站黄不卡| 亚洲激情第一区| 91麻豆国产福利在线观看| 久久久99精品免费观看不卡| 久国产精品韩国三级视频| 日韩亚洲国产中文字幕欧美| 日韩电影在线一区| 91精品国产免费| 日本成人中文字幕| 欧美一区三区四区| 久久精品72免费观看| 欧美一区二区视频网站| 男男视频亚洲欧美| 欧美大片国产精品| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品香蕉一区二区三区| 久久美女艺术照精彩视频福利播放 | 国产精品久久久一本精品 | 亚洲美女偷拍久久|