0001
0002 #include <linux/buffer_head.h>
0003 #include <linux/slab.h>
0004 #include "minix.h"
0005
0006 enum {DEPTH = 3, DIRECT = 7};
0007
0008 typedef u16 block_t;
0009
0010 static inline unsigned long block_to_cpu(block_t n)
0011 {
0012 return n;
0013 }
0014
0015 static inline block_t cpu_to_block(unsigned long n)
0016 {
0017 return n;
0018 }
0019
0020 static inline block_t *i_data(struct inode *inode)
0021 {
0022 return (block_t *)minix_i(inode)->u.i1_data;
0023 }
0024
0025 static int block_to_path(struct inode * inode, long block, int offsets[DEPTH])
0026 {
0027 int n = 0;
0028
0029 if (block < 0) {
0030 printk("MINIX-fs: block_to_path: block %ld < 0 on dev %pg\n",
0031 block, inode->i_sb->s_bdev);
0032 return 0;
0033 }
0034 if ((u64)block * BLOCK_SIZE >= inode->i_sb->s_maxbytes)
0035 return 0;
0036
0037 if (block < 7) {
0038 offsets[n++] = block;
0039 } else if ((block -= 7) < 512) {
0040 offsets[n++] = 7;
0041 offsets[n++] = block;
0042 } else {
0043 block -= 512;
0044 offsets[n++] = 8;
0045 offsets[n++] = block>>9;
0046 offsets[n++] = block & 511;
0047 }
0048 return n;
0049 }
0050
0051 #include "itree_common.c"
0052
0053 int V1_minix_get_block(struct inode * inode, long block,
0054 struct buffer_head *bh_result, int create)
0055 {
0056 return get_block(inode, block, bh_result, create);
0057 }
0058
0059 void V1_minix_truncate(struct inode * inode)
0060 {
0061 truncate(inode);
0062 }
0063
0064 unsigned V1_minix_blocks(loff_t size, struct super_block *sb)
0065 {
0066 return nblocks(size, sb);
0067 }