|
@@ -538,16 +538,13 @@ got:
|
|
|
if (S_ISDIR(mode))
|
|
|
percpu_counter_inc(&sbi->s_dirs_counter);
|
|
|
|
|
|
- inode->i_uid = current_fsuid();
|
|
|
- if (test_opt (sb, GRPID))
|
|
|
- inode->i_gid = dir->i_gid;
|
|
|
- else if (dir->i_mode & S_ISGID) {
|
|
|
+
|
|
|
+ if (test_opt(sb, GRPID)) {
|
|
|
+ inode->i_mode = mode;
|
|
|
+ inode->i_uid = current_fsuid();
|
|
|
inode->i_gid = dir->i_gid;
|
|
|
- if (S_ISDIR(mode))
|
|
|
- mode |= S_ISGID;
|
|
|
} else
|
|
|
- inode->i_gid = current_fsgid();
|
|
|
- inode->i_mode = mode;
|
|
|
+ inode_init_owner(inode, dir, mode);
|
|
|
|
|
|
inode->i_ino = ino;
|
|
|
/* This is the optimal IO size (for stat), not the fs block size */
|