mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 03:13:59 +00:00 
			
		
		
		
	 1da177e4c3
			
		
	
	
		1da177e4c3
		
	
	
	
	
		
			
			Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip!
		
			
				
	
	
		
			84 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * linux/fs/befs/io.c
 | |
|  *
 | |
|  * Copyright (C) 2001 Will Dyson <will_dyson@pobox.com
 | |
|  *
 | |
|  * Based on portions of file.c and inode.c 
 | |
|  * by Makoto Kato (m_kato@ga2.so-net.ne.jp)
 | |
|  *
 | |
|  * Many thanks to Dominic Giampaolo, author of Practical File System
 | |
|  * Design with the Be File System, for such a helpful book.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #include <linux/buffer_head.h>
 | |
| 
 | |
| #include "befs.h"
 | |
| #include "io.h"
 | |
| 
 | |
| /*
 | |
|  * Converts befs notion of disk addr to a disk offset and uses
 | |
|  * linux kernel function sb_bread() to get the buffer containing
 | |
|  * the offset. -Will Dyson
 | |
|  *
 | |
|  */
 | |
| 
 | |
| struct buffer_head *
 | |
| befs_bread_iaddr(struct super_block *sb, befs_inode_addr iaddr)
 | |
| {
 | |
| 	struct buffer_head *bh = NULL;
 | |
| 	befs_blocknr_t block = 0;
 | |
| 	befs_sb_info *befs_sb = BEFS_SB(sb);
 | |
| 
 | |
| 	befs_debug(sb, "---> Enter befs_read_iaddr() "
 | |
| 		   "[%u, %hu, %hu]",
 | |
| 		   iaddr.allocation_group, iaddr.start, iaddr.len);
 | |
| 
 | |
| 	if (iaddr.allocation_group > befs_sb->num_ags) {
 | |
| 		befs_error(sb, "BEFS: Invalid allocation group %u, max is %u",
 | |
| 			   iaddr.allocation_group, befs_sb->num_ags);
 | |
| 		goto error;
 | |
| 	}
 | |
| 
 | |
| 	block = iaddr2blockno(sb, &iaddr);
 | |
| 
 | |
| 	befs_debug(sb, "befs_read_iaddr: offset = %lu", block);
 | |
| 
 | |
| 	bh = sb_bread(sb, block);
 | |
| 
 | |
| 	if (bh == NULL) {
 | |
| 		befs_error(sb, "Failed to read block %lu", block);
 | |
| 		goto error;
 | |
| 	}
 | |
| 
 | |
| 	befs_debug(sb, "<--- befs_read_iaddr()");
 | |
| 	return bh;
 | |
| 
 | |
|       error:
 | |
| 	befs_debug(sb, "<--- befs_read_iaddr() ERROR");
 | |
| 	return NULL;
 | |
| }
 | |
| 
 | |
| struct buffer_head *
 | |
| befs_bread(struct super_block *sb, befs_blocknr_t block)
 | |
| {
 | |
| 	struct buffer_head *bh = NULL;
 | |
| 
 | |
| 	befs_debug(sb, "---> Enter befs_read() %Lu", block);
 | |
| 
 | |
| 	bh = sb_bread(sb, block);
 | |
| 
 | |
| 	if (bh == NULL) {
 | |
| 		befs_error(sb, "Failed to read block %lu", block);
 | |
| 		goto error;
 | |
| 	}
 | |
| 
 | |
| 	befs_debug(sb, "<--- befs_read()");
 | |
| 
 | |
| 	return bh;
 | |
| 
 | |
|       error:
 | |
| 	befs_debug(sb, "<--- befs_read() ERROR");
 | |
| 	return NULL;
 | |
| }
 |