diff options
Diffstat (limited to 'fs/ext2/ialloc.c')
| -rw-r--r-- | fs/ext2/ialloc.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/fs/ext2/ialloc.c b/fs/ext2/ialloc.c index c8d07030c897..e2d6208633a7 100644 --- a/fs/ext2/ialloc.c +++ b/fs/ext2/ialloc.c | |||
| @@ -605,27 +605,28 @@ got: | |||
| 605 | insert_inode_hash(inode); | 605 | insert_inode_hash(inode); |
| 606 | 606 | ||
| 607 | if (DQUOT_ALLOC_INODE(inode)) { | 607 | if (DQUOT_ALLOC_INODE(inode)) { |
| 608 | DQUOT_DROP(inode); | ||
| 609 | err = -ENOSPC; | 608 | err = -ENOSPC; |
| 610 | goto fail2; | 609 | goto fail_drop; |
| 611 | } | 610 | } |
| 611 | |||
| 612 | err = ext2_init_acl(inode, dir); | 612 | err = ext2_init_acl(inode, dir); |
| 613 | if (err) { | 613 | if (err) |
| 614 | DQUOT_FREE_INODE(inode); | 614 | goto fail_free_drop; |
| 615 | DQUOT_DROP(inode); | 615 | |
| 616 | goto fail2; | ||
| 617 | } | ||
| 618 | err = ext2_init_security(inode,dir); | 616 | err = ext2_init_security(inode,dir); |
| 619 | if (err) { | 617 | if (err) |
| 620 | DQUOT_FREE_INODE(inode); | 618 | goto fail_free_drop; |
| 621 | goto fail2; | 619 | |
| 622 | } | ||
| 623 | mark_inode_dirty(inode); | 620 | mark_inode_dirty(inode); |
| 624 | ext2_debug("allocating inode %lu\n", inode->i_ino); | 621 | ext2_debug("allocating inode %lu\n", inode->i_ino); |
| 625 | ext2_preread_inode(inode); | 622 | ext2_preread_inode(inode); |
| 626 | return inode; | 623 | return inode; |
| 627 | 624 | ||
| 628 | fail2: | 625 | fail_free_drop: |
| 626 | DQUOT_FREE_INODE(inode); | ||
| 627 | |||
| 628 | fail_drop: | ||
| 629 | DQUOT_DROP(inode); | ||
| 629 | inode->i_flags |= S_NOQUOTA; | 630 | inode->i_flags |= S_NOQUOTA; |
| 630 | inode->i_nlink = 0; | 631 | inode->i_nlink = 0; |
| 631 | iput(inode); | 632 | iput(inode); |
