From: NeilBrown <neilb@cse.unsw.edu.au>

The ->getxattr op doesn't take the i_sem (see
Documentation/filesystems/Locking)

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/fs/nfsd/vfs.c |   14 +++++---------
 1 files changed, 5 insertions(+), 9 deletions(-)

diff -puN fs/nfsd/vfs.c~nfsd4-dont-take-i_sem-around-call-to-getxattr fs/nfsd/vfs.c
--- 25/fs/nfsd/vfs.c~nfsd4-dont-take-i_sem-around-call-to-getxattr	2004-09-23 22:06:17.870371912 -0700
+++ 25-akpm/fs/nfsd/vfs.c	2004-09-23 22:06:17.876371000 -0700
@@ -448,39 +448,35 @@ _get_posix_acl(struct dentry *dentry, ch
 	int buflen, error = 0;
 	struct posix_acl *pacl = NULL;
 
-	down(&inode->i_sem);
-
 	buflen = inode->i_op->getxattr(dentry, key, NULL, 0);
 	if (buflen <= 0) {
 		error = buflen < 0 ? buflen : -ENODATA;
-		goto out_sem;
+		goto out_err;
 	}
 
 	buf = kmalloc(buflen, GFP_KERNEL);
 	if (buf == NULL) {
 		error = -ENOMEM;
-		goto out_sem;
+		goto out_err;
 	}
 
 	error = -EOPNOTSUPP;
 	if (inode->i_op && inode->i_op->getxattr) {
 		error = security_inode_getxattr(dentry, key);
 		if (error)
-			goto out_sem;
+			goto out_err;
 		error = inode->i_op->getxattr(dentry, key, buf, buflen);
 	}
 	if (error < 0)
-		goto out_sem;
+		goto out_err;
 
 	error = 0;
-	up(&inode->i_sem);
 
 	pacl = posix_acl_from_xattr(buf, buflen);
  out:
 	kfree(buf);
 	return pacl;
- out_sem:
-	up(&inode->i_sem);
+ out_err:
 	pacl = ERR_PTR(error);
 	goto out;
 }
_