]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.fixes/ocfs2-set-gap-to-seperate-entry-and-value-when-xatt.patch
Move xen patchset to new version's subdir.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.fixes / ocfs2-set-gap-to-seperate-entry-and-value-when-xatt.patch
diff --git a/src/patches/suse-2.6.27.31/patches.fixes/ocfs2-set-gap-to-seperate-entry-and-value-when-xatt.patch b/src/patches/suse-2.6.27.31/patches.fixes/ocfs2-set-gap-to-seperate-entry-and-value-when-xatt.patch
new file mode 100644 (file)
index 0000000..a1ed935
--- /dev/null
@@ -0,0 +1,85 @@
+From: Tiger Yang <tiger.yang@oracle.com>
+Date: Fri, 20 Feb 2009 11:11:50 +0800
+Subject: [PATCH] ocfs2: set gap to seperate entry and value when xattr in bucket
+Patch-mainline: 2.6.29
+
+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>
+---
+ fs/ocfs2/xattr.c |   18 ++++++++++--------
+ 1 files changed, 10 insertions(+), 8 deletions(-)
+
+Index: linux-2.6.27-sle11_ocfs2_update2/fs/ocfs2/xattr.c
+===================================================================
+--- linux-2.6.27-sle11_ocfs2_update2.orig/fs/ocfs2/xattr.c
++++ linux-2.6.27-sle11_ocfs2_update2/fs/ocfs2/xattr.c
+@@ -81,13 +81,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),
+@@ -1411,7 +1412,7 @@ static int ocfs2_xattr_set_entry(struct
+               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;
+@@ -2101,7 +2102,7 @@ static int ocfs2_xattr_can_be_in_inode(s
+               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;
+@@ -4919,8 +4920,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",
+@@ -4953,7 +4954,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.
+@@ -4986,7 +4987,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;