Skip to content

Commit a7cdade

Browse files
author
Jan Kara
committed
ext4: Handle error from dquot_initialize()
dquot_initialize() can now return error. Handle it where possible. Acked-by: Theodore Ts'o <tytso@mit.edu> Signed-off-by: Jan Kara <jack@suse.com>
1 parent c2edb30 commit a7cdade

File tree

3 files changed

+56
-20
lines changed

3 files changed

+56
-20
lines changed

fs/ext4/ialloc.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -721,7 +721,7 @@ struct inode *__ext4_new_inode(handle_t *handle, struct inode *dir,
721721
struct ext4_group_desc *gdp = NULL;
722722
struct ext4_inode_info *ei;
723723
struct ext4_sb_info *sbi;
724-
int ret2, err = 0;
724+
int ret2, err;
725725
struct inode *ret;
726726
ext4_group_t i;
727727
ext4_group_t flex_group;
@@ -769,7 +769,9 @@ struct inode *__ext4_new_inode(handle_t *handle, struct inode *dir,
769769
inode->i_gid = dir->i_gid;
770770
} else
771771
inode_init_owner(inode, dir, mode);
772-
dquot_initialize(inode);
772+
err = dquot_initialize(inode);
773+
if (err)
774+
goto out;
773775

774776
if (!goal)
775777
goal = sbi->s_inode_goal;

fs/ext4/inode.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4661,8 +4661,11 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr)
46614661
if (error)
46624662
return error;
46634663

4664-
if (is_quota_modification(inode, attr))
4665-
dquot_initialize(inode);
4664+
if (is_quota_modification(inode, attr)) {
4665+
error = dquot_initialize(inode);
4666+
if (error)
4667+
return error;
4668+
}
46664669
if ((ia_valid & ATTR_UID && !uid_eq(attr->ia_uid, inode->i_uid)) ||
46674670
(ia_valid & ATTR_GID && !gid_eq(attr->ia_gid, inode->i_gid))) {
46684671
handle_t *handle;

fs/ext4/namei.c

Lines changed: 47 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2436,7 +2436,9 @@ static int ext4_create(struct inode *dir, struct dentry *dentry, umode_t mode,
24362436
struct inode *inode;
24372437
int err, credits, retries = 0;
24382438

2439-
dquot_initialize(dir);
2439+
err = dquot_initialize(dir);
2440+
if (err)
2441+
return err;
24402442

24412443
credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
24422444
EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3);
@@ -2470,7 +2472,9 @@ static int ext4_mknod(struct inode *dir, struct dentry *dentry,
24702472
if (!new_valid_dev(rdev))
24712473
return -EINVAL;
24722474

2473-
dquot_initialize(dir);
2475+
err = dquot_initialize(dir);
2476+
if (err)
2477+
return err;
24742478

24752479
credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
24762480
EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3);
@@ -2499,7 +2503,9 @@ static int ext4_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode)
24992503
struct inode *inode;
25002504
int err, retries = 0;
25012505

2502-
dquot_initialize(dir);
2506+
err = dquot_initialize(dir);
2507+
if (err)
2508+
return err;
25032509

25042510
retry:
25052511
inode = ext4_new_inode_start_handle(dir, mode,
@@ -2612,7 +2618,9 @@ static int ext4_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
26122618
if (EXT4_DIR_LINK_MAX(dir))
26132619
return -EMLINK;
26142620

2615-
dquot_initialize(dir);
2621+
err = dquot_initialize(dir);
2622+
if (err)
2623+
return err;
26162624

26172625
credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
26182626
EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3);
@@ -2910,8 +2918,12 @@ static int ext4_rmdir(struct inode *dir, struct dentry *dentry)
29102918

29112919
/* Initialize quotas before so that eventual writes go in
29122920
* separate transaction */
2913-
dquot_initialize(dir);
2914-
dquot_initialize(d_inode(dentry));
2921+
retval = dquot_initialize(dir);
2922+
if (retval)
2923+
return retval;
2924+
retval = dquot_initialize(d_inode(dentry));
2925+
if (retval)
2926+
return retval;
29152927

29162928
retval = -ENOENT;
29172929
bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL);
@@ -2980,8 +2992,12 @@ static int ext4_unlink(struct inode *dir, struct dentry *dentry)
29802992
trace_ext4_unlink_enter(dir, dentry);
29812993
/* Initialize quotas before so that eventual writes go
29822994
* in separate transaction */
2983-
dquot_initialize(dir);
2984-
dquot_initialize(d_inode(dentry));
2995+
retval = dquot_initialize(dir);
2996+
if (retval)
2997+
return retval;
2998+
retval = dquot_initialize(d_inode(dentry));
2999+
if (retval)
3000+
return retval;
29853001

29863002
retval = -ENOENT;
29873003
bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL);
@@ -3066,7 +3082,9 @@ static int ext4_symlink(struct inode *dir,
30663082
goto err_free_sd;
30673083
}
30683084

3069-
dquot_initialize(dir);
3085+
err = dquot_initialize(dir);
3086+
if (err)
3087+
return err;
30703088

30713089
if ((disk_link.len > EXT4_N_BLOCKS * 4)) {
30723090
/*
@@ -3197,7 +3215,9 @@ static int ext4_link(struct dentry *old_dentry,
31973215
if (ext4_encrypted_inode(dir) &&
31983216
!ext4_is_child_context_consistent_with_parent(dir, inode))
31993217
return -EPERM;
3200-
dquot_initialize(dir);
3218+
err = dquot_initialize(dir);
3219+
if (err)
3220+
return err;
32013221

32023222
retry:
32033223
handle = ext4_journal_start(dir, EXT4_HT_DIR,
@@ -3476,13 +3496,20 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry,
34763496
int credits;
34773497
u8 old_file_type;
34783498

3479-
dquot_initialize(old.dir);
3480-
dquot_initialize(new.dir);
3499+
retval = dquot_initialize(old.dir);
3500+
if (retval)
3501+
return retval;
3502+
retval = dquot_initialize(new.dir);
3503+
if (retval)
3504+
return retval;
34813505

34823506
/* Initialize quotas before so that eventual writes go
34833507
* in separate transaction */
3484-
if (new.inode)
3485-
dquot_initialize(new.inode);
3508+
if (new.inode) {
3509+
retval = dquot_initialize(new.inode);
3510+
if (retval)
3511+
return retval;
3512+
}
34863513

34873514
old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL);
34883515
if (IS_ERR(old.bh))
@@ -3678,8 +3705,12 @@ static int ext4_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
36783705
new.inode)))
36793706
return -EPERM;
36803707

3681-
dquot_initialize(old.dir);
3682-
dquot_initialize(new.dir);
3708+
retval = dquot_initialize(old.dir);
3709+
if (retval)
3710+
return retval;
3711+
retval = dquot_initialize(new.dir);
3712+
if (retval)
3713+
return retval;
36833714

36843715
old.bh = ext4_find_entry(old.dir, &old.dentry->d_name,
36853716
&old.de, &old.inlined);

0 commit comments

Comments
 (0)