>> How about a separate module?
>
> Hi,
>
> It's a good idea, perhaps I can add a journal layer on top of disk to
> do the mapping transparently.
>
> --
> Bean
>
Hi,
This patch revert ext2 and reiserfs driver to pre journal state. The
new journal support would be in a separate module and provide a
transparent mapping layer for the fs driver.
--
Bean
diff --git a/fs/ext2.c b/fs/ext2.c
index 184b973..8e35f8d 100644
--- a/fs/ext2.c
+++ b/fs/ext2.c
@@ -241,8 +241,6 @@ struct grub_ext2_data
grub_disk_t disk;
struct grub_ext2_inode *inode;
struct grub_fshelp_node diropen;
- struct grub_fshelp_node logfile;
- grub_fshelp_journal_t journal;
};
#ifndef GRUB_UTIL
@@ -257,11 +255,11 @@ inline static grub_err_t
grub_ext2_blockgroup (struct grub_ext2_data *data, int group,
struct grub_ext2_block_group *blkgrp)
{
- return grub_fshelp_read (data->disk, data->journal,
- grub_le_to_cpu32 (data->sblock.first_data_block) + 1,
- group * sizeof (struct grub_ext2_block_group),
- sizeof (struct grub_ext2_block_group),
- (char *) blkgrp, LOG2_EXT2_BLOCK_SIZE (data));
+ return grub_disk_read (data->disk,
+ ((grub_le_to_cpu32 (data->sblock.first_data_block) + 1)
+ << LOG2_EXT2_BLOCK_SIZE (data)),
+ group * sizeof (struct grub_ext2_block_group),
+ sizeof (struct grub_ext2_block_group), (char *) blkgrp);
}
@@ -282,9 +280,10 @@ grub_ext2_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
{
grub_uint32_t indir[blksz / 4];
- if (grub_fshelp_read (data->disk, data->journal,
- grub_le_to_cpu32 (inode->blocks.indir_block),
- 0, blksz, (char *) indir, log2_blksz))
+ if (grub_disk_read (data->disk,
+ grub_le_to_cpu32 (inode->blocks.indir_block)
+ << log2_blksz,
+ 0, blksz, (char *) indir))
return grub_errno;
blknr = grub_le_to_cpu32 (indir[fileblock - INDIRECT_BLOCKS]);
@@ -297,14 +296,16 @@ grub_ext2_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
+ blksz / 4);
grub_uint32_t indir[blksz / 4];
- if (grub_fshelp_read (data->disk, data->journal,
- grub_le_to_cpu32 (inode->blocks.double_indir_block),
- 0, blksz, (char *) indir, log2_blksz))
+ if (grub_disk_read (data->disk,
+ grub_le_to_cpu32 (inode->blocks.double_indir_block)
+ << log2_blksz,
+ 0, blksz, (char *) indir))
return grub_errno;
- if (grub_fshelp_read (data->disk, data->journal,
- grub_le_to_cpu32 (indir[rblock / perblock]),
- 0, blksz, (char *) indir, log2_blksz))
+ if (grub_disk_read (data->disk,
+ grub_le_to_cpu32 (indir[rblock / perblock])
+ << log2_blksz,
+ 0, blksz, (char *) indir))
return grub_errno;
@@ -318,7 +319,7 @@ grub_ext2_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
blknr = -1;
}
- return grub_fshelp_map_block (data->journal, blknr);
+ return blknr;
}
/* Read LEN bytes from the file described by DATA starting with byte
@@ -344,6 +345,8 @@ grub_ext2_read_inode (struct grub_ext2_data *data,
{
struct grub_ext2_block_group blkgrp;
struct grub_ext2_sblock *sblock = &data->sblock;
+ int inodes_per_block;
+ unsigned int blkno;
unsigned int blkoff;
/* It is easier to calculate if the first inode is 0. */
@@ -355,184 +358,23 @@ grub_ext2_read_inode (struct grub_ext2_data *data,
if (grub_errno)
return grub_errno;
- blkoff = ino % grub_le_to_cpu32 (sblock->inodes_per_group);
+ inodes_per_block = EXT2_BLOCK_SIZE (data) / EXT2_INODE_SIZE (data);
+ blkno = (ino % grub_le_to_cpu32 (sblock->inodes_per_group))
+ / inodes_per_block;
+ blkoff = (ino % grub_le_to_cpu32 (sblock->inodes_per_group))
+ % inodes_per_block;
/* Read the inode. */
- if (grub_fshelp_read (data->disk, data->journal,
- grub_le_to_cpu32 (blkgrp.inode_table_id),
- EXT2_INODE_SIZE (data) * blkoff,
- sizeof (struct grub_ext2_inode), (char *) inode,
- LOG2_EXT2_BLOCK_SIZE (data)))
+ if (grub_disk_read (data->disk,
+ ((grub_le_to_cpu32 (blkgrp.inode_table_id) + blkno)
+ << LOG2_EXT2_BLOCK_SIZE (data)),
+ EXT2_INODE_SIZE (data) * blkoff,
+ sizeof (struct grub_ext2_inode), (char *) inode))
return grub_errno;
return 0;
}
-static void
-grub_ext3_get_journal (struct grub_ext2_data *data)
-{
- char buf[1 << LOG2_BLOCK_SIZE (data)];
- struct grub_ext3_journal_sblock *jsb;
- grub_fshelp_journal_t log;
- int last_num, num, block, log2bs;
- grub_uint32_t seq;
-
- auto void next_block (void);
- void next_block (void)
- {
- block++;
- if (block >= log->last_block)
- block = log->first_block;
- }
-
- data->journal = 0;
-
- if (! (data->sblock.feature_compatibility & EXT3_FEATURE_COMPAT_HAS_JOURNAL))
- return;
-
- if (! data->sblock.journal_inum)
- return;
-
- data->logfile.data = data;
- data->logfile.ino = data->sblock.journal_inum;
- data->logfile.inode_read = 1;
-
- if (grub_ext2_read_inode (data, data->logfile.ino, &data->logfile.inode))
- return;
-
- log2bs = LOG2_EXT2_BLOCK_SIZE (data);
- if (grub_fshelp_read_file (data->disk, &data->logfile, 0,
- 0, sizeof (struct grub_ext3_journal_sblock),
- buf, grub_ext2_read_block,
- sizeof (buf), log2bs) !=
- sizeof (struct grub_ext3_journal_sblock))
- return;
-
- jsb = (struct grub_ext3_journal_sblock *) &buf[0];
- if (grub_be_to_cpu32 (jsb->header.magic) != EXT3_JOURNAL_MAGIC_NUMBER)
- return;
-
- /* Empty journal. */
- if (! jsb->start)
- return;
-
- log = grub_malloc (sizeof (struct grub_fshelp_journal) +
- grub_be_to_cpu32 (jsb->maxlen) * sizeof (grub_disk_addr_t));
- if (! log)
- return;
-
- log->type = GRUB_FSHELP_JOURNAL_TYPE_FILE;
- log->node = &data->logfile;
- log->get_block = grub_ext2_read_block;
- log->first_block = grub_be_to_cpu32 (jsb->first);
- log->last_block = grub_be_to_cpu32 (jsb->maxlen);
- log->start_block = grub_be_to_cpu32 (jsb->start);
-
- last_num = num = 0;
- block = log->start_block;
- seq = grub_be_to_cpu32 (jsb->sequence);
-
- while (1)
- {
- struct grub_ext3_journal_header *jh;
-
- grub_fshelp_read_file (data->disk, &data->logfile, 0,
- block << (log2bs + 9), sizeof (buf),
- buf, grub_ext2_read_block,
- log->last_block << (log2bs + 9),
- log2bs);
- if (grub_errno)
- break;
-
- jh = (struct grub_ext3_journal_header *) &buf[0];
- if (grub_be_to_cpu32 (jh->magic) != EXT3_JOURNAL_MAGIC_NUMBER)
- break;
-
- if (grub_be_to_cpu32 (jh->sequence) != seq)
- break;
-
- log->mapping[num++] = GRUB_FSHELP_JOURNAL_UNUSED_MAPPING;
- next_block();
-
- switch (grub_be_to_cpu32 (jh->block_type))
- {
- case EXT3_JOURNAL_DESCRIPTOR_BLOCK:
- {
- struct grub_ext3_journal_block_tag *tag;
- int ofs, flags;
-
- ofs = sizeof (struct grub_ext3_journal_header);
-
- do
- {
- tag = (struct grub_ext3_journal_block_tag *) &buf[ofs];
- ofs += sizeof (struct grub_ext3_journal_block_tag);
-
- if (ofs > (int) sizeof (buf))
- break;
-
- flags = grub_be_to_cpu32 (tag->flags);
- if (! (flags & EXT3_JOURNAL_FLAG_SAME_UUID))
- ofs += 16;
-
- log->mapping[num++] = grub_be_to_cpu32 (tag->block);
- next_block();
- }
- while (! (flags & EXT3_JOURNAL_FLAG_LAST_TAG));
-
- continue;
- }
-
- case EXT3_JOURNAL_COMMIT_BLOCK:
- {
- seq++;
- last_num = num - 1;
- continue;
- }
-
- case EXT3_JOURNAL_REVOKE_BLOCK:
- {
- struct grub_ext3_journal_revoke_header *jrh;
- grub_uint32_t i, cnt;
-
- jrh = (struct grub_ext3_journal_revoke_header *) jh;
- cnt = (grub_be_to_cpu32 (jrh->count) -
- sizeof (struct grub_ext3_journal_revoke_header)) >> 2;
-
- for (i = 0; i < cnt; i++)
- {
- int j;
- grub_uint32_t map;
-
- map = grub_be_to_cpu32 (jrh->data[i]);
- for (j = 0; j < num; j++)
- if (log->mapping[j] == map)
- log->mapping[j] = GRUB_FSHELP_JOURNAL_UNUSED_MAPPING;
- }
-
- continue;
- }
- default:
- last_num = 0;
- goto quit;
- }
- }
-
-quit:
- if (! last_num)
- grub_free (log);
- else
- {
- int size;
-
- size = sizeof (struct grub_fshelp_journal) +
- last_num * sizeof (grub_disk_addr_t);
-
- log->num_mappings = last_num;
- data->journal = grub_realloc (log, size);
- }
-}
-
static struct grub_ext2_data *
grub_ext2_mount (grub_disk_t disk)
{
@@ -553,7 +395,6 @@ grub_ext2_mount (grub_disk_t disk)
goto fail;
data->disk = disk;
- grub_ext3_get_journal (data);
data->diropen.data = data;
data->diropen.ino = 2;
@@ -758,11 +599,7 @@ grub_ext2_open (struct grub_file *file, const char *name)
static grub_err_t
grub_ext2_close (grub_file_t file)
{
- if (file->data)
- {
- grub_free (((struct grub_ext2_data *) file->data)->journal);
- grub_free (file->data);
- }
+ grub_free (file->data);
#ifndef GRUB_UTIL
grub_dl_unref (my_mod);
diff --git a/fs/fshelp.c b/fs/fshelp.c
index 2fae065..2bf1939 100644
--- a/fs/fshelp.c
+++ b/fs/fshelp.c
@@ -214,46 +214,6 @@ grub_fshelp_find_file (const char *path, grub_fshelp_node_t rootnode,
return 0;
}
-
-/* Read LEN bytes from the block BLOCK on disk DISK into the buffer BUF,
- beginning with the block POS. Apply mappings from LOG. The blocks
- have a size of LOG2BLOCKSIZE (in log2). */
-grub_err_t grub_fshelp_read (grub_disk_t disk, grub_fshelp_journal_t log,
- grub_disk_addr_t block, grub_off_t pos,
- grub_size_t len, char *buf, int log2blocksize)
-{
- grub_off_t relblk;
-
- relblk = pos >> (log2blocksize + GRUB_DISK_SECTOR_BITS);
- block += relblk;
- pos -= relblk << (log2blocksize + GRUB_DISK_SECTOR_BITS);
-
- while (len > 0)
- {
- grub_err_t ret;
- grub_size_t size;
-
- size = (GRUB_DISK_SECTOR_SIZE << log2blocksize) - pos;
- if (size > len)
- size = len;
-
- ret = grub_disk_read (disk,
- grub_fshelp_map_block (log, block) << log2blocksize,
- pos, size, buf);
-
- if (ret)
- return ret;
-
- block++;
- pos = 0;
- buf += size;
- len -= size;
- }
-
- return 0;
-}
-
-
/* Read LEN bytes from the file NODE on disk DISK into the buffer BUF,
beginning with the block POS. READ_HOOK should be set before
reading a block from the file. GET_BLOCK is used to translate file
@@ -350,30 +310,3 @@ grub_fshelp_log2blksize (unsigned int blksize, unsigned int *pow)
return GRUB_ERR_NONE;
}
-
-grub_disk_addr_t
-grub_fshelp_map_block (grub_fshelp_journal_t log, grub_disk_addr_t block)
-{
- int map_block;
-
- if ((! log) || (! block))
- return block;
-
- for (map_block = log->num_mappings - 1; map_block >= 0; map_block--)
- {
- if (log->mapping[map_block] == block)
- break;
- }
-
- if (map_block < 0)
- return block;
-
- map_block += log->start_block;
- if (map_block >= log->last_block)
- map_block -= log->last_block - log->first_block;
-
- if (log->type == GRUB_FSHELP_JOURNAL_TYPE_BLOCK)
- return log->blkno + map_block;
- else
- return log->get_block (log->node, map_block);
-}
diff --git a/fs/reiserfs.c b/fs/reiserfs.c
index 9a059e3..9bde6d2 100644
--- a/fs/reiserfs.c
+++ b/fs/reiserfs.c
@@ -234,7 +234,6 @@ struct grub_reiserfs_data
{
struct grub_reiserfs_superblock superblock;
grub_disk_t disk;
- grub_fshelp_journal_t journal;
};
/* Internal-only functions. Not to be used outside of this file. */
@@ -511,8 +510,7 @@ grub_reiserfs_get_item (struct grub_reiserfs_data *data,
do
{
grub_disk_read (data->disk,
- grub_fshelp_map_block (data->journal, block_number) *
- (block_size >> GRUB_DISK_SECTOR_BITS),
+ block_number * (block_size >> GRUB_DISK_SECTOR_BITS),
(((grub_off_t) block_number * block_size)
& (GRUB_DISK_SECTOR_SIZE - 1)),
block_size, (char *) block_header);
@@ -662,8 +660,7 @@ grub_reiserfs_read_symlink (grub_fshelp_node_t node)
block_size = grub_le_to_cpu16 (node->data->superblock.block_size);
len = grub_le_to_cpu16 (found.header.item_size);
- block = (grub_fshelp_map_block (node->data->journal, found.block_number) *
- (block_size >> GRUB_DISK_SECTOR_BITS));
+ block = found.block_number * (block_size >> GRUB_DISK_SECTOR_BITS);
offset = grub_le_to_cpu16 (found.header.item_location);
symlink_buffer = grub_malloc (len + 1);
@@ -682,124 +679,6 @@ grub_reiserfs_read_symlink (grub_fshelp_node_t node)
return 0;
}
-static void
-grub_reiserfs_get_journal (struct grub_reiserfs_data *data)
-{
- int block_size = grub_le_to_cpu16 (data->superblock.block_size);
- char buf[block_size];
- struct grub_reiserfs_journal_header *jh;
- grub_fshelp_journal_t log;
- grub_uint32_t seq_id, mount_id;
- int num_blocks = grub_le_to_cpu32 (data->superblock.journal_original_size);
- int base_block = grub_le_to_cpu32 (data->superblock.journal_block);
- int last_num, num, block;
-
- data->journal = 0;
-
- if (! data->superblock.journal_block)
- return;
-
- if (grub_disk_read (data->disk,
- (base_block + num_blocks)
- * (block_size >> GRUB_DISK_SECTOR_BITS),
- 0, sizeof (struct grub_reiserfs_journal_header),
- buf))
- return;
-
- log = grub_malloc (sizeof (struct grub_fshelp_journal) +
- num_blocks * sizeof (grub_disk_addr_t));
- if (! log)
- return;
-
- jh = (struct grub_reiserfs_journal_header *) &buf[0];
-
- log->type = GRUB_FSHELP_JOURNAL_TYPE_BLOCK;
- log->blkno = base_block;
- log->first_block = 0;
- log->last_block = num_blocks;
- log->start_block = grub_le_to_cpu32 (jh->unflushed_offset);
-
- seq_id = grub_le_to_cpu32 (jh->last_flush_uid);
- mount_id = grub_le_to_cpu32 (jh->mount_id);
-
- last_num = num = 0;
- block = log->start_block;
-
- while (1)
- {
- struct grub_reiserfs_description_block *db;
- struct grub_reiserfs_commit_block *cb;
- grub_uint32_t i, len, half_len, id, mid;
-
- if (grub_disk_read (data->disk,
- (base_block + block)
- * (block_size >> GRUB_DISK_SECTOR_BITS),
- 0, sizeof (buf), buf))
- break;
-
- if (grub_memcmp (&buf[block_size - REISERFS_MAGIC_LEN],
- REISERFS_MAGIC_DESC_BLOCK,
- sizeof (REISERFS_MAGIC_DESC_BLOCK) - 1))
- break;
-
- db = (struct grub_reiserfs_description_block *) &buf[0];
- id = grub_le_to_cpu32 (db->id);
- len = grub_le_to_cpu32 (db->len);
- mid = grub_le_to_cpu32 (db->mount_id);
- if ((id <= seq_id) && (mid <= mount_id))
- break;
-
- log->mapping[num++] = GRUB_FSHELP_JOURNAL_UNUSED_MAPPING;
- half_len = ((block_size - 24) >> 2);
- if (half_len > len)
- half_len = len;
-
- for (i = 0; i < half_len; i++)
- log->mapping[num++] = db->real_blocks[i];
-
- block += grub_le_to_cpu32 (db->len) + 1;
- if (block >= log->last_block)
- block -= log->last_block;
-
- if (grub_disk_read (data->disk,
- (base_block + block)
- * (block_size >> GRUB_DISK_SECTOR_BITS),
- 0, sizeof (buf), buf))
- break;
-
- cb = (struct grub_reiserfs_commit_block *) &buf[0];
- if ((grub_le_to_cpu32 (cb->id) != id) ||
- (grub_le_to_cpu32 (cb->len) != len))
- break;
-
- for (i = 0; i < len - half_len; i++)
- log->mapping[num++] = cb->real_blocks[i];
-
- last_num = num;
- log->mapping[num++] = GRUB_FSHELP_JOURNAL_UNUSED_MAPPING;
-
- block++;
- if (block >= log->last_block)
- block -= log->last_block;
-
- seq_id = id;
- mount_id = mid;
- };
-
- if (! last_num)
- grub_free (log);
- else
- {
- int size;
-
- size = sizeof (struct grub_fshelp_journal) +
- last_num * sizeof (grub_disk_addr_t);
-
- log->num_mappings = last_num;
- data->journal = grub_realloc (log, size);
- }
-}
-
/* Fill the mounted filesystem structure and return it. */
static struct grub_reiserfs_data *
grub_reiserfs_mount (grub_disk_t disk)
@@ -819,7 +698,6 @@ grub_reiserfs_mount (grub_disk_t disk)
goto fail;
}
data->disk = disk;
- grub_reiserfs_get_journal (data);
return data;
fail:
@@ -867,8 +745,7 @@ grub_reiserfs_iterate_dir (grub_fshelp_node_t item,
struct grub_reiserfs_item_header *item_headers;
grub_disk_read (data->disk,
- grub_fshelp_map_block (data->journal, block_number) *
- (block_size >> GRUB_DISK_SECTOR_BITS),
+ block_number * (block_size >> GRUB_DISK_SECTOR_BITS),
(((grub_off_t) block_number * block_size)
& (GRUB_DISK_SECTOR_SIZE - 1)),
block_size, (char *) block_header);
@@ -962,8 +839,7 @@ grub_reiserfs_iterate_dir (grub_fshelp_node_t item,
{
struct grub_reiserfs_stat_item_v1 entry_v1_stat;
grub_disk_read (data->disk,
- grub_fshelp_map_block (data->journal, entry_block_number) *
- (block_size >> GRUB_DISK_SECTOR_BITS),
+ entry_block_number * (block_size >> GRUB_DISK_SECTOR_BITS),
grub_le_to_cpu16 (entry_item->header.item_location),
sizeof (entry_v1_stat),
(char *) &entry_v1_stat);
@@ -1005,8 +881,7 @@ grub_reiserfs_iterate_dir (grub_fshelp_node_t item,
{
struct grub_reiserfs_stat_item_v2 entry_v2_stat;
grub_disk_read (data->disk,
- grub_fshelp_map_block (data->journal, entry_block_number) *
- (block_size >> GRUB_DISK_SECTOR_BITS),
+ entry_block_number * (block_size >> GRUB_DISK_SECTOR_BITS),
grub_le_to_cpu16 (entry_item->header.item_location),
sizeof (entry_v2_stat),
(char *) &entry_v2_stat);
@@ -1154,8 +1029,7 @@ grub_reiserfs_open (struct grub_file *file, const char *name)
{
struct grub_reiserfs_stat_item_v1 entry_v1_stat;
grub_disk_read (data->disk,
- grub_fshelp_map_block (data->journal, block_number) *
- (block_size >> GRUB_DISK_SECTOR_BITS),
+ block_number * (block_size >> GRUB_DISK_SECTOR_BITS),
entry_location
+ (((grub_off_t) block_number * block_size)
& (GRUB_DISK_SECTOR_SIZE - 1)),
@@ -1168,8 +1042,7 @@ grub_reiserfs_open (struct grub_file *file, const char *name)
{
struct grub_reiserfs_stat_item_v2 entry_v2_stat;
grub_disk_read (data->disk,
- grub_fshelp_map_block (data->journal, block_number) *
- (block_size >> GRUB_DISK_SECTOR_BITS),
+ block_number * (block_size >> GRUB_DISK_SECTOR_BITS),
entry_location
+ (((grub_off_t) block_number * block_size)
& (GRUB_DISK_SECTOR_SIZE - 1)),
@@ -1237,8 +1110,7 @@ grub_reiserfs_read (grub_file_t file, char *buf, grub_size_t len)
switch (found.type)
{
case GRUB_REISERFS_DIRECT:
- block = (grub_fshelp_map_block (data->journal, found.block_number) *
- (block_size >> GRUB_DISK_SECTOR_BITS));
+ block = found.block_number * (block_size >> GRUB_DISK_SECTOR_BITS);
grub_dprintf ("reiserfs_blocktype", "D: %u\n", (unsigned) block);
if (initial_position < current_position + item_size)
{
@@ -1270,8 +1142,7 @@ grub_reiserfs_read (grub_file_t file, char *buf, grub_size_t len)
if (! indirect_block_ptr)
goto fail;
grub_disk_read (found.data->disk,
- grub_fshelp_map_block (data->journal, found.block_number) *
- (block_size >> GRUB_DISK_SECTOR_BITS),
+ found.block_number * (block_size >> GRUB_DISK_SECTOR_BITS),
grub_le_to_cpu16 (found.header.item_location),
item_size, (char *) indirect_block_ptr);
if (grub_errno)
@@ -1282,9 +1153,8 @@ grub_reiserfs_read (grub_file_t file, char *buf, grub_size_t len)
&& current_position < final_position;
indirect_block++)
{
- block = (grub_fshelp_map_block (data->journal,
- grub_le_to_cpu32 (indirect_block_ptr[indirect_block])) *
- (block_size >> GRUB_DISK_SECTOR_BITS));
+ block = grub_le_to_cpu32 (indirect_block_ptr[indirect_block]) *
+ (block_size >> GRUB_DISK_SECTOR_BITS);
grub_dprintf ("reiserfs_blocktype", "I: %u\n", (unsigned) block);
if (current_position + block_size >= initial_position)
{
@@ -1383,7 +1253,6 @@ grub_reiserfs_close (grub_file_t file)
struct grub_fshelp_node *node = file->data;
struct grub_reiserfs_data *data = node->data;
- grub_free (data->journal);
grub_free (data);
grub_free (node);
#ifndef GRUB_UTIL
diff --git a/include/grub/fshelp.h b/include/grub/fshelp.h
index 847f78e..698c7aa 100644
--- a/include/grub/fshelp.h
+++ b/include/grub/fshelp.h
@@ -34,34 +34,6 @@ enum grub_fshelp_filetype
GRUB_FSHELP_SYMLINK
};
-enum grub_fshelp_journal_type
- {
- GRUB_FSHELP_JOURNAL_TYPE_BLOCK,
- GRUB_FSHELP_JOURNAL_TYPE_FILE
- };
-
-#define GRUB_FSHELP_JOURNAL_UNUSED_MAPPING (grub_disk_addr_t) -1
-
-struct grub_fshelp_journal
-{
- int type;
- union
- {
- struct
- {
- grub_fshelp_node_t node;
- grub_disk_addr_t (*get_block) (grub_fshelp_node_t node, grub_disk_addr_t block);
- };
- grub_disk_addr_t blkno;
- };
- int first_block;
- int last_block;
- int start_block;
- int num_mappings;
- grub_disk_addr_t mapping[0];
-};
-typedef struct grub_fshelp_journal *grub_fshelp_journal_t;
-
/* Lookup the node PATH. The node ROOTNODE describes the root of the
directory tree. The node found is returned in FOUNDNODE, which is
either a ROOTNODE or a new malloc'ed node. ITERATE_DIR is used to
@@ -84,15 +56,6 @@ EXPORT_FUNC(grub_fshelp_find_file) (const char *path,
enum grub_fshelp_filetype expect);
-/* Read LEN bytes from the block BLOCK on disk DISK into the buffer BUF,
- beginning with the block POS. Apply mappings from LOG. The blocks
- have a size of LOG2BLOCKSIZE (in log2). */
-grub_err_t
-EXPORT_FUNC(grub_fshelp_read) (grub_disk_t disk, grub_fshelp_journal_t log,
- grub_disk_addr_t block, grub_off_t pos,
- grub_size_t len, char *buf, int log2blocksize);
-
-
/* Read LEN bytes from the file NODE on disk DISK into the buffer BUF,
beginning with the block POS. READ_HOOK should be set before
reading a block from the file. GET_BLOCK is used to translate file
@@ -112,7 +75,4 @@ unsigned int
EXPORT_FUNC(grub_fshelp_log2blksize) (unsigned int blksize,
unsigned int *pow);
-grub_disk_addr_t
-EXPORT_FUNC(grub_fshelp_map_block) (grub_fshelp_journal_t log, grub_disk_addr_t block);
-
#endif /* ! GRUB_FSHELP_HEADER */
_______________________________________________
Grub-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/grub-devel