if (retval)
goto out;
} else {
- int sz = EXT2_I_SIZE(inode);
+ size_t sz = EXT2_I_SIZE(inode);
if (sz > sizeof(inode->i_block))
sz = sizeof(inode->i_block);
- fprintf(out, "%sFast link dest: \"%.*s\"\n", prefix, sz,
+ fprintf(out, "%sFast link dest: \"%.*s\"\n", prefix, (int) sz,
(char *)inode->i_block);
}
out:
extern void do_features(int argc, char **argv);
extern void do_bmap(int argc, char **argv);
extern void do_imap(int argc, char **argv);
+extern void do_idump(int argc, char *argv[]);
extern void do_set_current_time(int argc, char **argv);
extern void do_supported_features(int argc, char **argv);
extern void do_punch(int argc, char **argv);
extern void do_freefrag(int argc, char **argv);
extern void do_filefrag(int argc, char *argv[]);
+/* do_journal.c */
+
+extern void do_journal_write(int argc, char *argv[]);
+extern void do_journal_open(int argc, char *argv[]);
+extern void do_journal_close(int argc, char *argv[]);
+extern void do_journal_run(int argc, char *argv[]);
+
/* quota.c */
extern void do_list_quota(int argc, char *argv[]);
extern void do_get_quota(int argc, char *argv[]);
#endif
#include "debugfs.h"
-#include "jfs_user.h"
#include "ext2fs/kernel-jbd.h"
-
-/* journal.c */
-errcode_t ext2fs_open_journal(ext2_filsys fs, journal_t **j);
-errcode_t ext2fs_close_journal(ext2_filsys fs, journal_t **j);
-errcode_t ext2fs_run_ext3_journal(ext2_filsys *fs);
-void jbd2_commit_block_csum_set(journal_t *j, struct buffer_head *bh);
-void jbd2_revoke_csum_set(journal_t *j, struct buffer_head *bh);
-void jbd2_descr_block_csum_set(journal_t *j, struct buffer_head *bh);
-void jbd2_block_tag_csum_set(journal_t *j, journal_block_tag_t *tag,
- struct buffer_head *bh, __u32 sequence);
+#include "journal.h"
#undef DEBUG
return nr;
}
-errcode_t journal_find_head(journal_t *journal)
+static errcode_t journal_find_head(journal_t *journal)
{
unsigned int next_commit_ID;
blk64_t next_log_block, head_block;
if (((offset + rec_len) > fs->blocksize) ||
(rec_len < 8) ||
((rec_len % 4) != 0) ||
- (thislen + 8 > rec_len)) {
+ ((unsigned) thislen + 8 > rec_len)) {
fprintf(pager, "Corrupted directory block (%llu)!\n",
blk);
break;
fprintf(pager, "\n");
for (i=0; i < count; i++) {
- int hash, block;
+ unsigned int hashval, block;
- hash = ext2fs_le32_to_cpu(ent[i].hash);
+ hashval = ext2fs_le32_to_cpu(ent[i].hash);
block = ext2fs_le32_to_cpu(ent[i].block);
fprintf(pager, "Entry #%d: Hash 0x%08x, block %u\n", i,
- i ? hash : 0, block);
+ i ? hashval : 0, block);
if (level)
htree_dump_int_block(fs, ino, inode, rootnode,
block, buf, level-1);
#endif
#define E2FSCK_INCLUDE_INLINE_FUNCS
-#include "jfs_user.h"
#include "uuid/uuid.h"
+#include "journal.h"
#ifdef CONFIG_JBD_DEBUG /* Enabled by configure --enable-jfs-debug */
static int bh_count = 0;
return 0;
}
-void ext2fs_journal_release(ext2_filsys fs, journal_t *journal,
+static void ext2fs_journal_release(ext2_filsys fs, journal_t *journal,
int reset, int drop)
{
journal_superblock_t *jsb;
* This function makes sure that the superblock fields regarding the
* journal are consistent.
*/
-errcode_t ext2fs_check_ext3_journal(ext2_filsys fs)
+static errcode_t ext2fs_check_ext3_journal(ext2_filsys fs)
{
struct ext2_super_block *sb = fs->super;
journal_t *journal;
--- /dev/null
+/*
+ * journal.h
+ *
+ * Copyright (C) 2000 Andreas Dilger
+ * Copyright (C) 2000 Theodore Ts'o
+ *
+ * Parts of the code are based on fs/jfs/journal.c by Stephen C. Tweedie
+ * Copyright (C) 1999 Red Hat Software
+ *
+ * This file may be redistributed under the terms of the
+ * GNU General Public License version 2 or at your discretion
+ * any later version.
+ */
+
+#include "jfs_user.h"
+
+/* journal.c */
+errcode_t ext2fs_open_journal(ext2_filsys fs, journal_t **j);
+errcode_t ext2fs_close_journal(ext2_filsys fs, journal_t **j);
+errcode_t ext2fs_run_ext3_journal(ext2_filsys *fs);
+void jbd2_commit_block_csum_set(journal_t *j, struct buffer_head *bh);
+void jbd2_revoke_csum_set(journal_t *j, struct buffer_head *bh);
+void jbd2_descr_block_csum_set(journal_t *j, struct buffer_head *bh);
+void jbd2_block_tag_csum_set(journal_t *j, journal_block_tag_t *tag,
+ struct buffer_head *bh, __u32 sequence);
}
}
+static inline size_t journal_super_tag_bytes(journal_superblock_t *jsb)
+{
+ size_t sz;
+
+ if (JSB_HAS_INCOMPAT_FEATURE(jsb, JFS_FEATURE_INCOMPAT_CSUM_V3))
+ return sizeof(journal_block_tag3_t);
+
+ sz = sizeof(journal_block_tag_t);
+
+ if (JSB_HAS_INCOMPAT_FEATURE(jsb, JFS_FEATURE_INCOMPAT_CSUM_V2))
+ sz += sizeof(__u16);
+
+ if (JSB_HAS_INCOMPAT_FEATURE(jsb, JFS_FEATURE_INCOMPAT_64BIT))
+ return sz;
+
+ return sz - sizeof(__u32);
+}
static void dump_descriptor_block(FILE *out_file,
struct journal_source *source,
#define JSB_HAS_INCOMPAT_FEATURE(jsb, mask) \
((jsb)->s_header.h_blocktype == ext2fs_cpu_to_be32(JFS_SUPERBLOCK_V2) && \
((jsb)->s_feature_incompat & ext2fs_cpu_to_be32((mask))))
-static inline size_t journal_super_tag_bytes(journal_superblock_t *jsb)
-{
- size_t sz;
-
- if (JSB_HAS_INCOMPAT_FEATURE(jsb, JFS_FEATURE_INCOMPAT_CSUM_V3))
- return sizeof(journal_block_tag3_t);
-
- sz = sizeof(journal_block_tag_t);
-
- if (JSB_HAS_INCOMPAT_FEATURE(jsb, JFS_FEATURE_INCOMPAT_CSUM_V2))
- sz += sizeof(__u16);
-
- if (JSB_HAS_INCOMPAT_FEATURE(jsb, JFS_FEATURE_INCOMPAT_64BIT))
- return sz;
-
- return sz - sizeof(__u32);
-}
#else /* !DEBUGFS */
extern e2fsck_t e2fsck_global_ctx; /* Try your very best not to use this! */