diff options
author | Miao Xie <miaoxie@huawei.com> | 2017-08-06 07:00:49 +0200 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2017-08-06 07:00:49 +0200 |
commit | c03b45b853f5829816d871283c792e7527a7ded1 (patch) | |
tree | c2d6203d6cf6e923292ea60ca17b15385b47d79e /fs/ext4/ioctl.c | |
parent | ext4: cleanup ext4_expand_extra_isize_ea() (diff) | |
download | linux-c03b45b853f5829816d871283c792e7527a7ded1.tar.xz linux-c03b45b853f5829816d871283c792e7527a7ded1.zip |
ext4, project: expand inode extra size if possible
When upgrading from old format, try to set project id
to old file first time, it will return EOVERFLOW, but if
that file is dirtied(touch etc), changing project id will
be allowed, this might be confusing for users, we could
try to expand @i_extra_isize here too.
Reported-by: Zhang Yi <yi.zhang@huawei.com>
Signed-off-by: Miao Xie <miaoxie@huawei.com>
Signed-off-by: Wang Shilong <wshilong@ddn.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to '')
-rw-r--r-- | fs/ext4/ioctl.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c index 4f4a8391585c..afb66d4ab5cf 100644 --- a/fs/ext4/ioctl.c +++ b/fs/ext4/ioctl.c @@ -349,11 +349,14 @@ static int ext4_ioctl_setproject(struct file *filp, __u32 projid) raw_inode = ext4_raw_inode(&iloc); if (!EXT4_FITS_IN_INODE(raw_inode, ei, i_projid)) { - err = -EOVERFLOW; + err = ext4_expand_extra_isize(inode, + EXT4_SB(sb)->s_want_extra_isize, + &iloc); + if (err) + goto out_unlock; + } else { brelse(iloc.bh); - goto out_unlock; } - brelse(iloc.bh); dquot_initialize(inode); |