]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.fixes/ocfs2-use-xs-bucket-to-set-xattr-value-outside.patch
Imported linux-2.6.27.39 suse/xen patches.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.fixes / ocfs2-use-xs-bucket-to-set-xattr-value-outside.patch
diff --git a/src/patches/suse-2.6.27.31/patches.fixes/ocfs2-use-xs-bucket-to-set-xattr-value-outside.patch b/src/patches/suse-2.6.27.31/patches.fixes/ocfs2-use-xs-bucket-to-set-xattr-value-outside.patch
deleted file mode 100644 (file)
index 10048a6..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-From: Tao Ma <tao.ma@oracle.com>
-Date: Thu, 12 Mar 2009 08:37:34 +0800
-Subject: [PATCH] ocfs2: Use xs->bucket to set xattr value outside
-Patch-mainline: 2.6.29
-
-A long time ago, xs->base is allocated a 4K size and all the contents
-in the bucket are copied to the it. Now we use ocfs2_xattr_bucket to
-abstract xattr bucket and xs->base is initialized to the start of the
-bu_bhs[0]. So xs->base + offset will overflow when the value root is
-stored outside the first block.
-
-Then why we can survive the xattr test by now? It is because we always
-read the bucket contiguously now and kernel mm allocate continguous
-memory for us. We are lucky, but we should fix it. So just get the
-right value root as other callers do.
-
-Signed-off-by: Tao Ma <tao.ma@oracle.com>
-Acked-by: Joel Becker <joel.becker@oracle.com>
-Signed-off-by: Mark Fasheh <mfasheh@suse.com>
----
- fs/ocfs2/xattr.c |   26 ++++++++++++++++++++------
- 1 files changed, 20 insertions(+), 6 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
-@@ -4649,19 +4649,33 @@ static int ocfs2_xattr_bucket_set_value_
-                                               char *val,
-                                               int value_len)
- {
--      int offset;
-+      int ret, offset, block_off;
-       struct ocfs2_xattr_value_root *xv;
-       struct ocfs2_xattr_entry *xe = xs->here;
-+      struct ocfs2_xattr_header *xh = bucket_xh(xs->bucket);
-+      void *base;
-       BUG_ON(!xs->base || !xe || ocfs2_xattr_is_local(xe));
--      offset = le16_to_cpu(xe->xe_name_offset) +
--               OCFS2_XATTR_SIZE(xe->xe_name_len);
-+      ret = ocfs2_xattr_bucket_get_name_value(inode, xh,
-+                                              xe - xh->xh_entries,
-+                                              &block_off,
-+                                              &offset);
-+      if (ret) {
-+              mlog_errno(ret);
-+              goto out;
-+      }
--      xv = (struct ocfs2_xattr_value_root *)(xs->base + offset);
-+      base = bucket_block(xs->bucket, block_off);
-+      xv = (struct ocfs2_xattr_value_root *)(base + offset +
-+               OCFS2_XATTR_SIZE(xe->xe_name_len));
--      return __ocfs2_xattr_set_value_outside(inode, handle,
--                                             xv, val, value_len);
-+      ret = __ocfs2_xattr_set_value_outside(inode, handle,
-+                                            xv, val, value_len);
-+      if (ret)
-+              mlog_errno(ret);
-+out:
-+      return ret;
- }
- static int ocfs2_rm_xattr_cluster(struct inode *inode,