ext4_journal: two changes below
authorngkaho1234 <ngkaho1234@gmail.com>
Sun, 15 Nov 2015 09:25:38 +0000 (17:25 +0800)
committergkostka <kostka.grzegorz@gmail.com>
Mon, 23 Nov 2015 16:05:47 +0000 (17:05 +0100)
 - Add JBD_SUPERBLOCK_SIZE macro
 - Add jbd_sb_read & jbd_sb_write

lwext4/ext4_journal.c
lwext4/ext4_types.h

index 14b741d7b5debec690ebdaf4510c91523cdf0da9..e10e2106953e2f74005bf0215a053553591b532f 100644 (file)
@@ -6,6 +6,7 @@
 #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)
 {
index 0663ddc1186fb5371212533d55e9f36a5ca55bbb..fc576db3bfeab13564f7d7b4839075c6c64a5a6d 100644 (file)
@@ -1049,6 +1049,8 @@ struct jbd_sb {
 /* 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))))