summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorngkaho1234 <ngkaho1234@gmail.com>2015-10-06 00:16:09 +0800
committerngkaho1234 <ngkaho1234@gmail.com>2015-10-06 00:16:09 +0800
commita1504e63d4fd0852c4203f43a1bcb4fb7d425aa2 (patch)
tree844f7c1bbad3f1c74f40da8a9cddccf2ab68e3bb
parent15ace36d9b3bcb9699b5aed7196916de8694de6c (diff)
FIX: in-inode EA entries not having their e_value_offs set correctly.
-rw-r--r--lwext4/ext4.c16
-rw-r--r--lwext4/ext4_xattr.c3
2 files changed, 10 insertions, 9 deletions
diff --git a/lwext4/ext4.c b/lwext4/ext4.c
index 8b13cc9..9ffffb3 100644
--- a/lwext4/ext4.c
+++ b/lwext4/ext4.c
@@ -739,17 +739,17 @@ static int ext4_generic_open2(ext4_file *f, const char *path, int flags,
private_ret = ext4_fs_get_xattr_ref(&f->mp->fs, &ref,
&xattr_ref);
if (private_ret == EOK) {
-#define EXT4_XATTR_TEST_DATA_SIZE 1024
+#define EXT4_XATTR_TEST_DATA_SIZE 20
#define EXT4_XATTR_TEST_NAME "bad_boy"
static char test_data[EXT4_XATTR_TEST_DATA_SIZE] = {'a'};
ext4_dmask_set(EXT4_DEBUG_ALL);
- /*ext4_fs_set_xattr(&xattr_ref,*/
- /*EXT4_XATTR_INDEX_USER,*/
- /*EXT4_XATTR_TEST_NAME,*/
- /*strlen(EXT4_XATTR_TEST_NAME),*/
- /*test_data,*/
- /*EXT4_XATTR_TEST_DATA_SIZE,*/
- /*0);*/
+ ext4_fs_set_xattr(&xattr_ref,
+ EXT4_XATTR_INDEX_USER,
+ EXT4_XATTR_TEST_NAME,
+ strlen(EXT4_XATTR_TEST_NAME),
+ test_data,
+ EXT4_XATTR_TEST_DATA_SIZE,
+ 0);
ext4_fs_put_xattr_ref(&xattr_ref);
}
}
diff --git a/lwext4/ext4_xattr.c b/lwext4/ext4_xattr.c
index 2a4b12f..f43d5a4 100644
--- a/lwext4/ext4_xattr.c
+++ b/lwext4/ext4_xattr.c
@@ -629,7 +629,8 @@ ext4_xattr_write_to_disk(struct ext4_xattr_ref *xattr_ref)
entry->e_name_len = to_le32(item->name_len);
entry->e_name_index = item->name_index;
entry->e_value_offs =
- (char *)ibody_data - (char *)ibody_header;
+ (char *)ibody_data -
+ (char *)EXT4_XATTR_IFIRST(ibody_header);
entry->e_value_block = 0;
entry->e_value_size = item->data_size;
memcpy(EXT4_XATTR_NAME(entry), item->name, item->name_len);