Skip to content

Commit c2edb30

Browse files
author
Jan Kara
committed
ext2: Handle error from dquot_initalize()
dquot_initialize() can now return error. Handle it where possible. Signed-off-by: Jan Kara <[email protected]>
1 parent 6184fc0 commit c2edb30

File tree

3 files changed

+43
-15
lines changed

3 files changed

+43
-15
lines changed

fs/ext2/ialloc.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,10 @@ struct inode *ext2_new_inode(struct inode *dir, umode_t mode,
577577
goto fail;
578578
}
579579

580-
dquot_initialize(inode);
580+
err = dquot_initialize(inode);
581+
if (err)
582+
goto fail_drop;
583+
581584
err = dquot_alloc_inode(inode);
582585
if (err)
583586
goto fail_drop;

fs/ext2/inode.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1552,8 +1552,11 @@ int ext2_setattr(struct dentry *dentry, struct iattr *iattr)
15521552
if (error)
15531553
return error;
15541554

1555-
if (is_quota_modification(inode, iattr))
1556-
dquot_initialize(inode);
1555+
if (is_quota_modification(inode, iattr)) {
1556+
error = dquot_initialize(inode);
1557+
if (error)
1558+
return error;
1559+
}
15571560
if ((iattr->ia_valid & ATTR_UID && !uid_eq(iattr->ia_uid, inode->i_uid)) ||
15581561
(iattr->ia_valid & ATTR_GID && !gid_eq(iattr->ia_gid, inode->i_gid))) {
15591562
error = dquot_transfer(inode, iattr);

fs/ext2/namei.c

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,11 @@ struct dentry *ext2_get_parent(struct dentry *child)
9696
static int ext2_create (struct inode * dir, struct dentry * dentry, umode_t mode, bool excl)
9797
{
9898
struct inode *inode;
99+
int err;
99100

100-
dquot_initialize(dir);
101+
err = dquot_initialize(dir);
102+
if (err)
103+
return err;
101104

102105
inode = ext2_new_inode(dir, mode, &dentry->d_name);
103106
if (IS_ERR(inode))
@@ -143,7 +146,9 @@ static int ext2_mknod (struct inode * dir, struct dentry *dentry, umode_t mode,
143146
if (!new_valid_dev(rdev))
144147
return -EINVAL;
145148

146-
dquot_initialize(dir);
149+
err = dquot_initialize(dir);
150+
if (err)
151+
return err;
147152

148153
inode = ext2_new_inode (dir, mode, &dentry->d_name);
149154
err = PTR_ERR(inode);
@@ -169,7 +174,9 @@ static int ext2_symlink (struct inode * dir, struct dentry * dentry,
169174
if (l > sb->s_blocksize)
170175
goto out;
171176

172-
dquot_initialize(dir);
177+
err = dquot_initialize(dir);
178+
if (err)
179+
goto out;
173180

174181
inode = ext2_new_inode (dir, S_IFLNK | S_IRWXUGO, &dentry->d_name);
175182
err = PTR_ERR(inode);
@@ -212,7 +219,9 @@ static int ext2_link (struct dentry * old_dentry, struct inode * dir,
212219
struct inode *inode = d_inode(old_dentry);
213220
int err;
214221

215-
dquot_initialize(dir);
222+
err = dquot_initialize(dir);
223+
if (err)
224+
return err;
216225

217226
inode->i_ctime = CURRENT_TIME_SEC;
218227
inode_inc_link_count(inode);
@@ -233,7 +242,9 @@ static int ext2_mkdir(struct inode * dir, struct dentry * dentry, umode_t mode)
233242
struct inode * inode;
234243
int err;
235244

236-
dquot_initialize(dir);
245+
err = dquot_initialize(dir);
246+
if (err)
247+
return err;
237248

238249
inode_inc_link_count(dir);
239250

@@ -279,13 +290,17 @@ static int ext2_unlink(struct inode * dir, struct dentry *dentry)
279290
struct inode * inode = d_inode(dentry);
280291
struct ext2_dir_entry_2 * de;
281292
struct page * page;
282-
int err = -ENOENT;
293+
int err;
283294

284-
dquot_initialize(dir);
295+
err = dquot_initialize(dir);
296+
if (err)
297+
goto out;
285298

286299
de = ext2_find_entry (dir, &dentry->d_name, &page);
287-
if (!de)
300+
if (!de) {
301+
err = -ENOENT;
288302
goto out;
303+
}
289304

290305
err = ext2_delete_entry (de, page);
291306
if (err)
@@ -323,14 +338,21 @@ static int ext2_rename (struct inode * old_dir, struct dentry * old_dentry,
323338
struct ext2_dir_entry_2 * dir_de = NULL;
324339
struct page * old_page;
325340
struct ext2_dir_entry_2 * old_de;
326-
int err = -ENOENT;
341+
int err;
342+
343+
err = dquot_initialize(old_dir);
344+
if (err)
345+
goto out;
327346

328-
dquot_initialize(old_dir);
329-
dquot_initialize(new_dir);
347+
err = dquot_initialize(new_dir);
348+
if (err)
349+
goto out;
330350

331351
old_de = ext2_find_entry (old_dir, &old_dentry->d_name, &old_page);
332-
if (!old_de)
352+
if (!old_de) {
353+
err = -ENOENT;
333354
goto out;
355+
}
334356

335357
if (S_ISDIR(old_inode->i_mode)) {
336358
err = -EIO;

0 commit comments

Comments
 (0)