fat: remove i_alloc_sem abuse
[firefly-linux-kernel-4.4.55.git] / fs / fat / file.c
index 7257752b6d5d3f0c8c133597135cb2f92821f784..a4a3a3c06436d79293cc349187f616a3e6e79bd2 100644 (file)
@@ -102,7 +102,7 @@ static int fat_ioctl_set_attributes(struct file *file, u32 __user *user_attr)
                if (attr & ATTR_SYS)
                        inode->i_flags |= S_IMMUTABLE;
                else
-                       inode->i_flags &= S_IMMUTABLE;
+                       inode->i_flags &= ~S_IMMUTABLE;
        }
 
        fat_save_attrs(inode, attr);
@@ -429,8 +429,10 @@ int fat_setattr(struct dentry *dentry, struct iattr *attr)
        }
 
        if (attr->ia_valid & ATTR_SIZE) {
+               down_write(&MSDOS_I(inode)->truncate_lock);
                truncate_setsize(inode, attr->ia_size);
                fat_truncate_blocks(inode, attr->ia_size);
+               up_write(&MSDOS_I(inode)->truncate_lock);
        }
 
        setattr_copy(inode, attr);