Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / fs / cifs / xattr.c
index c1e02ef..7754d64 100644 (file)
@@ -62,9 +62,7 @@ int cifs_removexattr(struct dentry * direntry, const char * ea_name)
        cifs_sb = CIFS_SB(sb);
        pTcon = cifs_sb->tcon;
                                                                                      
-       down(&sb->s_vfs_rename_sem);
        full_path = build_path_from_dentry(direntry);
-       up(&sb->s_vfs_rename_sem);
        if(full_path == NULL) {
                FreeXid(xid);
                return -ENOMEM;
@@ -87,8 +85,7 @@ int cifs_removexattr(struct dentry * direntry, const char * ea_name)
                        cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR);
        }
 remove_ea_exit:
-       if (full_path)
-               kfree(full_path);
+       kfree(full_path);
        FreeXid(xid);
 #endif
        return rc;
@@ -117,9 +114,7 @@ int cifs_setxattr(struct dentry * direntry, const char * ea_name,
        cifs_sb = CIFS_SB(sb);
        pTcon = cifs_sb->tcon;
 
-       down(&sb->s_vfs_rename_sem);
        full_path = build_path_from_dentry(direntry);
-       up(&sb->s_vfs_rename_sem);
        if(full_path == NULL) {
                FreeXid(xid);
                return -ENOMEM;
@@ -132,8 +127,7 @@ int cifs_setxattr(struct dentry * direntry, const char * ea_name,
                returns as xattrs */
        if(value_size > MAX_EA_VALUE_SIZE) {
                cFYI(1,("size of EA value too large"));
-               if(full_path)
-                       kfree(full_path);
+               kfree(full_path);
                FreeXid(xid);
                return -EOPNOTSUPP;
        }
@@ -195,8 +189,7 @@ int cifs_setxattr(struct dentry * direntry, const char * ea_name,
        }
 
 set_ea_exit:
-       if (full_path)
-               kfree(full_path);
+       kfree(full_path);
        FreeXid(xid);
 #endif
        return rc;
@@ -226,9 +219,7 @@ ssize_t cifs_getxattr(struct dentry * direntry, const char * ea_name,
        cifs_sb = CIFS_SB(sb);
        pTcon = cifs_sb->tcon;
 
-       down(&sb->s_vfs_rename_sem);
        full_path = build_path_from_dentry(direntry);
-       up(&sb->s_vfs_rename_sem);
        if(full_path == NULL) {
                FreeXid(xid);
                return -ENOMEM;
@@ -257,7 +248,8 @@ ssize_t cifs_getxattr(struct dentry * direntry, const char * ea_name,
                rc = CIFSSMBQueryEA(xid,pTcon,full_path,ea_name,ea_value,
                        buf_size, cifs_sb->local_nls,
                        cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR);
-       } else if(strncmp(ea_name,POSIX_ACL_XATTR_ACCESS,strlen(POSIX_ACL_XATTR_ACCESS)) == 0) {
+       } else if(strncmp(ea_name,POSIX_ACL_XATTR_ACCESS,
+                         strlen(POSIX_ACL_XATTR_ACCESS)) == 0) {
 #ifdef CONFIG_CIFS_POSIX
                if(sb->s_flags & MS_POSIXACL)
                        rc = CIFSSMBGetPosixACL(xid, pTcon, full_path,
@@ -265,10 +257,27 @@ ssize_t cifs_getxattr(struct dentry * direntry, const char * ea_name,
                                cifs_sb->local_nls,
                                cifs_sb->mnt_cifs_flags & 
                                        CIFS_MOUNT_MAP_SPECIAL_CHR);
+/*             else if(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_CIFS_ACL) {
+                       __u16 fid;
+                       int oplock = FALSE;
+                       rc = CIFSSMBOpen(xid, pTcon, full_path,
+                                        FILE_OPEN, GENERIC_READ, 0, &fid,
+                                        &oplock, NULL, cifs_sb->local_nls,
+                                        cifs_sb->mnt_cifs_flags &
+                                        CIFS_MOUNT_MAP_SPECIAL_CHR);
+                       if(rc == 0) {
+                               rc = CIFSSMBGetCIFSACL(xid, pTcon, fid,
+                                       ea_value, buf_size,
+                                       ACL_TYPE_ACCESS);
+                               CIFSSMBClose(xid, pTcon, fid)
+                       }
+               } */  /* BB enable after fixing up return data */
+                               
 #else 
                cFYI(1,("query POSIX ACL not supported yet"));
 #endif /* CONFIG_CIFS_POSIX */
-       } else if(strncmp(ea_name,POSIX_ACL_XATTR_DEFAULT,strlen(POSIX_ACL_XATTR_DEFAULT)) == 0) {
+       } else if(strncmp(ea_name,POSIX_ACL_XATTR_DEFAULT,
+                         strlen(POSIX_ACL_XATTR_DEFAULT)) == 0) {
 #ifdef CONFIG_CIFS_POSIX
                if(sb->s_flags & MS_POSIXACL)
                        rc = CIFSSMBGetPosixACL(xid, pTcon, full_path,
@@ -298,8 +307,7 @@ ssize_t cifs_getxattr(struct dentry * direntry, const char * ea_name,
                rc = -EOPNOTSUPP; 
 
 get_ea_exit:
-       if (full_path)
-               kfree(full_path);
+       kfree(full_path);
        FreeXid(xid);
 #endif
        return rc;
@@ -327,9 +335,7 @@ ssize_t cifs_listxattr(struct dentry * direntry, char * data, size_t buf_size)
        cifs_sb = CIFS_SB(sb);
        pTcon = cifs_sb->tcon;
 
-       down(&sb->s_vfs_rename_sem);
        full_path = build_path_from_dentry(direntry);
-       up(&sb->s_vfs_rename_sem);
        if(full_path == NULL) {
                FreeXid(xid);
                return -ENOMEM;
@@ -345,8 +351,7 @@ ssize_t cifs_listxattr(struct dentry * direntry, char * data, size_t buf_size)
                                cifs_sb->mnt_cifs_flags & 
                                        CIFS_MOUNT_MAP_SPECIAL_CHR);
 
-       if (full_path)
-               kfree(full_path);
+       kfree(full_path);
        FreeXid(xid);
 #endif
        return rc;