6 #include "ext4_config.h"
7 #include "ext4_types.h"
9 #include "ext4_super.h"
10 #include "ext4_errno.h"
11 #include "ext4_blockdev.h"
12 #include "ext4_crc32c.h"
13 #include "ext4_debug.h"
17 int jbd_inode_bmap(struct jbd_fs *jbd_fs,
19 ext4_fsblk_t *fblock);
21 int jbd_sb_write(struct jbd_fs *jbd_fs, struct jbd_sb *s)
24 struct ext4_fs *fs = jbd_fs->inode_ref.fs;
27 rc = jbd_inode_bmap(jbd_fs, 0, &fblock);
31 offset = fblock * ext4_sb_get_block_size(&fs->sb);
32 return ext4_block_writebytes(fs->bdev, offset, s,
33 EXT4_SUPERBLOCK_SIZE);
36 int jbd_sb_read(struct jbd_fs *jbd_fs, struct jbd_sb *s)
39 struct ext4_fs *fs = jbd_fs->inode_ref.fs;
42 rc = jbd_inode_bmap(jbd_fs, 0, &fblock);
46 offset = fblock * ext4_sb_get_block_size(&fs->sb);
47 return ext4_block_readbytes(fs->bdev, offset, s,
48 EXT4_SUPERBLOCK_SIZE);
51 int jbd_get_fs(struct ext4_fs *fs,
52 struct jbd_fs *jbd_fs)
57 memset(jbd_fs, 0, sizeof(struct jbd_fs));
58 journal_ino = ext4_get32(&fs->sb, journal_inode_number);
60 rc = ext4_fs_get_inode_ref(fs,
64 memset(jbd_fs, 0, sizeof(struct jbd_fs));
67 rc = jbd_sb_read(jbd_fs, &jbd_fs->sb);
69 memset(jbd_fs, 0, sizeof(struct jbd_fs));
70 ext4_fs_put_inode_ref(&jbd_fs->inode_ref);
75 int jbd_put_fs(struct jbd_fs *jbd_fs)
78 rc = ext4_fs_put_inode_ref(&jbd_fs->inode_ref);
82 int jbd_inode_bmap(struct jbd_fs *jbd_fs,
86 int rc = ext4_fs_get_inode_data_block_index(
94 int jbd_block_get(struct jbd_fs *jbd_fs,
95 struct ext4_block *block,
98 /* TODO: journal device. */
100 ext4_lblk_t iblock = (ext4_lblk_t)fblock;
101 rc = jbd_inode_bmap(jbd_fs, iblock,
106 struct ext4_blockdev *bdev = jbd_fs->inode_ref.fs->bdev;
107 rc = ext4_block_get(bdev, block, fblock);
111 int jbd_block_get_noread(struct jbd_fs *jbd_fs,
112 struct ext4_block *block,
115 /* TODO: journal device. */
117 ext4_lblk_t iblock = (ext4_lblk_t)fblock;
118 rc = jbd_inode_bmap(jbd_fs, iblock,
123 struct ext4_blockdev *bdev = jbd_fs->inode_ref.fs->bdev;
124 rc = ext4_block_get_noread(bdev, block, fblock);
128 int jbd_block_set(struct jbd_fs *jbd_fs,
129 struct ext4_block *block)
131 return ext4_block_set(jbd_fs->inode_ref.fs->bdev,
135 int jbd_recovery(struct jbd_fs *jbd_fs)
137 struct jbd_sb *sb = &jbd_fs->sb;