Blame view
fs/minix/itree_v2.c
1.84 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <linux/buffer_head.h> #include "minix.h" enum {DIRECT = 7, DEPTH = 4}; /* Have triple indirect */ typedef u32 block_t; /* 32 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.i2_data; } |
0ab7620a0 fs/minix: bugfix,... |
22 23 |
#define DIRCOUNT 7 #define INDIRCOUNT(sb) (1 << ((sb)->s_blocksize_bits - 2)) |
1da177e4c Linux-2.6.12-rc2 |
24 25 26 |
static int block_to_path(struct inode * inode, long block, int offsets[DEPTH]) { int n = 0; |
939b00df0 [PATCH] Minix V3 ... |
27 |
struct super_block *sb = inode->i_sb; |
1da177e4c Linux-2.6.12-rc2 |
28 29 |
if (block < 0) { |
a1c6f0573 fs: use block_dev... |
30 31 32 |
printk("MINIX-fs: block_to_path: block %ld < 0 on dev %pg ", block, sb->s_bdev); |
6ed6a722f minixfs: fix bloc... |
33 34 |
} else if ((u64)block * (u64)sb->s_blocksize >= minix_sb(sb)->s_max_size) { |
f44ec6f3f limit minixfs pri... |
35 36 |
if (printk_ratelimit()) printk("MINIX-fs: block_to_path: " |
a1c6f0573 fs: use block_dev... |
37 38 39 |
"block %ld too big on dev %pg ", block, sb->s_bdev); |
0ab7620a0 fs/minix: bugfix,... |
40 |
} else if (block < DIRCOUNT) { |
1da177e4c Linux-2.6.12-rc2 |
41 |
offsets[n++] = block; |
0ab7620a0 fs/minix: bugfix,... |
42 43 |
} else if ((block -= DIRCOUNT) < INDIRCOUNT(sb)) { offsets[n++] = DIRCOUNT; |
1da177e4c Linux-2.6.12-rc2 |
44 |
offsets[n++] = block; |
0ab7620a0 fs/minix: bugfix,... |
45 46 47 48 |
} else if ((block -= INDIRCOUNT(sb)) < INDIRCOUNT(sb) * INDIRCOUNT(sb)) { offsets[n++] = DIRCOUNT + 1; offsets[n++] = block / INDIRCOUNT(sb); offsets[n++] = block % INDIRCOUNT(sb); |
1da177e4c Linux-2.6.12-rc2 |
49 |
} else { |
0ab7620a0 fs/minix: bugfix,... |
50 51 52 53 54 |
block -= INDIRCOUNT(sb) * INDIRCOUNT(sb); offsets[n++] = DIRCOUNT + 2; offsets[n++] = (block / INDIRCOUNT(sb)) / INDIRCOUNT(sb); offsets[n++] = (block / INDIRCOUNT(sb)) % INDIRCOUNT(sb); offsets[n++] = block % INDIRCOUNT(sb); |
1da177e4c Linux-2.6.12-rc2 |
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
} return n; } #include "itree_common.c" int V2_minix_get_block(struct inode * inode, long block, struct buffer_head *bh_result, int create) { return get_block(inode, block, bh_result, create); } void V2_minix_truncate(struct inode * inode) { truncate(inode); } |
939b00df0 [PATCH] Minix V3 ... |
71 |
unsigned V2_minix_blocks(loff_t size, struct super_block *sb) |
1da177e4c Linux-2.6.12-rc2 |
72 |
{ |
939b00df0 [PATCH] Minix V3 ... |
73 |
return nblocks(size, sb); |
1da177e4c Linux-2.6.12-rc2 |
74 |
} |