bmp.c

来自「课程设计」· C语言 代码 · 共 45 行

C
45
字号
#include <linux/buffer_head.h>
#include <asm/bitops.h>

#include "xbfs.h"

u32 bmp_get_block(struct super_block *sb)
{
	struct xbfs_sb_mem *sm = XBFS_SM(sb);
	int idx;

	for (idx = 0; idx < sm->sb->bmp_count; idx++) {
		u32 ret;
		struct buffer_head *bh;
		
		bh = sm->bh_bmp[idx];
		ret = find_first_zero_bit((void *)bh->b_data, BLK_PER_BMP);
		if (ret != BLK_PER_BMP) {
			u32 block;

			set_bit(ret, (void *)bh->b_data);
			mark_buffer_dirty(bh);
			block = sm->sb->data_start + ret + (idx << BLK_PER_BMP_BITS);
			DPRINT("malloc block %d\n", block);
			return block;
		}
	}

	DPRINT("no more free block\n");
	return 0;
}

void bmp_free_block(struct super_block *sb, u32 block)
{
	struct buffer_head *bh;
	struct xbfs_sb_mem *sm = XBFS_SM(sb);
	
	DPRINT("free block %d\n", block);

	block -= sm->sb->data_start;
	bh = sm->bh_bmp[block >> BLK_PER_BMP_BITS];
	clear_bit(block & (BLK_PER_BMP - 1), (void *)bh->b_data);
	mark_buffer_dirty(bh);
}

⌨️ 快捷键说明

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