Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
file.c
Go to the documentation of this file.
1 /*
2  * file.c
3  *
4  * Copyright (c) 1999 Al Smith
5  *
6  * Portions derived from work (c) 1995,1996 Christian Vogelgsang.
7  */
8 
9 #include <linux/buffer_head.h>
10 #include "efs.h"
11 
12 int efs_get_block(struct inode *inode, sector_t iblock,
13  struct buffer_head *bh_result, int create)
14 {
15  int error = -EROFS;
16  long phys;
17 
18  if (create)
19  return error;
20  if (iblock >= inode->i_blocks) {
21 #ifdef DEBUG
22  /*
23  * i have no idea why this happens as often as it does
24  */
25  printk(KERN_WARNING "EFS: bmap(): block %d >= %ld (filesize %ld)\n",
26  block,
27  inode->i_blocks,
28  inode->i_size);
29 #endif
30  return 0;
31  }
32  phys = efs_map_block(inode, iblock);
33  if (phys)
34  map_bh(bh_result, inode->i_sb, phys);
35  return 0;
36 }
37 
39 
40  if (block < 0) {
41  printk(KERN_WARNING "EFS: bmap(): block < 0\n");
42  return 0;
43  }
44 
45  /* are we about to read past the end of a file ? */
46  if (!(block < inode->i_blocks)) {
47 #ifdef DEBUG
48  /*
49  * i have no idea why this happens as often as it does
50  */
51  printk(KERN_WARNING "EFS: bmap(): block %d >= %ld (filesize %ld)\n",
52  block,
53  inode->i_blocks,
54  inode->i_size);
55 #endif
56  return 0;
57  }
58 
59  return efs_map_block(inode, block);
60 }