header->h_hash = to_le32(hash);
}
+#if CONFIG_META_CSUM_ENABLE
static uint32_t
ext4_xattr_block_checksum(struct ext4_inode_ref *inode_ref,
ext4_fsblk_t blocknr,
}
return checksum;
}
+#else
+#define ext4_xattr_block_checksum(...) 0
+#endif
static void
ext4_xattr_set_block_checksum(struct ext4_inode_ref *inode_ref,
- ext4_fsblk_t blocknr,
+ ext4_fsblk_t blocknr __unused,
struct ext4_xattr_header *header)
{
struct ext4_sblock *sb = &inode_ref->fs->sb;
struct ext4_xattr_item *b)
{
int result;
+ if (a->in_inode && !b->in_inode)
+ return -1;
+
+ if (!a->in_inode && b->in_inode)
+ return 1;
+
result = a->name_index - b->name_index;
if (result)
return result;
memset(&item->node, 0, sizeof(item->node));
memcpy(item->name, name, name_len);
+ if (name_index == EXT4_XATTR_INDEX_SYSTEM &&
+ name_len == 4 &&
+ !memcmp(name, "data", 4))
+ item->in_inode = true;
+ else
+ item->in_inode = false;
+
return item;
}
.name = (char *)name, /*RB_FIND - won't touch this string*/
.name_len = name_len,
};
+ if (name_index == EXT4_XATTR_INDEX_SYSTEM &&
+ name_len == 4 &&
+ !memcmp(name, "data", 4))
+ tmp.in_inode = true;
return RB_FIND(ext4_xattr_tree, &xattr_ref->root, &tmp);
}
static const struct xattr_prefix prefix_tbl[] = {
{"user.", EXT4_XATTR_INDEX_USER},
- {"system.", EXT4_XATTR_INDEX_SYSTEM},
{"system.posix_acl_access", EXT4_XATTR_INDEX_POSIX_ACL_ACCESS},
{"system.posix_acl_default", EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT},
+ {"trusted.", EXT4_XATTR_INDEX_TRUSTED},
+ {"security.", EXT4_XATTR_INDEX_SECURITY},
+ {"system.", EXT4_XATTR_INDEX_SYSTEM},
+ {"system.richacl", EXT4_XATTR_INDEX_RICHACL},
{NULL, 0},
};