|
@@ -82,13 +82,14 @@ struct ocfs2_xattr_set_ctxt {
|
|
|
|
|
|
#define OCFS2_XATTR_ROOT_SIZE (sizeof(struct ocfs2_xattr_def_value_root))
|
|
|
#define OCFS2_XATTR_INLINE_SIZE 80
|
|
|
+#define OCFS2_XATTR_HEADER_GAP 4
|
|
|
#define OCFS2_XATTR_FREE_IN_IBODY (OCFS2_MIN_XATTR_INLINE_SIZE \
|
|
|
- sizeof(struct ocfs2_xattr_header) \
|
|
|
- - sizeof(__u32))
|
|
|
+ - OCFS2_XATTR_HEADER_GAP)
|
|
|
#define OCFS2_XATTR_FREE_IN_BLOCK(ptr) ((ptr)->i_sb->s_blocksize \
|
|
|
- sizeof(struct ocfs2_xattr_block) \
|
|
|
- sizeof(struct ocfs2_xattr_header) \
|
|
|
- - sizeof(__u32))
|
|
|
+ - OCFS2_XATTR_HEADER_GAP)
|
|
|
|
|
|
static struct ocfs2_xattr_def_value_root def_xv = {
|
|
|
.xv.xr_list.l_count = cpu_to_le16(1),
|
|
@@ -1511,7 +1512,7 @@ static int ocfs2_xattr_set_entry(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 -EIO;
|
|
|
|
|
@@ -2194,7 +2195,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;
|
|
|
|
|
@@ -5065,8 +5066,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(xh->xh_name_value_len) - OCFS2_XATTR_HEADER_GAP;
|
|
|
|
|
|
mlog_bug_on_msg(header_size > blocksize, "bucket %llu has header size "
|
|
|
"of %u which exceed block size\n",
|
|
@@ -5099,7 +5100,7 @@ try_again:
|
|
|
need = 0;
|
|
|
}
|
|
|
|
|
|
- free = xh_free_start - header_size;
|
|
|
+ free = xh_free_start - header_size - OCFS2_XATTR_HEADER_GAP;
|
|
|
/*
|
|
|
* We need to make sure the new name/value pair
|
|
|
* can exist in the same block.
|
|
@@ -5132,7 +5133,8 @@ try_again:
|
|
|
}
|
|
|
|
|
|
xh_free_start = le16_to_cpu(xh->xh_free_start);
|
|
|
- free = xh_free_start - header_size;
|
|
|
+ free = xh_free_start - header_size
|
|
|
+ - OCFS2_XATTR_HEADER_GAP;
|
|
|
if (xh_free_start % blocksize < need)
|
|
|
free -= xh_free_start % blocksize;
|
|
|
|