Skip to content

Commit 2e6c97e

Browse files
author
Jan Kara
committed
reiserfs: Handle error from dquot_initialize()
dquot_initialize() can now return error. Handle it where possible. Signed-off-by: Jan Kara <jack@suse.com>
1 parent 9c89fe0 commit 2e6c97e

File tree

2 files changed

+53
-17
lines changed

2 files changed

+53
-17
lines changed

fs/reiserfs/inode.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3319,8 +3319,11 @@ int reiserfs_setattr(struct dentry *dentry, struct iattr *attr)
33193319
/* must be turned off for recursive notify_change calls */
33203320
ia_valid = attr->ia_valid &= ~(ATTR_KILL_SUID|ATTR_KILL_SGID);
33213321

3322-
if (is_quota_modification(inode, attr))
3323-
dquot_initialize(inode);
3322+
if (is_quota_modification(inode, attr)) {
3323+
error = dquot_initialize(inode);
3324+
if (error)
3325+
return error;
3326+
}
33243327
reiserfs_write_lock(inode->i_sb);
33253328
if (attr->ia_valid & ATTR_SIZE) {
33263329
/*

fs/reiserfs/namei.c

Lines changed: 48 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -613,8 +613,7 @@ static int new_inode_init(struct inode *inode, struct inode *dir, umode_t mode)
613613
* we have to set uid and gid here
614614
*/
615615
inode_init_owner(inode, dir, mode);
616-
dquot_initialize(inode);
617-
return 0;
616+
return dquot_initialize(inode);
618617
}
619618

620619
static int reiserfs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
@@ -633,12 +632,18 @@ static int reiserfs_create(struct inode *dir, struct dentry *dentry, umode_t mod
633632
struct reiserfs_transaction_handle th;
634633
struct reiserfs_security_handle security;
635634

636-
dquot_initialize(dir);
635+
retval = dquot_initialize(dir);
636+
if (retval)
637+
return retval;
637638

638639
if (!(inode = new_inode(dir->i_sb))) {
639640
return -ENOMEM;
640641
}
641-
new_inode_init(inode, dir, mode);
642+
retval = new_inode_init(inode, dir, mode);
643+
if (retval) {
644+
drop_new_inode(inode);
645+
return retval;
646+
}
642647

643648
jbegin_count += reiserfs_cache_default_acl(dir);
644649
retval = reiserfs_security_init(dir, inode, &dentry->d_name, &security);
@@ -710,12 +715,18 @@ static int reiserfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode
710715
if (!new_valid_dev(rdev))
711716
return -EINVAL;
712717

713-
dquot_initialize(dir);
718+
retval = dquot_initialize(dir);
719+
if (retval)
720+
return retval;
714721

715722
if (!(inode = new_inode(dir->i_sb))) {
716723
return -ENOMEM;
717724
}
718-
new_inode_init(inode, dir, mode);
725+
retval = new_inode_init(inode, dir, mode);
726+
if (retval) {
727+
drop_new_inode(inode);
728+
return retval;
729+
}
719730

720731
jbegin_count += reiserfs_cache_default_acl(dir);
721732
retval = reiserfs_security_init(dir, inode, &dentry->d_name, &security);
@@ -787,7 +798,9 @@ static int reiserfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode
787798
2 * (REISERFS_QUOTA_INIT_BLOCKS(dir->i_sb) +
788799
REISERFS_QUOTA_TRANS_BLOCKS(dir->i_sb));
789800

790-
dquot_initialize(dir);
801+
retval = dquot_initialize(dir);
802+
if (retval)
803+
return retval;
791804

792805
#ifdef DISPLACE_NEW_PACKING_LOCALITIES
793806
/*
@@ -800,7 +813,11 @@ static int reiserfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode
800813
if (!(inode = new_inode(dir->i_sb))) {
801814
return -ENOMEM;
802815
}
803-
new_inode_init(inode, dir, mode);
816+
retval = new_inode_init(inode, dir, mode);
817+
if (retval) {
818+
drop_new_inode(inode);
819+
return retval;
820+
}
804821

805822
jbegin_count += reiserfs_cache_default_acl(dir);
806823
retval = reiserfs_security_init(dir, inode, &dentry->d_name, &security);
@@ -899,7 +916,9 @@ static int reiserfs_rmdir(struct inode *dir, struct dentry *dentry)
899916
JOURNAL_PER_BALANCE_CNT * 2 + 2 +
900917
4 * REISERFS_QUOTA_TRANS_BLOCKS(dir->i_sb);
901918

902-
dquot_initialize(dir);
919+
retval = dquot_initialize(dir);
920+
if (retval)
921+
return retval;
903922

904923
reiserfs_write_lock(dir->i_sb);
905924
retval = journal_begin(&th, dir->i_sb, jbegin_count);
@@ -985,7 +1004,9 @@ static int reiserfs_unlink(struct inode *dir, struct dentry *dentry)
9851004
int jbegin_count;
9861005
unsigned long savelink;
9871006

988-
dquot_initialize(dir);
1007+
retval = dquot_initialize(dir);
1008+
if (retval)
1009+
return retval;
9891010

9901011
inode = d_inode(dentry);
9911012

@@ -1095,12 +1116,18 @@ static int reiserfs_symlink(struct inode *parent_dir,
10951116
2 * (REISERFS_QUOTA_INIT_BLOCKS(parent_dir->i_sb) +
10961117
REISERFS_QUOTA_TRANS_BLOCKS(parent_dir->i_sb));
10971118

1098-
dquot_initialize(parent_dir);
1119+
retval = dquot_initialize(parent_dir);
1120+
if (retval)
1121+
return retval;
10991122

11001123
if (!(inode = new_inode(parent_dir->i_sb))) {
11011124
return -ENOMEM;
11021125
}
1103-
new_inode_init(inode, parent_dir, mode);
1126+
retval = new_inode_init(inode, parent_dir, mode);
1127+
if (retval) {
1128+
drop_new_inode(inode);
1129+
return retval;
1130+
}
11041131

11051132
retval = reiserfs_security_init(parent_dir, inode, &dentry->d_name,
11061133
&security);
@@ -1184,7 +1211,9 @@ static int reiserfs_link(struct dentry *old_dentry, struct inode *dir,
11841211
JOURNAL_PER_BALANCE_CNT * 3 +
11851212
2 * REISERFS_QUOTA_TRANS_BLOCKS(dir->i_sb);
11861213

1187-
dquot_initialize(dir);
1214+
retval = dquot_initialize(dir);
1215+
if (retval)
1216+
return retval;
11881217

11891218
reiserfs_write_lock(dir->i_sb);
11901219
if (inode->i_nlink >= REISERFS_LINK_MAX) {
@@ -1308,8 +1337,12 @@ static int reiserfs_rename(struct inode *old_dir, struct dentry *old_dentry,
13081337
JOURNAL_PER_BALANCE_CNT * 3 + 5 +
13091338
4 * REISERFS_QUOTA_TRANS_BLOCKS(old_dir->i_sb);
13101339

1311-
dquot_initialize(old_dir);
1312-
dquot_initialize(new_dir);
1340+
retval = dquot_initialize(old_dir);
1341+
if (retval)
1342+
return retval;
1343+
retval = dquot_initialize(new_dir);
1344+
if (retval)
1345+
return retval;
13131346

13141347
old_inode = d_inode(old_dentry);
13151348
new_dentry_inode = d_inode(new_dentry);

0 commit comments

Comments
 (0)