summaryrefslogtreecommitdiffstats
path: root/fs/ext4/ioctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ext4/ioctl.c')
-rw-r--r--fs/ext4/ioctl.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c
index 721f4d33e148..a07b7bc0856a 100644
--- a/fs/ext4/ioctl.c
+++ b/fs/ext4/ioctl.c
@@ -83,17 +83,8 @@ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
83 if (!capable(CAP_SYS_RESOURCE)) 83 if (!capable(CAP_SYS_RESOURCE))
84 goto flags_out; 84 goto flags_out;
85 } 85 }
86 if (oldflags & EXT4_EXTENTS_FL) { 86 if ((flags ^ oldflags) & EXT4_EXTENTS_FL)
87 /* We don't support clearning extent flags */
88 if (!(flags & EXT4_EXTENTS_FL)) {
89 err = -EOPNOTSUPP;
90 goto flags_out;
91 }
92 } else if (flags & EXT4_EXTENTS_FL) {
93 /* migrate the file */
94 migrate = 1; 87 migrate = 1;
95 flags &= ~EXT4_EXTENTS_FL;
96 }
97 88
98 if (flags & EXT4_EOFBLOCKS_FL) { 89 if (flags & EXT4_EOFBLOCKS_FL) {
99 /* we don't support adding EOFBLOCKS flag */ 90 /* we don't support adding EOFBLOCKS flag */
@@ -137,8 +128,13 @@ flags_err:
137 err = ext4_change_inode_journal_flag(inode, jflag); 128 err = ext4_change_inode_journal_flag(inode, jflag);
138 if (err) 129 if (err)
139 goto flags_out; 130 goto flags_out;
140 if (migrate) 131 if (migrate) {
141 err = ext4_ext_migrate(inode); 132 if (flags & EXT4_EXTENTS_FL)
133 err = ext4_ext_migrate(inode);
134 else
135 err = ext4_ind_migrate(inode);
136 }
137
142flags_out: 138flags_out:
143 mutex_unlock(&inode->i_mutex); 139 mutex_unlock(&inode->i_mutex);
144 mnt_drop_write_file(filp); 140 mnt_drop_write_file(filp);