⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 block.c

📁 一个Windows下的Linux专用虚拟机
💻 C
字号:
/* * This source code is a part of coLinux source package. * * Dan Aloni <da-x@colinux.org>, 2003-2004 (c) * * The code is licensed under the GPL. See the COPYING file at * the root directory. */#include <colinux/common/libc.h>#include "block.h"#include "monitor.h"void co_monitor_block_register_device(co_monitor_t *cmon, unsigned int index, co_block_dev_t *dev){	cmon->block_devs[index] = dev;}void co_monitor_block_unregister_device(co_monitor_t *cmon, unsigned int index){	cmon->block_devs[index] = NULL;}void co_monitor_unregister_and_free_block_devices(co_monitor_t *cmon){	long i;	for (i=0; i < CO_MODULE_MAX_COBD; i++) {		co_block_dev_t *dev = cmon->block_devs[i];		if (!dev)			continue;		co_monitor_block_unregister_device(cmon, i);		dev->free(cmon, dev);	}}co_block_dev_t *co_monitor_block_dev_from_index(co_monitor_t *cmon, unsigned int index){	if (index >= CO_MODULE_MAX_COBD)		return NULL;	return cmon->block_devs[index];}co_rc_t co_monitor_block_request(co_monitor_t *cmon, unsigned int index,				 co_block_request_t *request){	co_block_dev_t *dev;	co_rc_t rc;	rc = CO_RC(ERROR);	dev = co_monitor_block_dev_from_index(cmon, index);	if (!dev)		return rc;	rc = CO_RC_OK;	switch (request->type) { 	case CO_BLOCK_OPEN: {		co_debug("cobd%d: open (count=%d)", index, dev->use_count);		if (dev->use_count >= 1) { 			dev->use_count++;			return rc;		}		break;	}	case CO_BLOCK_CLOSE: {		if (dev->use_count == 0) {			co_debug_error("cobd%d: close with no open", index);			rc = CO_RC_ERROR;			return rc;		} else if (dev->use_count > 1) {			dev->use_count--;			co_debug("cobd%d: close (count=%d)", index, dev->use_count);			return rc;		}		co_debug("cobd%d: close (count=%d)", index, dev->use_count);		break;	}	case CO_BLOCK_GET_ALIAS: {		co_debug("cobd%d: %p, %p", index, dev, dev->conf);		if (!dev->conf || !dev->conf->enabled || !dev->conf->alias_used)			return CO_RC(ERROR);		dev->conf->alias[sizeof(dev->conf->alias)-1] = '\0';		co_snprintf(request->alias, sizeof(request->alias), "%s", dev->conf->alias);		return rc;	}	default:		break;	}	rc = (dev->service)(cmon, dev, request);	switch (request->type) { 	case CO_BLOCK_OPEN: {		if (CO_OK(rc)) {			co_debug("cobd%d: open success (count=%d)", index, dev->use_count);			dev->use_count++;		} else {			co_debug_error("cobd%d: open failed (count=%d, rc=%08x)", index, dev->use_count, (int)rc);		}		break;	}	case CO_BLOCK_CLOSE: {		if (CO_OK(rc)) {			dev->use_count--;			co_debug("cobd%d: close success (count=%d)", index, dev->use_count);		} else {			co_debug_error("cobd%d: close failed (count=%d, rc=%08x)", index, dev->use_count, (int)rc);		}		break;	default:		break;	}	}	return rc;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -