diff options
Diffstat (limited to 'fs/reiserfs/namei.c')
-rw-r--r-- | fs/reiserfs/namei.c | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/fs/reiserfs/namei.c b/fs/reiserfs/namei.c index d9c1c8bd2950..cb1a9e977907 100644 --- a/fs/reiserfs/namei.c +++ b/fs/reiserfs/namei.c | |||
@@ -598,6 +598,7 @@ static int reiserfs_create(struct inode *dir, struct dentry *dentry, int mode, | |||
598 | 2 * (REISERFS_QUOTA_INIT_BLOCKS(dir->i_sb) + | 598 | 2 * (REISERFS_QUOTA_INIT_BLOCKS(dir->i_sb) + |
599 | REISERFS_QUOTA_TRANS_BLOCKS(dir->i_sb)); | 599 | REISERFS_QUOTA_TRANS_BLOCKS(dir->i_sb)); |
600 | struct reiserfs_transaction_handle th; | 600 | struct reiserfs_transaction_handle th; |
601 | struct reiserfs_security_handle security; | ||
601 | 602 | ||
602 | if (!(inode = new_inode(dir->i_sb))) { | 603 | if (!(inode = new_inode(dir->i_sb))) { |
603 | return -ENOMEM; | 604 | return -ENOMEM; |
@@ -605,6 +606,12 @@ static int reiserfs_create(struct inode *dir, struct dentry *dentry, int mode, | |||
605 | new_inode_init(inode, dir, mode); | 606 | new_inode_init(inode, dir, mode); |
606 | 607 | ||
607 | jbegin_count += reiserfs_cache_default_acl(dir); | 608 | jbegin_count += reiserfs_cache_default_acl(dir); |
609 | retval = reiserfs_security_init(dir, inode, &security); | ||
610 | if (retval < 0) { | ||
611 | drop_new_inode(inode); | ||
612 | return retval; | ||
613 | } | ||
614 | jbegin_count += retval; | ||
608 | reiserfs_write_lock(dir->i_sb); | 615 | reiserfs_write_lock(dir->i_sb); |
609 | 616 | ||
610 | retval = journal_begin(&th, dir->i_sb, jbegin_count); | 617 | retval = journal_begin(&th, dir->i_sb, jbegin_count); |
@@ -615,7 +622,7 @@ static int reiserfs_create(struct inode *dir, struct dentry *dentry, int mode, | |||
615 | 622 | ||
616 | retval = | 623 | retval = |
617 | reiserfs_new_inode(&th, dir, mode, NULL, 0 /*i_size */ , dentry, | 624 | reiserfs_new_inode(&th, dir, mode, NULL, 0 /*i_size */ , dentry, |
618 | inode); | 625 | inode, &security); |
619 | if (retval) | 626 | if (retval) |
620 | goto out_failed; | 627 | goto out_failed; |
621 | 628 | ||
@@ -655,6 +662,7 @@ static int reiserfs_mknod(struct inode *dir, struct dentry *dentry, int mode, | |||
655 | int retval; | 662 | int retval; |
656 | struct inode *inode; | 663 | struct inode *inode; |
657 | struct reiserfs_transaction_handle th; | 664 | struct reiserfs_transaction_handle th; |
665 | struct reiserfs_security_handle security; | ||
658 | /* We need blocks for transaction + (user+group)*(quotas for new inode + update of quota for directory owner) */ | 666 | /* We need blocks for transaction + (user+group)*(quotas for new inode + update of quota for directory owner) */ |
659 | int jbegin_count = | 667 | int jbegin_count = |
660 | JOURNAL_PER_BALANCE_CNT * 3 + | 668 | JOURNAL_PER_BALANCE_CNT * 3 + |
@@ -670,6 +678,12 @@ static int reiserfs_mknod(struct inode *dir, struct dentry *dentry, int mode, | |||
670 | new_inode_init(inode, dir, mode); | 678 | new_inode_init(inode, dir, mode); |
671 | 679 | ||
672 | jbegin_count += reiserfs_cache_default_acl(dir); | 680 | jbegin_count += reiserfs_cache_default_acl(dir); |
681 | retval = reiserfs_security_init(dir, inode, &security); | ||
682 | if (retval < 0) { | ||
683 | drop_new_inode(inode); | ||
684 | return retval; | ||
685 | } | ||
686 | jbegin_count += retval; | ||
673 | reiserfs_write_lock(dir->i_sb); | 687 | reiserfs_write_lock(dir->i_sb); |
674 | 688 | ||
675 | retval = journal_begin(&th, dir->i_sb, jbegin_count); | 689 | retval = journal_begin(&th, dir->i_sb, jbegin_count); |
@@ -680,7 +694,7 @@ static int reiserfs_mknod(struct inode *dir, struct dentry *dentry, int mode, | |||
680 | 694 | ||
681 | retval = | 695 | retval = |
682 | reiserfs_new_inode(&th, dir, mode, NULL, 0 /*i_size */ , dentry, | 696 | reiserfs_new_inode(&th, dir, mode, NULL, 0 /*i_size */ , dentry, |
683 | inode); | 697 | inode, &security); |
684 | if (retval) { | 698 | if (retval) { |
685 | goto out_failed; | 699 | goto out_failed; |
686 | } | 700 | } |
@@ -723,6 +737,7 @@ static int reiserfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
723 | int retval; | 737 | int retval; |
724 | struct inode *inode; | 738 | struct inode *inode; |
725 | struct reiserfs_transaction_handle th; | 739 | struct reiserfs_transaction_handle th; |
740 | struct reiserfs_security_handle security; | ||
726 | /* We need blocks for transaction + (user+group)*(quotas for new inode + update of quota for directory owner) */ | 741 | /* We need blocks for transaction + (user+group)*(quotas for new inode + update of quota for directory owner) */ |
727 | int jbegin_count = | 742 | int jbegin_count = |
728 | JOURNAL_PER_BALANCE_CNT * 3 + | 743 | JOURNAL_PER_BALANCE_CNT * 3 + |
@@ -740,6 +755,12 @@ static int reiserfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
740 | new_inode_init(inode, dir, mode); | 755 | new_inode_init(inode, dir, mode); |
741 | 756 | ||
742 | jbegin_count += reiserfs_cache_default_acl(dir); | 757 | jbegin_count += reiserfs_cache_default_acl(dir); |
758 | retval = reiserfs_security_init(dir, inode, &security); | ||
759 | if (retval < 0) { | ||
760 | drop_new_inode(inode); | ||
761 | return retval; | ||
762 | } | ||
763 | jbegin_count += retval; | ||
743 | reiserfs_write_lock(dir->i_sb); | 764 | reiserfs_write_lock(dir->i_sb); |
744 | 765 | ||
745 | retval = journal_begin(&th, dir->i_sb, jbegin_count); | 766 | retval = journal_begin(&th, dir->i_sb, jbegin_count); |
@@ -756,7 +777,7 @@ static int reiserfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
756 | retval = reiserfs_new_inode(&th, dir, mode, NULL /*symlink */ , | 777 | retval = reiserfs_new_inode(&th, dir, mode, NULL /*symlink */ , |
757 | old_format_only(dir->i_sb) ? | 778 | old_format_only(dir->i_sb) ? |
758 | EMPTY_DIR_SIZE_V1 : EMPTY_DIR_SIZE, | 779 | EMPTY_DIR_SIZE_V1 : EMPTY_DIR_SIZE, |
759 | dentry, inode); | 780 | dentry, inode, &security); |
760 | if (retval) { | 781 | if (retval) { |
761 | dir->i_nlink--; | 782 | dir->i_nlink--; |
762 | goto out_failed; | 783 | goto out_failed; |
@@ -999,6 +1020,7 @@ static int reiserfs_symlink(struct inode *parent_dir, | |||
999 | char *name; | 1020 | char *name; |
1000 | int item_len; | 1021 | int item_len; |
1001 | struct reiserfs_transaction_handle th; | 1022 | struct reiserfs_transaction_handle th; |
1023 | struct reiserfs_security_handle security; | ||
1002 | int mode = S_IFLNK | S_IRWXUGO; | 1024 | int mode = S_IFLNK | S_IRWXUGO; |
1003 | /* We need blocks for transaction + (user+group)*(quotas for new inode + update of quota for directory owner) */ | 1025 | /* We need blocks for transaction + (user+group)*(quotas for new inode + update of quota for directory owner) */ |
1004 | int jbegin_count = | 1026 | int jbegin_count = |
@@ -1011,6 +1033,13 @@ static int reiserfs_symlink(struct inode *parent_dir, | |||
1011 | } | 1033 | } |
1012 | new_inode_init(inode, parent_dir, mode); | 1034 | new_inode_init(inode, parent_dir, mode); |
1013 | 1035 | ||
1036 | retval = reiserfs_security_init(parent_dir, inode, &security); | ||
1037 | if (retval < 0) { | ||
1038 | drop_new_inode(inode); | ||
1039 | return retval; | ||
1040 | } | ||
1041 | jbegin_count += retval; | ||
1042 | |||
1014 | reiserfs_write_lock(parent_dir->i_sb); | 1043 | reiserfs_write_lock(parent_dir->i_sb); |
1015 | item_len = ROUND_UP(strlen(symname)); | 1044 | item_len = ROUND_UP(strlen(symname)); |
1016 | if (item_len > MAX_DIRECT_ITEM_LEN(parent_dir->i_sb->s_blocksize)) { | 1045 | if (item_len > MAX_DIRECT_ITEM_LEN(parent_dir->i_sb->s_blocksize)) { |
@@ -1037,7 +1066,7 @@ static int reiserfs_symlink(struct inode *parent_dir, | |||
1037 | 1066 | ||
1038 | retval = | 1067 | retval = |
1039 | reiserfs_new_inode(&th, parent_dir, mode, name, strlen(symname), | 1068 | reiserfs_new_inode(&th, parent_dir, mode, name, strlen(symname), |
1040 | dentry, inode); | 1069 | dentry, inode, &security); |
1041 | kfree(name); | 1070 | kfree(name); |
1042 | if (retval) { /* reiserfs_new_inode iputs for us */ | 1071 | if (retval) { /* reiserfs_new_inode iputs for us */ |
1043 | goto out_failed; | 1072 | goto out_failed; |