|
@@ -597,27 +597,22 @@ got:
|
|
|
|
|
|
ret = inode;
|
|
ret = inode;
|
|
if(DQUOT_ALLOC_INODE(inode)) {
|
|
if(DQUOT_ALLOC_INODE(inode)) {
|
|
- DQUOT_DROP(inode);
|
|
|
|
err = -EDQUOT;
|
|
err = -EDQUOT;
|
|
- goto fail2;
|
|
|
|
|
|
+ goto fail_drop;
|
|
}
|
|
}
|
|
|
|
+
|
|
err = ext3_init_acl(handle, inode, dir);
|
|
err = ext3_init_acl(handle, inode, dir);
|
|
- if (err) {
|
|
|
|
- DQUOT_FREE_INODE(inode);
|
|
|
|
- DQUOT_DROP(inode);
|
|
|
|
- goto fail2;
|
|
|
|
- }
|
|
|
|
|
|
+ if (err)
|
|
|
|
+ goto fail_free_drop;
|
|
|
|
+
|
|
err = ext3_init_security(handle,inode, dir);
|
|
err = ext3_init_security(handle,inode, dir);
|
|
- if (err) {
|
|
|
|
- DQUOT_FREE_INODE(inode);
|
|
|
|
- goto fail2;
|
|
|
|
- }
|
|
|
|
|
|
+ if (err)
|
|
|
|
+ goto fail_free_drop;
|
|
|
|
+
|
|
err = ext3_mark_inode_dirty(handle, inode);
|
|
err = ext3_mark_inode_dirty(handle, inode);
|
|
if (err) {
|
|
if (err) {
|
|
ext3_std_error(sb, err);
|
|
ext3_std_error(sb, err);
|
|
- DQUOT_FREE_INODE(inode);
|
|
|
|
- DQUOT_DROP(inode);
|
|
|
|
- goto fail2;
|
|
|
|
|
|
+ goto fail_free_drop;
|
|
}
|
|
}
|
|
|
|
|
|
ext3_debug("allocating inode %lu\n", inode->i_ino);
|
|
ext3_debug("allocating inode %lu\n", inode->i_ino);
|
|
@@ -631,7 +626,11 @@ really_out:
|
|
brelse(bitmap_bh);
|
|
brelse(bitmap_bh);
|
|
return ret;
|
|
return ret;
|
|
|
|
|
|
-fail2:
|
|
|
|
|
|
+fail_free_drop:
|
|
|
|
+ DQUOT_FREE_INODE(inode);
|
|
|
|
+
|
|
|
|
+fail_drop:
|
|
|
|
+ DQUOT_DROP(inode);
|
|
inode->i_flags |= S_NOQUOTA;
|
|
inode->i_flags |= S_NOQUOTA;
|
|
inode->i_nlink = 0;
|
|
inode->i_nlink = 0;
|
|
iput(inode);
|
|
iput(inode);
|