Displaying 5 results from an estimated 5 matches for "xh_free_start".
2009 Feb 16
3
[PATCH 0/2] ocfs2: two fixes for xattr -v2
...have fixed the problems in version 1 patches. These two patches based
on the latest main line kernel.
Thanks,
tiger
> For EAs data structure in inode/block are little different from them in
> bucket. These two patches try to make them same for the most part.
>
> The first patch set xh_free_start and xh_name_value_len when EAs in
> inode/block. xh_free_start is useful to keep the minimum offset of the
> xattr name/value. But xh_name_value_len is not very useful because we
> don't have "hole" when EAs in inode/block, we just calculate and set it
> here, maybe it...
2009 Feb 11
2
[PATCH 0/2] ocfs2: two fixes for xattr
Hi,
For EAs data structure in inode/block are little different from them in
bucket. These two patches try to make them same for the most part.
The first patch set xh_free_start and xh_name_value_len when EAs in
inode/block. xh_free_start is useful to keep the minimum offset of the
xattr name/value. But xh_name_value_len is not very useful because we
don't have "hole" when EAs in inode/block, we just calculate and set it
here, maybe it's useful for fsck...
2009 Feb 20
1
[PATCH 1/1] ocfs2: set gap to seperate entry and value when xattr in bucket
...2191,7 @@ static int ocfs2_xattr_can_be_in_inode(struct inode *inode,
last += 1;
}
- free = min_offs - ((void *)last - xs->base) - sizeof(__u32);
+ free = min_offs - ((void *)last - xs->base) - OCFS2_XATTR_HEADER_GAP;
if (free < 0)
return 0;
@@ -5060,8 +5061,8 @@ try_again:
xh_free_start = le16_to_cpu(xh->xh_free_start);
header_size = sizeof(struct ocfs2_xattr_header) +
count * sizeof(struct ocfs2_xattr_entry);
- max_free = OCFS2_XATTR_BUCKET_SIZE -
- le16_to_cpu(xh->xh_name_value_len) - header_size;
+ max_free = OCFS2_XATTR_BUCKET_SIZE - header_size -
+ le16_to_cpu(x...
2008 Oct 26
1
[PATCH 1/1] ocfs2/xattr: Proper hash collision handle in bucket division.v3
...ialized a new empty bucket here.
+ * The hash value is set as one larger than
+ * that of the last entry in the previous bucket.
+ */
+ for (i = 0; i < blk_per_bucket; i++)
+ memset(t_bhs[i]->b_data, 0, blocksize);
+
+ xh = (struct ocfs2_xattr_header *)t_bhs[0]->b_data;
+ xh->xh_free_start = cpu_to_le16(blocksize);
+ xh->xh_entries[0].xe_name_hash = xe->xe_name_hash;
+ le32_add_cpu(&xh->xh_entries[0].xe_name_hash, 1);
+
+ goto set_num_buckets;
+ }
+
/* copy the whole bucket to the new first. */
for (i = 0; i < blk_per_bucket; i++)
memcpy(t_bhs[i]->b_data,...
2008 Oct 28
14
[PATCH 0/13] ocfs2: xattr bucket API
When the extended attribute namespace grows to a b-tree, the leaf
clusters are organized by means of 'buckets'. Each bucket is 4K in
size, regardless of blocksize. Thus, a bucket may be made of more than
one block.
fs/ocfs2/xattr.c has a nice little abstraction to wrap this, struct
ocfs2_xattr_bucket. It contains a list of buffer_heads representing
these blocks, and there is even an