Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 #include <linux/buffer_head.h>
0003 #include <linux/slab.h>
0004 #include "minix.h"
0005 
0006 enum {DEPTH = 3, DIRECT = 7};   /* Only double indirect */
0007 
0008 typedef u16 block_t;    /* 16 bit, host order */
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 }