itree_v1.c 1.4 KB
Newer Older
Linus Torvalds's avatar
Linus Torvalds committed
1
#include <linux/buffer_head.h>
2
#include <linux/slab.h>
Linus Torvalds's avatar
Linus Torvalds committed
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
#include "minix.h"

enum {DEPTH = 3, DIRECT = 7};	/* Only double indirect */

typedef u16 block_t;	/* 16 bit, host order */

static inline unsigned long block_to_cpu(block_t n)
{
	return n;
}

static inline block_t cpu_to_block(unsigned long n)
{
	return n;
}

static inline block_t *i_data(struct inode *inode)
{
	return (block_t *)minix_i(inode)->u.i1_data;
}

static int block_to_path(struct inode * inode, long block, int offsets[DEPTH])
{
	int n = 0;

	if (block < 0) {
29 30
		printk("MINIX-fs: block_to_path: block %ld < 0 on dev %pg\n",
			block, inode->i_sb->s_bdev);
Linus Torvalds's avatar
Linus Torvalds committed
31
	} else if (block >= (minix_sb(inode->i_sb)->s_max_size/BLOCK_SIZE)) {
32 33
		if (printk_ratelimit())
			printk("MINIX-fs: block_to_path: "
34 35
			       "block %ld too big on dev %pg\n",
				block, inode->i_sb->s_bdev);
Linus Torvalds's avatar
Linus Torvalds committed
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
	} else if (block < 7) {
		offsets[n++] = block;
	} else if ((block -= 7) < 512) {
		offsets[n++] = 7;
		offsets[n++] = block;
	} else {
		block -= 512;
		offsets[n++] = 8;
		offsets[n++] = block>>9;
		offsets[n++] = block & 511;
	}
	return n;
}

#include "itree_common.c"

int V1_minix_get_block(struct inode * inode, long block,
			struct buffer_head *bh_result, int create)
{
	return get_block(inode, block, bh_result, create);
}

void V1_minix_truncate(struct inode * inode)
{
	truncate(inode);
}

Andries Brouwer's avatar
Andries Brouwer committed
63
unsigned V1_minix_blocks(loff_t size, struct super_block *sb)
Linus Torvalds's avatar
Linus Torvalds committed
64
{
Andries Brouwer's avatar
Andries Brouwer committed
65
	return nblocks(size, sb);
Linus Torvalds's avatar
Linus Torvalds committed
66
}