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 + -
显示快捷键?