Commit 941ba122 authored by Harshad Shirwadkar's avatar Harshad Shirwadkar Committed by Theodore Ts'o
Browse files

ext4: make fast_commit.h byte identical with e2fsprogs/fast_commit.h



This patch makes fast_commit.h byte by byte identical with
e2fsprogs/fast_commit.h. This will help us ensure that there are no
on-disk format inconsistencies between e2fsck and kernel ext4.

Signed-off-by: default avatarHarshad Shirwadkar <harshadshirwadkar@gmail.com>
Link: https://lore.kernel.org/r/20201120202232.2240293-1-harshadshirwadkar@gmail.com


Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
parent 5a150bde
Loading
Loading
Loading
Loading
+0 −38
Original line number Diff line number Diff line
@@ -1281,18 +1281,6 @@ static void ext4_fc_cleanup(journal_t *journal, int full)

/* Ext4 Replay Path Routines */

/* Get length of a particular tlv */
static inline int ext4_fc_tag_len(struct ext4_fc_tl *tl)
{
	return le16_to_cpu(tl->fc_len);
}

/* Get a pointer to "value" of a tlv */
static inline u8 *ext4_fc_tag_val(struct ext4_fc_tl *tl)
{
	return (u8 *)tl + sizeof(*tl);
}

/* Helper struct for dentry replay routines */
struct dentry_info_args {
	int parent_ino, dname_len, ino, inode_len;
@@ -1831,32 +1819,6 @@ ext4_fc_replay_del_range(struct super_block *sb, struct ext4_fc_tl *tl)
	return 0;
}

static inline const char *tag2str(u16 tag)
{
	switch (tag) {
	case EXT4_FC_TAG_LINK:
		return "TAG_ADD_ENTRY";
	case EXT4_FC_TAG_UNLINK:
		return "TAG_DEL_ENTRY";
	case EXT4_FC_TAG_ADD_RANGE:
		return "TAG_ADD_RANGE";
	case EXT4_FC_TAG_CREAT:
		return "TAG_CREAT_DENTRY";
	case EXT4_FC_TAG_DEL_RANGE:
		return "TAG_DEL_RANGE";
	case EXT4_FC_TAG_INODE:
		return "TAG_INODE";
	case EXT4_FC_TAG_PAD:
		return "TAG_PAD";
	case EXT4_FC_TAG_TAIL:
		return "TAG_TAIL";
	case EXT4_FC_TAG_HEAD:
		return "TAG_HEAD";
	default:
		return "TAG_ERROR";
	}
}

static void ext4_fc_set_bitmaps_and_counters(struct super_block *sb)
{
	struct ext4_fc_replay_state *state;
+61 −17
Original line number Diff line number Diff line
@@ -3,6 +3,11 @@
#ifndef __FAST_COMMIT_H__
#define __FAST_COMMIT_H__

/*
 * Note this file is present in e2fsprogs/lib/ext2fs/fast_commit.h and
 * linux/fs/ext4/fast_commit.h. These file should always be byte identical.
 */

/* Fast commit tags */
#define EXT4_FC_TAG_ADD_RANGE		0x0001
#define EXT4_FC_TAG_DEL_RANGE		0x0002
@@ -50,7 +55,7 @@ struct ext4_fc_del_range {
struct ext4_fc_dentry_info {
	__le32 fc_parent_ino;
	__le32 fc_ino;
	u8 fc_dname[0];
	__u8 fc_dname[0];
};

/* Value structure for EXT4_FC_TAG_INODE and EXT4_FC_TAG_INODE_PARTIAL. */
@@ -65,19 +70,6 @@ struct ext4_fc_tail {
	__le32 fc_crc;
};

/*
 * In memory list of dentry updates that are performed on the file
 * system used by fast commit code.
 */
struct ext4_fc_dentry_update {
	int fcd_op;		/* Type of update create / unlink / link */
	int fcd_parent;		/* Parent inode number */
	int fcd_ino;		/* Inode number */
	struct qstr fcd_name;	/* Dirent name */
	unsigned char fcd_iname[DNAME_INLINE_LEN];	/* Dirent name string */
	struct list_head fcd_list;
};

/*
 * Fast commit reason codes
 */
@@ -107,6 +99,20 @@ enum {
	EXT4_FC_REASON_MAX
};

#ifdef __KERNEL__
/*
 * In memory list of dentry updates that are performed on the file
 * system used by fast commit code.
 */
struct ext4_fc_dentry_update {
	int fcd_op;		/* Type of update create / unlink / link */
	int fcd_parent;		/* Parent inode number */
	int fcd_ino;		/* Inode number */
	struct qstr fcd_name;	/* Dirent name */
	unsigned char fcd_iname[DNAME_INLINE_LEN];	/* Dirent name string */
	struct list_head fcd_list;
};

struct ext4_fc_stats {
	unsigned int fc_ineligible_reason_count[EXT4_FC_REASON_MAX];
	unsigned long fc_num_commits;
@@ -145,13 +151,51 @@ struct ext4_fc_replay_state {
};

#define region_last(__region) (((__region)->lblk) + ((__region)->len) - 1)
#endif

#define fc_for_each_tl(__start, __end, __tl)				\
	for (tl = (struct ext4_fc_tl *)start;				\
		(u8 *)tl < (u8 *)end;					\
		tl = (struct ext4_fc_tl *)((u8 *)tl +			\
	for (tl = (struct ext4_fc_tl *)(__start);			\
	     (__u8 *)tl < (__u8 *)(__end);				\
		tl = (struct ext4_fc_tl *)((__u8 *)tl +			\
					sizeof(struct ext4_fc_tl) +	\
					+ le16_to_cpu(tl->fc_len)))

static inline const char *tag2str(__u16 tag)
{
	switch (tag) {
	case EXT4_FC_TAG_LINK:
		return "ADD_ENTRY";
	case EXT4_FC_TAG_UNLINK:
		return "DEL_ENTRY";
	case EXT4_FC_TAG_ADD_RANGE:
		return "ADD_RANGE";
	case EXT4_FC_TAG_CREAT:
		return "CREAT_DENTRY";
	case EXT4_FC_TAG_DEL_RANGE:
		return "DEL_RANGE";
	case EXT4_FC_TAG_INODE:
		return "INODE";
	case EXT4_FC_TAG_PAD:
		return "PAD";
	case EXT4_FC_TAG_TAIL:
		return "TAIL";
	case EXT4_FC_TAG_HEAD:
		return "HEAD";
	default:
		return "ERROR";
	}
}

/* Get length of a particular tlv */
static inline int ext4_fc_tag_len(struct ext4_fc_tl *tl)
{
	return le16_to_cpu(tl->fc_len);
}

/* Get a pointer to "value" of a tlv */
static inline __u8 *ext4_fc_tag_val(struct ext4_fc_tl *tl)
{
	return (__u8 *)tl + sizeof(*tl);
}

#endif /* __FAST_COMMIT_H__ */