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

📄 oid40.c

📁 reiser4progs ReiserFS V4 ReiserFs官方已经关闭 这个是1.0.6 2006-02-22发布的 给需要的朋友
💻 C
字号:
/* Copyright (C) 2001-2005 by Hans Reiser, licensing governed by   reiser4progs/COPYING.      oid40_repair.c -- reiser4 oid allocator plugin. */#ifndef ENABLE_MINIMAL#include "oid40.h"#include "oid40_repair.h"static uint32_t oid40_get_state(reiser4_oid_ent_t *entity) {	aal_assert("umka-2088", entity != NULL);	return PLUG_ENT(entity)->state;}/* Returnes next oid to be used */static uint64_t oid40_get_next_oid(reiser4_oid_ent_t *entity) {	aal_assert("umka-1109", entity != NULL);	return PLUG_ENT(entity)->next;}/* Returns number of used oids */static uint64_t oid40_get_used_oid(reiser4_oid_ent_t *entity) {	aal_assert("umka-530", entity != NULL);	return PLUG_ENT(entity)->used;}static void oid40_set_state(reiser4_oid_ent_t *entity,			    uint32_t state){	aal_assert("umka-2089", entity != NULL);	PLUG_ENT(entity)->state = state;}/* Updates next oid to be used */static void oid40_set_next_oid(reiser4_oid_ent_t *entity, uint64_t next) {	aal_assert("vpf-1588", entity != NULL);	PLUG_ENT(entity)->next = next;	PLUG_ENT(entity)->state = (1 << ENTITY_DIRTY);}/* Updates number of used oids */static void oid40_set_used_oid(reiser4_oid_ent_t *entity, uint64_t used) {	aal_assert("umka-530", entity != NULL);	PLUG_ENT(entity)->used = used;	PLUG_ENT(entity)->state = (1 << ENTITY_DIRTY);}/* Open oid allocator on passed format instance. */static reiser4_oid_ent_t *oid40_open(reiser4_format_ent_t *format) {	oid40_t *oid;	aal_assert("umka-2664", format != NULL);		if (!(oid = aal_calloc(sizeof(*oid), 0)))		return NULL;	oid->state = 0;	oid->format = format;	oid->plug = &oid40_plug;	/* Getting oid pluign work area from format plugin. */	entcall(format, oid_area, &oid->start, &oid->len);    	oid->next = oid40_get_next(oid->start);	oid->used = oid40_get_used(oid->start);		return (reiser4_oid_ent_t *)oid;}static void oid40_close(reiser4_oid_ent_t *entity) {	aal_assert("umka-510", entity != NULL);	aal_free(entity);}/* Initializes oid allocator instance and returns it to caller. */static reiser4_oid_ent_t *oid40_create(reiser4_format_ent_t *format) {	oid40_t *oid;	if (!(oid = aal_calloc(sizeof(*oid), 0)))		return NULL;	oid->state = (1 << ENTITY_DIRTY);	/* Setting up next by OID40_RESERVED. It is needed because all oid less	   then OID40_RESERVED will be used for reiser4 insetrnal purposes. */	oid->used = 0;	oid->format = format;	oid->plug = &oid40_plug;	oid->next = OID40_RESERVED;	/* Getting oid pluign work area from format plugin. */	entcall(format, oid_area, &oid->start, &oid->len);		oid40_set_next(oid->start, oid->next);	oid40_set_used(oid->start, oid->used);	return (reiser4_oid_ent_t *)oid;}/* Updating next and used values in oid allocator dedicated area */static errno_t oid40_sync(reiser4_oid_ent_t *entity) {	reiser4_format_ent_t *format;	uint32_t state;		aal_assert("umka-1016", entity != NULL);	oid40_set_next(PLUG_ENT(entity)->start, 		       PLUG_ENT(entity)->next);    	oid40_set_used(PLUG_ENT(entity)->start, 		       PLUG_ENT(entity)->used);	/* Mark the format dirty. */	format = PLUG_ENT(entity)->format;	state = entcall(format, get_state);	entcall(format, set_state, state | (1 << ENTITY_DIRTY));		return 0;}/* Returns free oid and marks it as used */static oid_t oid40_allocate(reiser4_oid_ent_t *entity) {	aal_assert("umka-513", entity != NULL);	PLUG_ENT(entity)->next++;	PLUG_ENT(entity)->used++;	PLUG_ENT(entity)->state |= (1 << ENTITY_DIRTY);	return PLUG_ENT(entity)->next - 1;}/* Releases passed oid */static void oid40_release(reiser4_oid_ent_t *entity, 			  oid_t oid){	aal_assert("umka-528", entity != NULL);	PLUG_ENT(entity)->used--;	PLUG_ENT(entity)->state |= (1 << ENTITY_DIRTY);}/* Returns number of free oids */static oid_t oid40_free(reiser4_oid_ent_t *entity) {	aal_assert("umka-961", entity != NULL);	return MAX_UINT64 - PLUG_ENT(entity)->next;}/* Checks oid allocator for validness */static errno_t oid40_valid(reiser4_oid_ent_t *entity) {	aal_assert("umka-966", entity != NULL);	/* Next oid should not be less than the root locality */	if (PLUG_ENT(entity)->next < OID40_ROOT_LOCALITY)		return -EINVAL;	return 0;}/* Returns root locality */static oid_t oid40_root_locality() {	return OID40_ROOT_LOCALITY;}/* Returns root oid */static oid_t oid40_root_objectid() {	return OID40_ROOT_OBJECTID;}reiser4_oid_plug_t oid40_plug = {	.p = {		.id    = {OID_REISER40_ID, 0, OID_PLUG_TYPE},		.label = "oid40",		.desc  = "Inode number allocator plugin.",	},		.open		= oid40_open,	.close		= oid40_close,	.create		= oid40_create,	.valid		= oid40_valid,	.allocate	= oid40_allocate,	.release	= oid40_release,	.sync		= oid40_sync,	.print		= oid40_print,	.free		= oid40_free,	.layout         = NULL,	.set_state      = oid40_set_state,	.set_next	= oid40_set_next_oid,	.set_used	= oid40_set_used_oid,	.get_state      = oid40_get_state,	.get_next	= oid40_get_next_oid,	.get_used	= oid40_get_used_oid,		.root_locality	= oid40_root_locality,	.root_objectid	= oid40_root_objectid,	.lost_objectid	= oid40_lost_objectid,	.slink_locality = oid40_slink_locality};#endif

⌨️ 快捷键说明

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