Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
io.c
Go to the documentation of this file.
1 /*
2  * linux/fs/befs/io.c
3  *
4  * Copyright (C) 2001 Will Dyson <[email protected]
5  *
6  * Based on portions of file.c and inode.c
7  * by Makoto Kato ([email protected])
8  *
9  * Many thanks to Dominic Giampaolo, author of Practical File System
10  * Design with the Be File System, for such a helpful book.
11  *
12  */
13 
14 #include <linux/buffer_head.h>
15 
16 #include "befs.h"
17 #include "io.h"
18 
19 /*
20  * Converts befs notion of disk addr to a disk offset and uses
21  * linux kernel function sb_bread() to get the buffer containing
22  * the offset. -Will Dyson
23  *
24  */
25 
26 struct buffer_head *
28 {
29  struct buffer_head *bh = NULL;
31  befs_sb_info *befs_sb = BEFS_SB(sb);
32 
33  befs_debug(sb, "---> Enter befs_read_iaddr() "
34  "[%u, %hu, %hu]",
35  iaddr.allocation_group, iaddr.start, iaddr.len);
36 
37  if (iaddr.allocation_group > befs_sb->num_ags) {
38  befs_error(sb, "BEFS: Invalid allocation group %u, max is %u",
39  iaddr.allocation_group, befs_sb->num_ags);
40  goto error;
41  }
42 
43  block = iaddr2blockno(sb, &iaddr);
44 
45  befs_debug(sb, "befs_read_iaddr: offset = %lu", block);
46 
47  bh = sb_bread(sb, block);
48 
49  if (bh == NULL) {
50  befs_error(sb, "Failed to read block %lu", block);
51  goto error;
52  }
53 
54  befs_debug(sb, "<--- befs_read_iaddr()");
55  return bh;
56 
57  error:
58  befs_debug(sb, "<--- befs_read_iaddr() ERROR");
59  return NULL;
60 }
61 
62 struct buffer_head *
64 {
65  struct buffer_head *bh = NULL;
66 
67  befs_debug(sb, "---> Enter befs_read() %Lu", block);
68 
69  bh = sb_bread(sb, block);
70 
71  if (bh == NULL) {
72  befs_error(sb, "Failed to read block %lu", block);
73  goto error;
74  }
75 
76  befs_debug(sb, "<--- befs_read()");
77 
78  return bh;
79 
80  error:
81  befs_debug(sb, "<--- befs_read() ERROR");
82  return NULL;
83 }