Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2  * linux/fs/befs/io.c
  3  *
  4  * Copyright (C) 2001 Will Dyson <will_dyson@pobox.com
  5  *
  6  * Based on portions of file.c and inode.c 
  7  * by Makoto Kato (m_kato@ga2.so-net.ne.jp)
  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 *
 27 befs_bread_iaddr(struct super_block *sb, befs_inode_addr iaddr)
 28 {
 29         struct buffer_head *bh = NULL;
 30         befs_blocknr_t block = 0;
 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 *
 63 befs_bread(struct super_block *sb, befs_blocknr_t block)
 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 }
 84 
  This page was automatically generated by the LXR engine.