]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.suse/ocfs2-add-ocfs2_xattr_get_nolock.patch
Reenabled linux-xen, added patches for Xen Kernel Version 2.6.27.31,
[people/teissler/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.suse / ocfs2-add-ocfs2_xattr_get_nolock.patch
diff --git a/src/patches/suse-2.6.27.31/patches.suse/ocfs2-add-ocfs2_xattr_get_nolock.patch b/src/patches/suse-2.6.27.31/patches.suse/ocfs2-add-ocfs2_xattr_get_nolock.patch
new file mode 100644 (file)
index 0000000..e8e647c
--- /dev/null
@@ -0,0 +1,102 @@
+From: Tiger Yang <tiger.yang@oracle.com>
+Date: Fri, 14 Nov 2008 11:16:53 +0800
+Subject: ocfs2: add ocfs2_xattr_get_nolock
+Patch-mainline: 2.6.29
+
+This function does the work of ocfs2_xattr_get under an open lock.
+
+Signed-off-by: Tiger Yang <tiger.yang@oracle.com>
+Signed-off-by: Mark Fasheh <mfasheh@suse.com>
+---
+ fs/ocfs2/xattr.c |   40 ++++++++++++++++++++++++++++------------
+ fs/ocfs2/xattr.h |    2 ++
+ 2 files changed, 30 insertions(+), 12 deletions(-)
+
+diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
+index 2cab0d6..ba9b870 100644
+--- a/fs/ocfs2/xattr.c
++++ b/fs/ocfs2/xattr.c
+@@ -925,12 +925,8 @@ cleanup:
+       return ret;
+ }
+-/* ocfs2_xattr_get()
+- *
+- * Copy an extended attribute into the buffer provided.
+- * Buffer is NULL to compute the size of buffer required.
+- */
+-static int ocfs2_xattr_get(struct inode *inode,
++int ocfs2_xattr_get_nolock(struct inode *inode,
++                         struct buffer_head *di_bh,
+                          int name_index,
+                          const char *name,
+                          void *buffer,
+@@ -938,7 +934,6 @@ static int ocfs2_xattr_get(struct inode *inode,
+ {
+       int ret;
+       struct ocfs2_dinode *di = NULL;
+-      struct buffer_head *di_bh = NULL;
+       struct ocfs2_inode_info *oi = OCFS2_I(inode);
+       struct ocfs2_xattr_search xis = {
+               .not_found = -ENODATA,
+@@ -953,11 +948,6 @@ static int ocfs2_xattr_get(struct inode *inode,
+       if (!(oi->ip_dyn_features & OCFS2_HAS_XATTR_FL))
+               ret = -ENODATA;
+-      ret = ocfs2_inode_lock(inode, &di_bh, 0);
+-      if (ret < 0) {
+-              mlog_errno(ret);
+-              return ret;
+-      }
+       xis.inode_bh = xbs.inode_bh = di_bh;
+       di = (struct ocfs2_dinode *)di_bh->b_data;
+@@ -968,6 +958,32 @@ static int ocfs2_xattr_get(struct inode *inode,
+               ret = ocfs2_xattr_block_get(inode, name_index, name, buffer,
+                                           buffer_size, &xbs);
+       up_read(&oi->ip_xattr_sem);
++
++      return ret;
++}
++
++/* ocfs2_xattr_get()
++ *
++ * Copy an extended attribute into the buffer provided.
++ * Buffer is NULL to compute the size of buffer required.
++ */
++static int ocfs2_xattr_get(struct inode *inode,
++                         int name_index,
++                         const char *name,
++                         void *buffer,
++                         size_t buffer_size)
++{
++      int ret;
++      struct buffer_head *di_bh = NULL;
++
++      ret = ocfs2_inode_lock(inode, &di_bh, 0);
++      if (ret < 0) {
++              mlog_errno(ret);
++              return ret;
++      }
++      ret = ocfs2_xattr_get_nolock(inode, di_bh, name_index,
++                                   name, buffer, buffer_size);
++
+       ocfs2_inode_unlock(inode, 0);
+       brelse(di_bh);
+diff --git a/fs/ocfs2/xattr.h b/fs/ocfs2/xattr.h
+index 188ef6b..86aa10f 100644
+--- a/fs/ocfs2/xattr.h
++++ b/fs/ocfs2/xattr.h
+@@ -43,6 +43,8 @@ extern struct xattr_handler ocfs2_xattr_security_handler;
+ extern struct xattr_handler *ocfs2_xattr_handlers[];
+ ssize_t ocfs2_listxattr(struct dentry *, char *, size_t);
++int ocfs2_xattr_get_nolock(struct inode *, struct buffer_head *, int,
++                         const char *, void *, size_t);
+ int ocfs2_xattr_set(struct inode *, int, const char *, const void *,
+                   size_t, int);
+ int ocfs2_xattr_set_handle(handle_t *, struct inode *, struct buffer_head *,
+-- 
+1.5.6
+