Exemplo n.º 1
0
struct buffer_head * sysv_getblk(struct inode * inode, unsigned int block,
                                 int create, char * *start)
{
    struct super_block * sb = inode->i_sb;
    struct buffer_head * bh;

    if (block < 10)
        return inode_getblk(inode,block,create,start);
    block -= 10;
    if (block < sb->sv_ind_per_block) {
        bh = inode_getblk(inode,10,create,start);
        return block_getblk(inode, bh, block, create, start);
    }
    block -= sb->sv_ind_per_block;
    if (block < sb->sv_ind_per_block_2) {
        bh = inode_getblk(inode,11,create,start);
        bh = block_getblk(inode, bh, block >> sb->sv_ind_per_block_bits, create, start);
        return block_getblk(inode, bh, block & sb->sv_ind_per_block_1, create, start);
    }
Exemplo n.º 2
0
struct buffer_head * minix_getblk(struct inode * inode, int block, int create)
{
	struct buffer_head * bh;

	if (block<0) {
		printk("minix_getblk: block<0");
		return NULL;
	}
	if (block >= 7+512+512*512) {
		printk("minix_getblk: block>big");
		return NULL;
	}
	if (block < 7)
		return inode_getblk(inode,block,create);
	block -= 7;
	if (block < 512) {
		bh = inode_getblk(inode,7,create);
		return block_getblk(bh,block,create);
	}
	block -= 512;
	bh = inode_getblk(inode,8,create);
	bh = block_getblk(bh,block>>9,create);
	return block_getblk(bh,block & 511,create);
}