linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / fs / cifs / xattr.c
index 067648b..777e336 100644 (file)
@@ -62,7 +62,9 @@ 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;
@@ -114,7 +116,9 @@ 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;
@@ -219,7 +223,9 @@ 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;
@@ -330,16 +336,14 @@ ssize_t cifs_listxattr(struct dentry * direntry, char * data, size_t buf_size)
        sb = direntry->d_inode->i_sb;
        if(sb == NULL)
                return -EIO;
+       xid = GetXid();
 
        cifs_sb = CIFS_SB(sb);
        pTcon = cifs_sb->tcon;
 
-       if(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_XATTR)
-               return -EOPNOTSUPP;
-
-       xid = GetXid();
-
+       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;