#include "ext4_config.h"
#include "ext4_types.h"
#include "ext4_fs.h"
+#include "ext4_super.h"
#include "ext4_errno.h"
#include "ext4_blockdev.h"
#include "ext4_crc32c.h"
#include <string.h>
+int jbd_inode_bmap(struct jbd_fs *jbd_fs,
+ ext4_lblk_t iblock,
+ ext4_fsblk_t *fblock);
+
+int jbd_sb_write(struct jbd_fs *jbd_fs, struct jbd_sb *s)
+{
+ int rc;
+ struct ext4_fs *fs = jbd_fs->inode_ref.fs;
+ uint64_t offset;
+ ext4_fsblk_t fblock;
+ rc = jbd_inode_bmap(jbd_fs, 0, &fblock);
+ if (rc != EOK)
+ return rc;
+
+ offset = fblock * ext4_sb_get_block_size(&fs->sb);
+ return ext4_block_writebytes(fs->bdev, offset, s,
+ EXT4_SUPERBLOCK_SIZE);
+}
+
+int jbd_sb_read(struct jbd_fs *jbd_fs, struct ext4_sblock *s)
+{
+ int rc;
+ struct ext4_fs *fs = jbd_fs->inode_ref.fs;
+ uint64_t offset;
+ ext4_fsblk_t fblock;
+ rc = jbd_inode_bmap(jbd_fs, 0, &fblock);
+ if (rc != EOK)
+ return rc;
+
+ offset = fblock * ext4_sb_get_block_size(&fs->sb);
+ return ext4_block_readbytes(fs->bdev, offset, s,
+ EXT4_SUPERBLOCK_SIZE);
+}
+
int jbd_get_fs(struct ext4_fs *fs,
struct jbd_fs *jbd_fs)
{
/* 0x0400 */
};
+#define JBD_SUPERBLOCK_SIZE sizeof(struct jbd_sb)
+
#define JBD_HAS_COMPAT_FEATURE(jsb,mask) \
((jsb)->header.blocktype >= to_be32(2) && \
((jsb)->feature_compat & to_be32((mask))))