diff options
| author | gkostka <kostka.grzegorz@gmail.com> | 2015-11-30 09:38:20 +0100 |
|---|---|---|
| committer | gkostka <kostka.grzegorz@gmail.com> | 2015-11-30 09:38:20 +0100 |
| commit | 03375d29a9383d054febf5bca6ed6f50827de35f (patch) | |
| tree | 21cf5db4a8ffed5bd1c810fce0c8ca6d63c1c2e6 | |
| parent | 915c70b309ba95c4a798f9fc7234a8b843e6c90f (diff) | |
ext4: introduce ext4_recover function
| -rw-r--r-- | lwext4/ext4.c | 40 | ||||
| -rw-r--r-- | lwext4/ext4.h | 7 |
2 files changed, 36 insertions, 11 deletions
diff --git a/lwext4/ext4.c b/lwext4/ext4.c index 7e1e9f3..7bb723e 100644 --- a/lwext4/ext4.c +++ b/lwext4/ext4.c @@ -411,20 +411,10 @@ int ext4_mount(const char *dev_name, const char *mount_point) return r; } - /* TODO: journal mount checking. */ - if (ext4_sb_feature_com(&mp->fs.sb, EXT4_FCOM_HAS_JOURNAL)) { - struct jbd_fs jbd_fs = {0}; - r = jbd_get_fs(&mp->fs, &jbd_fs); - if (r != EOK) - return r; - - r = jbd_recover(&jbd_fs); - jbd_put_fs(&jbd_fs); - } - return r; } + int ext4_umount(const char *mount_point) { int i; @@ -469,6 +459,34 @@ static struct ext4_mountpoint *ext4_get_mount(const char *path) return 0; } +int ext4_recover(const char *mount_point) +{ + struct ext4_mountpoint *mp = ext4_get_mount(mount_point); + if (!mp) + return ENOENT; + + int r = ENOTSUP; + if (ext4_sb_feature_com(&mp->fs.sb, EXT4_FCOM_HAS_JOURNAL)) { + struct jbd_fs *jbd_fs = calloc(1, sizeof(struct jbd_fs)); + if (!jbd_fs) + return ENOMEM; + + + r = jbd_get_fs(&mp->fs, jbd_fs); + if (r != EOK) { + free(jbd_fs); + return r; + } + + r = jbd_recover(jbd_fs); + jbd_put_fs(jbd_fs); + free(jbd_fs); + } + + return r; +} + + int ext4_mount_point_stats(const char *mount_point, struct ext4_mount_stats *stats) { diff --git a/lwext4/ext4.h b/lwext4/ext4.h index 943fc9e..208ddb9 100644 --- a/lwext4/ext4.h +++ b/lwext4/ext4.h @@ -182,6 +182,13 @@ int ext4_mount(const char *dev_name, const char *mount_point); * @return standard error code */ int ext4_umount(const char *mount_point); + +/**@brief Journal recovery. + * @param mount_point mount point + * @warning Must be called after @ref ext4_mount + * @return standard error code */ +int ext4_recover(const char *mount_point); + /**@brief Some of the filesystem stats.*/ struct ext4_mount_stats { uint32_t inodes_count; |
