diff options
author | Tiger Yang <tiger.yang@oracle.com> | 2009-02-19 22:11:50 -0500 |
---|---|---|
committer | Mark Fasheh <mfasheh@suse.com> | 2009-02-26 14:51:11 -0500 |
commit | 4442f518269c6b3686fcbcadad22dc4475309b16 (patch) | |
tree | 5d054d3e44dc95d6ce48709894fe5f2449fb6c77 /fs | |
parent | c8b9cf9a7cd25ba65166116d0a958f0bc709f0a7 (diff) |
ocfs2: set gap to seperate entry and value when xattr in bucket
This patch set a gap (4 bytes) between xattr entry and
name/value when xattr in bucket. This gap use to seperate
entry and name/value when a bucket is full. It had already
been set when xattr in inode/block.
Signed-off-by: Tiger Yang <tiger.yang@oracle.com>
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ocfs2/xattr.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c index a7c167905c56..4ddd788add67 100644 --- a/fs/ocfs2/xattr.c +++ b/fs/ocfs2/xattr.c | |||
@@ -82,13 +82,14 @@ struct ocfs2_xattr_set_ctxt { | |||
82 | 82 | ||
83 | #define OCFS2_XATTR_ROOT_SIZE (sizeof(struct ocfs2_xattr_def_value_root)) | 83 | #define OCFS2_XATTR_ROOT_SIZE (sizeof(struct ocfs2_xattr_def_value_root)) |
84 | #define OCFS2_XATTR_INLINE_SIZE 80 | 84 | #define OCFS2_XATTR_INLINE_SIZE 80 |
85 | #define OCFS2_XATTR_HEADER_GAP 4 | ||
85 | #define OCFS2_XATTR_FREE_IN_IBODY (OCFS2_MIN_XATTR_INLINE_SIZE \ | 86 | #define OCFS2_XATTR_FREE_IN_IBODY (OCFS2_MIN_XATTR_INLINE_SIZE \ |
86 | - sizeof(struct ocfs2_xattr_header) \ | 87 | - sizeof(struct ocfs2_xattr_header) \ |
87 | - sizeof(__u32)) | 88 | - OCFS2_XATTR_HEADER_GAP) |
88 | #define OCFS2_XATTR_FREE_IN_BLOCK(ptr) ((ptr)->i_sb->s_blocksize \ | 89 | #define OCFS2_XATTR_FREE_IN_BLOCK(ptr) ((ptr)->i_sb->s_blocksize \ |
89 | - sizeof(struct ocfs2_xattr_block) \ | 90 | - sizeof(struct ocfs2_xattr_block) \ |
90 | - sizeof(struct ocfs2_xattr_header) \ | 91 | - sizeof(struct ocfs2_xattr_header) \ |
91 | - sizeof(__u32)) | 92 | - OCFS2_XATTR_HEADER_GAP) |
92 | 93 | ||
93 | static struct ocfs2_xattr_def_value_root def_xv = { | 94 | static struct ocfs2_xattr_def_value_root def_xv = { |
94 | .xv.xr_list.l_count = cpu_to_le16(1), | 95 | .xv.xr_list.l_count = cpu_to_le16(1), |
@@ -1511,7 +1512,7 @@ static int ocfs2_xattr_set_entry(struct inode *inode, | |||
1511 | last += 1; | 1512 | last += 1; |
1512 | } | 1513 | } |
1513 | 1514 | ||
1514 | free = min_offs - ((void *)last - xs->base) - sizeof(__u32); | 1515 | free = min_offs - ((void *)last - xs->base) - OCFS2_XATTR_HEADER_GAP; |
1515 | if (free < 0) | 1516 | if (free < 0) |
1516 | return -EIO; | 1517 | return -EIO; |
1517 | 1518 | ||
@@ -2194,7 +2195,7 @@ static int ocfs2_xattr_can_be_in_inode(struct inode *inode, | |||
2194 | last += 1; | 2195 | last += 1; |
2195 | } | 2196 | } |
2196 | 2197 | ||
2197 | free = min_offs - ((void *)last - xs->base) - sizeof(__u32); | 2198 | free = min_offs - ((void *)last - xs->base) - OCFS2_XATTR_HEADER_GAP; |
2198 | if (free < 0) | 2199 | if (free < 0) |
2199 | return 0; | 2200 | return 0; |
2200 | 2201 | ||
@@ -5065,8 +5066,8 @@ try_again: | |||
5065 | xh_free_start = le16_to_cpu(xh->xh_free_start); | 5066 | xh_free_start = le16_to_cpu(xh->xh_free_start); |
5066 | header_size = sizeof(struct ocfs2_xattr_header) + | 5067 | header_size = sizeof(struct ocfs2_xattr_header) + |
5067 | count * sizeof(struct ocfs2_xattr_entry); | 5068 | count * sizeof(struct ocfs2_xattr_entry); |
5068 | max_free = OCFS2_XATTR_BUCKET_SIZE - | 5069 | max_free = OCFS2_XATTR_BUCKET_SIZE - header_size - |
5069 | le16_to_cpu(xh->xh_name_value_len) - header_size; | 5070 | le16_to_cpu(xh->xh_name_value_len) - OCFS2_XATTR_HEADER_GAP; |
5070 | 5071 | ||
5071 | mlog_bug_on_msg(header_size > blocksize, "bucket %llu has header size " | 5072 | mlog_bug_on_msg(header_size > blocksize, "bucket %llu has header size " |
5072 | "of %u which exceed block size\n", | 5073 | "of %u which exceed block size\n", |
@@ -5099,7 +5100,7 @@ try_again: | |||
5099 | need = 0; | 5100 | need = 0; |
5100 | } | 5101 | } |
5101 | 5102 | ||
5102 | free = xh_free_start - header_size; | 5103 | free = xh_free_start - header_size - OCFS2_XATTR_HEADER_GAP; |
5103 | /* | 5104 | /* |
5104 | * We need to make sure the new name/value pair | 5105 | * We need to make sure the new name/value pair |
5105 | * can exist in the same block. | 5106 | * can exist in the same block. |
@@ -5132,7 +5133,8 @@ try_again: | |||
5132 | } | 5133 | } |
5133 | 5134 | ||
5134 | xh_free_start = le16_to_cpu(xh->xh_free_start); | 5135 | xh_free_start = le16_to_cpu(xh->xh_free_start); |
5135 | free = xh_free_start - header_size; | 5136 | free = xh_free_start - header_size |
5137 | - OCFS2_XATTR_HEADER_GAP; | ||
5136 | if (xh_free_start % blocksize < need) | 5138 | if (xh_free_start % blocksize < need) |
5137 | free -= xh_free_start % blocksize; | 5139 | free -= xh_free_start % blocksize; |
5138 | 5140 | ||