📄 bmp.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 + -