1a5f3bf0bcecde761fc78da91ea49a439ed44d99
[linux-3.10.git] / fs / minix / itree_v1.c
1 #include <linux/buffer_head.h>
2 #include "minix.h"
3
4 enum {DEPTH = 3, DIRECT = 7};   /* Only double indirect */
5
6 typedef u16 block_t;    /* 16 bit, host order */
7
8 static inline unsigned long block_to_cpu(block_t n)
9 {
10         return n;
11 }
12
13 static inline block_t cpu_to_block(unsigned long n)
14 {
15         return n;
16 }
17
18 static inline block_t *i_data(struct inode *inode)
19 {
20         return (block_t *)minix_i(inode)->u.i1_data;
21 }
22
23 static int block_to_path(struct inode * inode, long block, int offsets[DEPTH])
24 {
25         int n = 0;
26
27         if (block < 0) {
28                 printk("minix_bmap: block<0\n");
29         } else if (block >= (minix_sb(inode->i_sb)->s_max_size/BLOCK_SIZE)) {
30                 printk("minix_bmap: block>big\n");
31         } else if (block < 7) {
32                 offsets[n++] = block;
33         } else if ((block -= 7) < 512) {
34                 offsets[n++] = 7;
35                 offsets[n++] = block;
36         } else {
37                 block -= 512;
38                 offsets[n++] = 8;
39                 offsets[n++] = block>>9;
40                 offsets[n++] = block & 511;
41         }
42         return n;
43 }
44
45 #include "itree_common.c"
46
47 int V1_minix_get_block(struct inode * inode, long block,
48                         struct buffer_head *bh_result, int create)
49 {
50         return get_block(inode, block, bh_result, create);
51 }
52
53 void V1_minix_truncate(struct inode * inode)
54 {
55         truncate(inode);
56 }
57
58 unsigned V1_minix_blocks(loff_t size, struct super_block *sb)
59 {
60         return nblocks(size, sb);
61 }