diff options
| -rw-r--r-- | fs/ext3/ialloc.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/fs/ext3/ialloc.c b/fs/ext3/ialloc.c index 0d0e97ed3ff6..498021eb88fb 100644 --- a/fs/ext3/ialloc.c +++ b/fs/ext3/ialloc.c | |||
| @@ -538,16 +538,13 @@ got: | |||
| 538 | if (S_ISDIR(mode)) | 538 | if (S_ISDIR(mode)) |
| 539 | percpu_counter_inc(&sbi->s_dirs_counter); | 539 | percpu_counter_inc(&sbi->s_dirs_counter); |
| 540 | 540 | ||
| 541 | inode->i_uid = current_fsuid(); | 541 | |
| 542 | if (test_opt (sb, GRPID)) | 542 | if (test_opt(sb, GRPID)) { |
| 543 | inode->i_gid = dir->i_gid; | 543 | inode->i_mode = mode; |
| 544 | else if (dir->i_mode & S_ISGID) { | 544 | inode->i_uid = current_fsuid(); |
| 545 | inode->i_gid = dir->i_gid; | 545 | inode->i_gid = dir->i_gid; |
| 546 | if (S_ISDIR(mode)) | ||
| 547 | mode |= S_ISGID; | ||
| 548 | } else | 546 | } else |
| 549 | inode->i_gid = current_fsgid(); | 547 | inode_init_owner(inode, dir, mode); |
| 550 | inode->i_mode = mode; | ||
| 551 | 548 | ||
| 552 | inode->i_ino = ino; | 549 | inode->i_ino = ino; |
| 553 | /* This is the optimal IO size (for stat), not the fs block size */ | 550 | /* This is the optimal IO size (for stat), not the fs block size */ |
