1 | /* disk_testkit.c
2 | --------------
3 |
4 | Disk access functions used under Stewart Smith's Testkit.
5 |
6 | $Id: disk_testkit.c,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 |
13 | #include <stdio.h>
14 | #include <stdlib.h>
15 | #include "testkit/block_dev.h"
16 | #include "disk.h"
17 |
18 | /* disk_new
19 | --------
20 | new disk object from testkit block device.
21 | */
22 | struct fcfs_disk* disk_new(struct block_device *bdev)
23 | {
24 | struct fcfs_disk* disk;
25 |
26 | disk = (struct fcfs_disk*)malloc(sizeof(struct fcfs_disk));
27 | disk->os_private = bdev;
28 | disk->bsize = bdev->block_size;
29 | disk->blocksnr = bdev->num_blocks;
30 | disk->sb = NULL;
31 | return disk;
32 | }
33 |
34 | /* disk_free
35 | ---------
36 | Close and free the disk.
37 | */
38 | struct fcfs_disk* disk_free(struct fcfs_disk* disk)
39 | {
40 | block_dev_close(disk->os_private);
41 | free(disk);
42 | }
43 |
44 | /* Return an empty disk_block for the block. Does not read from disk */
45 | struct fcfs_disk_block* disk_newblock(struct fcfs_disk *disk, sector_t block)
46 | {
47 | struct fcfs_disk_block* disk_block;
48 |
49 | disk_block = (struct fcfs_disk_block*)malloc(sizeof(struct fcfs_disk_block));
50 | if(disk_block==NULL)
51 | {
52 | fprintf(stderr,"Unable to allocate disk_block\n");
53 | abort();
54 | }
55 | disk_block->os_private = bnew(disk->os_private,block,disk->bsize);
56 | disk_block->blocknr = block;
57 | disk_block->bsize = disk->bsize;
58 | disk_block->data = ((struct buffer_head*)(disk_block->os_private))->b_data;
59 | ((struct buffer_head*)(disk_block->os_private))->b_count++;
60 | disk_block->disk = disk;
61 |
62 | return disk_block;
63 | }
64 |
65 | /* Allocate and return a disk block */
66 | struct fcfs_disk_block* disk_getblock(struct fcfs_disk *disk,sector_t block)
67 | {
68 | struct fcfs_disk_block* disk_block;
69 |
70 | disk_block = (struct fcfs_disk_block*)malloc(sizeof(struct fcfs_disk_block));
71 | if(disk_block==NULL)
72 | {
73 | fprintf(stderr,"Unable to allocate disk_block\n");
74 | abort();
75 | }
76 |
77 | // fprintf(stderr,"DISK_GETBLOCK: 0x%llx\n",block);
78 |
79 | disk_block->os_private = bread(disk->os_private,block,disk->bsize);
80 | disk_block->blocknr = block;
81 | disk_block->bsize = disk->bsize;
82 | disk_block->data = ((struct buffer_head*)(disk_block->os_private))->b_data;
83 | ((struct buffer_head*)(disk_block->os_private))->b_count++;
84 | disk_block->disk = disk;
85 |
86 | return disk_block;
87 | }
88 |