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

📄 bmp.c

📁 课程设计
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -