1 | /* disk.h
2 | ------
3 |
4 | FCFS Disk abstraction.
5 |
6 | $Id: disk.h,v 1.7 2003/10/20 07:18:11 stewart Exp $
7 |
8 | (C)2003 Stewart Smith
9 | Distributed under the GNU Public License
10 | */
11 |
12 | #ifndef __DISK_H__
13 | #define __DISK_H__
14 |
15 | #include "testkit/block_dev.h"
16 | #include "testkit/types.h"
17 |
18 | struct fcfs_disk {
19 | sector_t blocksnr; /* number of blocks */
20 | u32 bsize; /* Size of blocks */
21 | struct fcfs_disk_block *sb_block;
22 | struct fcfs_sb* sb; /* The Disk SuperBlock */
23 | void* os_private; /* Used by OS for it's structure */
24 | };
25 |
26 | struct fcfs_disk_block {
27 | sector_t blocknr; /* Number of block*/
28 | u32 bsize; /* Size of block*/
29 | char* data; /* Block data */
30 | struct fcfs_disk *disk; /* The disk the block is from */
31 | void* os_private; /* The OS data structure */
32 | };
33 |
34 | #define BR_SECTOR_T(disk,br) (((disk)->sb->ag_blocksnr * (br)->allocation_group) + (br)->start)
35 |
36 | struct fcfs_disk* disk_new(struct block_device *bdev);
37 | struct fcfs_disk* disk_free(struct fcfs_disk* disk);
38 |
39 | struct fcfs_disk_block* disk_newblock(struct fcfs_disk *disk,sector_t block);
40 | struct fcfs_disk_block* disk_getblock(struct fcfs_disk *disk,sector_t block);
41 | //static inline struct fcfs_disk_block* disk_freeblock(struct fcfs_disk_block* block);
42 | //static inline struct fcfs_disk_block* disk_writeblock(struct fcfs_disk_block* block);
43 |
44 | /* When finished using a disk block */
45 | static inline struct fcfs_disk_block* disk_freeblock(struct fcfs_disk_block* block)
46 | {
47 | ((struct buffer_head*)(block->os_private))->b_count--;
48 | return block;
49 | }
50 |
51 | /* Write a disk block immediately. */
52 | static inline struct fcfs_disk_block* disk_writeblock(struct fcfs_disk_block* block)
53 | {
54 | set_buffer_dirty((struct buffer_head*)block->os_private);
55 | submit_bh(WRITE,(struct buffer_head*)block->os_private);
56 | return block;
57 | }
58 |
59 |
60 | #endif