Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

hugetlbfs: switch to inode_init_owner()

... rather than open-coding it

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro 7d54fa64 1a67aafb

+31 -26
+31 -26
fs/hugetlbfs/inode.c
··· 447 447 return 0; 448 448 } 449 449 450 - static struct inode *hugetlbfs_get_inode(struct super_block *sb, uid_t uid, 451 - gid_t gid, int mode, dev_t dev) 450 + static struct inode *hugetlbfs_get_root(struct super_block *sb, 451 + struct hugetlbfs_config *config) 452 452 { 453 453 struct inode *inode; 454 454 ··· 456 456 if (inode) { 457 457 struct hugetlbfs_inode_info *info; 458 458 inode->i_ino = get_next_ino(); 459 - inode->i_mode = mode; 460 - inode->i_uid = uid; 461 - inode->i_gid = gid; 459 + inode->i_mode = S_IFDIR | config->mode; 460 + inode->i_uid = config->uid; 461 + inode->i_gid = config->gid; 462 + inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; 463 + info = HUGETLBFS_I(inode); 464 + mpol_shared_policy_init(&info->policy, NULL); 465 + inode->i_op = &hugetlbfs_dir_inode_operations; 466 + inode->i_fop = &simple_dir_operations; 467 + /* directory inodes start off with i_nlink == 2 (for "." entry) */ 468 + inc_nlink(inode); 469 + } 470 + return inode; 471 + } 472 + 473 + static struct inode *hugetlbfs_get_inode(struct super_block *sb, 474 + struct inode *dir, 475 + int mode, dev_t dev) 476 + { 477 + struct inode *inode; 478 + 479 + inode = new_inode(sb); 480 + if (inode) { 481 + struct hugetlbfs_inode_info *info; 482 + inode->i_ino = get_next_ino(); 483 + inode_init_owner(inode, dir, mode); 462 484 inode->i_mapping->a_ops = &hugetlbfs_aops; 463 485 inode->i_mapping->backing_dev_info =&hugetlbfs_backing_dev_info; 464 486 inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; ··· 526 504 { 527 505 struct inode *inode; 528 506 int error = -ENOSPC; 529 - gid_t gid; 530 507 531 - if (dir->i_mode & S_ISGID) { 532 - gid = dir->i_gid; 533 - if (S_ISDIR(mode)) 534 - mode |= S_ISGID; 535 - } else { 536 - gid = current_fsgid(); 537 - } 538 - inode = hugetlbfs_get_inode(dir->i_sb, current_fsuid(), gid, mode, dev); 508 + inode = hugetlbfs_get_inode(dir->i_sb, dir, mode, dev); 539 509 if (inode) { 540 510 dir->i_ctime = dir->i_mtime = CURRENT_TIME; 541 511 d_instantiate(dentry, inode); ··· 555 541 { 556 542 struct inode *inode; 557 543 int error = -ENOSPC; 558 - gid_t gid; 559 544 560 - if (dir->i_mode & S_ISGID) 561 - gid = dir->i_gid; 562 - else 563 - gid = current_fsgid(); 564 - 565 - inode = hugetlbfs_get_inode(dir->i_sb, current_fsuid(), 566 - gid, S_IFLNK|S_IRWXUGO, 0); 545 + inode = hugetlbfs_get_inode(dir->i_sb, dir, S_IFLNK|S_IRWXUGO, 0); 567 546 if (inode) { 568 547 int l = strlen(symname)+1; 569 548 error = page_symlink(inode, symname, l); ··· 864 857 sb->s_magic = HUGETLBFS_MAGIC; 865 858 sb->s_op = &hugetlbfs_ops; 866 859 sb->s_time_gran = 1; 867 - inode = hugetlbfs_get_inode(sb, config.uid, config.gid, 868 - S_IFDIR | config.mode, 0); 860 + inode = hugetlbfs_get_root(sb, &config); 869 861 if (!inode) 870 862 goto out_free; 871 863 ··· 962 956 963 957 path.mnt = mntget(hugetlbfs_vfsmount); 964 958 error = -ENOSPC; 965 - inode = hugetlbfs_get_inode(root->d_sb, current_fsuid(), 966 - current_fsgid(), S_IFREG | S_IRWXUGO, 0); 959 + inode = hugetlbfs_get_inode(root->d_sb, NULL, S_IFREG | S_IRWXUGO, 0); 967 960 if (!inode) 968 961 goto out_dentry; 969 962