ext4_xattr: Changes to EA metadata handling macros
authorKaho Ng <ngkaho1234@gmail.com>
Thu, 12 May 2016 14:38:59 +0000 (22:38 +0800)
committerKaho Ng <ngkaho1234@gmail.com>
Fri, 13 May 2016 13:20:12 +0000 (21:20 +0800)
 - Move them from include/ext4_types.h to include/ext4_xattr.h
 - Use ext4_inode_get_extra_isize to better handle extra_isize field
   of inodes.

include/ext4_types.h
include/ext4_xattr.h
src/ext4_xattr.c

index 33137ba2f62cc3c999df392272ef239c28ae688e..a7170a7fecc66e247c017b3f8ed8987d943da900 100644 (file)
@@ -786,39 +786,6 @@ struct ext4_xattr_entry {
 
 #define EXT4_GOOD_OLD_INODE_SIZE       128
 
-#define EXT4_XATTR_PAD_BITS            2
-#define EXT4_XATTR_PAD         (1<<EXT4_XATTR_PAD_BITS)
-#define EXT4_XATTR_ROUND               (EXT4_XATTR_PAD-1)
-#define EXT4_XATTR_LEN(name_len) \
-       (((name_len) + EXT4_XATTR_ROUND + \
-       sizeof(struct ext4_xattr_entry)) & ~EXT4_XATTR_ROUND)
-#define EXT4_XATTR_NEXT(entry) \
-       ((struct ext4_xattr_entry *)( \
-        (char *)(entry) + EXT4_XATTR_LEN((entry)->e_name_len)))
-#define EXT4_XATTR_SIZE(size) \
-       (((size) + EXT4_XATTR_ROUND) & ~EXT4_XATTR_ROUND)
-#define EXT4_XATTR_NAME(entry) \
-       ((char *)((entry) + 1))
-
-#define EXT4_XATTR_IHDR(raw_inode) \
-       ((struct ext4_xattr_ibody_header *) \
-               ((char *)raw_inode + \
-               EXT4_GOOD_OLD_INODE_SIZE + \
-               (raw_inode)->extra_isize))
-#define EXT4_XATTR_IFIRST(hdr) \
-       ((struct ext4_xattr_entry *)((hdr)+1))
-
-#define EXT4_XATTR_BHDR(block) \
-       ((struct ext4_xattr_header *)((block)->data))
-#define EXT4_XATTR_ENTRY(ptr) \
-       ((struct ext4_xattr_entry *)(ptr))
-#define EXT4_XATTR_BFIRST(block) \
-       EXT4_XATTR_ENTRY(EXT4_XATTR_BHDR(block)+1)
-#define EXT4_XATTR_IS_LAST_ENTRY(entry) \
-       (*(uint32_t *)(entry) == 0)
-
-#define EXT4_ZERO_XATTR_VALUE ((void *)-1)
-
 /*****************************************************************************/
 
 /*
index 65eb7688baa50858bf6dc1677304565092f346c8..097fabf8dcbaeab7f6ed9d9e81136048c3efa1fc 100644 (file)
@@ -43,6 +43,7 @@ extern "C" {
 
 #include "ext4_config.h"
 #include "ext4_types.h"
+#include "ext4_inode.h"
 #include "misc/tree.h"
 #include "misc/queue.h"
 
@@ -74,6 +75,40 @@ struct ext4_xattr_ref {
                ext4_xattr_item) root;
 };
 
+#define EXT4_XATTR_PAD_BITS            2
+#define EXT4_XATTR_PAD         (1<<EXT4_XATTR_PAD_BITS)
+#define EXT4_XATTR_ROUND               (EXT4_XATTR_PAD-1)
+#define EXT4_XATTR_LEN(name_len) \
+       (((name_len) + EXT4_XATTR_ROUND + \
+       sizeof(struct ext4_xattr_entry)) & ~EXT4_XATTR_ROUND)
+#define EXT4_XATTR_NEXT(entry) \
+       ((struct ext4_xattr_entry *)( \
+        (char *)(entry) + EXT4_XATTR_LEN((entry)->e_name_len)))
+#define EXT4_XATTR_SIZE(size) \
+       (((size) + EXT4_XATTR_ROUND) & ~EXT4_XATTR_ROUND)
+#define EXT4_XATTR_NAME(entry) \
+       ((char *)((entry) + 1))
+
+#define EXT4_XATTR_IHDR(sb, raw_inode) \
+       ((struct ext4_xattr_ibody_header *) \
+               ((char *)raw_inode + \
+               EXT4_GOOD_OLD_INODE_SIZE + \
+               ext4_inode_get_extra_isize(sb, raw_inode)))
+#define EXT4_XATTR_IFIRST(hdr) \
+       ((struct ext4_xattr_entry *)((hdr)+1))
+
+#define EXT4_XATTR_BHDR(block) \
+       ((struct ext4_xattr_header *)((block)->data))
+#define EXT4_XATTR_ENTRY(ptr) \
+       ((struct ext4_xattr_entry *)(ptr))
+#define EXT4_XATTR_BFIRST(block) \
+       EXT4_XATTR_ENTRY(EXT4_XATTR_BHDR(block)+1)
+#define EXT4_XATTR_IS_LAST_ENTRY(entry) \
+       (*(uint32_t *)(entry) == 0)
+
+#define EXT4_ZERO_XATTR_VALUE ((void *)-1)
+
+
 #define EXT4_XATTR_ITERATE_CONT 0
 #define EXT4_XATTR_ITERATE_STOP 1
 #define EXT4_XATTR_ITERATE_PAUSE 2
index f177eaaa5aa081b6d20d6c6f84c4bea340fb3ce5..e1c92742c4248b4b25a8ed0dc4ec7311217d3951 100644 (file)
@@ -272,7 +272,8 @@ static void *ext4_xattr_entry_data(struct ext4_xattr_ref *xattr_ref,
                struct ext4_xattr_entry *first_entry;
                int16_t inode_size =
                    ext4_get16(&xattr_ref->fs->sb, inode_size);
-               header = EXT4_XATTR_IHDR(xattr_ref->inode_ref->inode);
+               header = EXT4_XATTR_IHDR(&xattr_ref->fs->sb,
+                               xattr_ref->inode_ref->inode);
                first_entry = EXT4_XATTR_IFIRST(header);
 
                ret = ((char *)first_entry + to_le16(entry->e_value_offs));
@@ -346,7 +347,8 @@ static int ext4_xattr_inode_fetch(struct ext4_xattr_ref *xattr_ref)
        uint16_t extra_isize = ext4_inode_get_extra_isize(&xattr_ref->fs->sb,
                                        xattr_ref->inode_ref->inode);
 
-       header = EXT4_XATTR_IHDR(xattr_ref->inode_ref->inode);
+       header = EXT4_XATTR_IHDR(&xattr_ref->fs->sb,
+                                xattr_ref->inode_ref->inode);
        entry = EXT4_XATTR_IFIRST(header);
 
        size_rem = inode_size - EXT4_GOOD_OLD_INODE_SIZE -
@@ -635,7 +637,8 @@ static int ext4_xattr_write_to_disk(struct ext4_xattr_ref *xattr_ref)
        inode_size_rem = ext4_xattr_inode_space(xattr_ref);
        block_size_rem = ext4_xattr_block_space(xattr_ref);
        if (inode_size_rem > sizeof(struct ext4_xattr_ibody_header)) {
-               ibody_header = EXT4_XATTR_IHDR(xattr_ref->inode_ref->inode);
+               ibody_header = EXT4_XATTR_IHDR(&xattr_ref->fs->sb,
+                                              xattr_ref->inode_ref->inode);
                entry = EXT4_XATTR_IFIRST(ibody_header);
        }