diff options
Diffstat (limited to 'fs/ext4/ioctl.c')
-rw-r--r-- | fs/ext4/ioctl.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c index 42dc83fb247a..91e75f7a9e73 100644 --- a/fs/ext4/ioctl.c +++ b/fs/ext4/ioctl.c | |||
@@ -48,8 +48,7 @@ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
48 | if (err) | 48 | if (err) |
49 | return err; | 49 | return err; |
50 | 50 | ||
51 | if (!S_ISDIR(inode->i_mode)) | 51 | flags = ext4_mask_flags(inode->i_mode, flags); |
52 | flags &= ~EXT4_DIRSYNC_FL; | ||
53 | 52 | ||
54 | err = -EPERM; | 53 | err = -EPERM; |
55 | mutex_lock(&inode->i_mutex); | 54 | mutex_lock(&inode->i_mutex); |
@@ -263,6 +262,20 @@ setversion_out: | |||
263 | return err; | 262 | return err; |
264 | } | 263 | } |
265 | 264 | ||
265 | case EXT4_IOC_ALLOC_DA_BLKS: | ||
266 | { | ||
267 | int err; | ||
268 | if (!is_owner_or_cap(inode)) | ||
269 | return -EACCES; | ||
270 | |||
271 | err = mnt_want_write(filp->f_path.mnt); | ||
272 | if (err) | ||
273 | return err; | ||
274 | err = ext4_alloc_da_blocks(inode); | ||
275 | mnt_drop_write(filp->f_path.mnt); | ||
276 | return err; | ||
277 | } | ||
278 | |||
266 | default: | 279 | default: |
267 | return -ENOTTY; | 280 | return -ENOTTY; |
268 | } | 281 | } |