diff options
| author | Dmitry Monakhov <dmonakhov@openvz.org> | 2010-03-04 09:32:18 -0500 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2010-05-21 18:31:26 -0400 |
| commit | 454abafe9d8beb3fe7da06131b3d81d6d352a959 (patch) | |
| tree | 4be9c50d76aecd2c43959550814fb4337d27c6d9 | |
| parent | 6a9e652c88fad648ea088ac07dbc671a9813f75e (diff) | |
ramfs: replace inode uid,gid,mode initialization with helper function
- seems what ramfs_get_inode is only locally, make it static.
[AV: the hell it is; it's used by shmem, so shmem needed conversion too
and no, that function can't be made static]
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| -rw-r--r-- | fs/ramfs/inode.c | 20 | ||||
| -rw-r--r-- | include/linux/ramfs.h | 3 | ||||
| -rw-r--r-- | mm/shmem.c | 25 |
3 files changed, 16 insertions, 32 deletions
diff --git a/fs/ramfs/inode.c b/fs/ramfs/inode.c index f47cd212dee1..a5ebae70dc6d 100644 --- a/fs/ramfs/inode.c +++ b/fs/ramfs/inode.c | |||
| @@ -52,14 +52,13 @@ static struct backing_dev_info ramfs_backing_dev_info = { | |||
| 52 | BDI_CAP_READ_MAP | BDI_CAP_WRITE_MAP | BDI_CAP_EXEC_MAP, | 52 | BDI_CAP_READ_MAP | BDI_CAP_WRITE_MAP | BDI_CAP_EXEC_MAP, |
| 53 | }; | 53 | }; |
| 54 | 54 | ||
| 55 | struct inode *ramfs_get_inode(struct super_block *sb, int mode, dev_t dev) | 55 | struct inode *ramfs_get_inode(struct super_block *sb, |
| 56 | const struct inode *dir, int mode, dev_t dev) | ||
| 56 | { | 57 | { |
| 57 | struct inode * inode = new_inode(sb); | 58 | struct inode * inode = new_inode(sb); |
| 58 | 59 | ||
| 59 | if (inode) { | 60 | if (inode) { |
| 60 | inode->i_mode = mode; | 61 | inode_init_owner(inode, dir, mode); |
| 61 | inode->i_uid = current_fsuid(); | ||
| 62 | inode->i_gid = current_fsgid(); | ||
| 63 | inode->i_mapping->a_ops = &ramfs_aops; | 62 | inode->i_mapping->a_ops = &ramfs_aops; |
| 64 | inode->i_mapping->backing_dev_info = &ramfs_backing_dev_info; | 63 | inode->i_mapping->backing_dev_info = &ramfs_backing_dev_info; |
| 65 | mapping_set_gfp_mask(inode->i_mapping, GFP_HIGHUSER); | 64 | mapping_set_gfp_mask(inode->i_mapping, GFP_HIGHUSER); |
| @@ -95,15 +94,10 @@ struct inode *ramfs_get_inode(struct super_block *sb, int mode, dev_t dev) | |||
| 95 | static int | 94 | static int |
| 96 | ramfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev) | 95 | ramfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev) |
| 97 | { | 96 | { |
| 98 | struct inode * inode = ramfs_get_inode(dir->i_sb, mode, dev); | 97 | struct inode * inode = ramfs_get_inode(dir->i_sb, dir, mode, dev); |
| 99 | int error = -ENOSPC; | 98 | int error = -ENOSPC; |
| 100 | 99 | ||
| 101 | if (inode) { | 100 | if (inode) { |
| 102 | if (dir->i_mode & S_ISGID) { | ||
| 103 | inode->i_gid = dir->i_gid; | ||
| 104 | if (S_ISDIR(mode)) | ||
| 105 | inode->i_mode |= S_ISGID; | ||
| 106 | } | ||
| 107 | d_instantiate(dentry, inode); | 101 | d_instantiate(dentry, inode); |
| 108 | dget(dentry); /* Extra count - pin the dentry in core */ | 102 | dget(dentry); /* Extra count - pin the dentry in core */ |
| 109 | error = 0; | 103 | error = 0; |
| @@ -130,13 +124,11 @@ static int ramfs_symlink(struct inode * dir, struct dentry *dentry, const char * | |||
| 130 | struct inode *inode; | 124 | struct inode *inode; |
| 131 | int error = -ENOSPC; | 125 | int error = -ENOSPC; |
| 132 | 126 | ||
| 133 | inode = ramfs_get_inode(dir->i_sb, S_IFLNK|S_IRWXUGO, 0); | 127 | inode = ramfs_get_inode(dir->i_sb, dir, S_IFLNK|S_IRWXUGO, 0); |
| 134 | if (inode) { | 128 | if (inode) { |
| 135 | int l = strlen(symname)+1; | 129 | int l = strlen(symname)+1; |
| 136 | error = page_symlink(inode, symname, l); | 130 | error = page_symlink(inode, symname, l); |
| 137 | if (!error) { | 131 | if (!error) { |
| 138 | if (dir->i_mode & S_ISGID) | ||
| 139 | inode->i_gid = dir->i_gid; | ||
| 140 | d_instantiate(dentry, inode); | 132 | d_instantiate(dentry, inode); |
| 141 | dget(dentry); | 133 | dget(dentry); |
| 142 | dir->i_mtime = dir->i_ctime = CURRENT_TIME; | 134 | dir->i_mtime = dir->i_ctime = CURRENT_TIME; |
| @@ -241,7 +233,7 @@ int ramfs_fill_super(struct super_block *sb, void *data, int silent) | |||
| 241 | sb->s_op = &ramfs_ops; | 233 | sb->s_op = &ramfs_ops; |
| 242 | sb->s_time_gran = 1; | 234 | sb->s_time_gran = 1; |
| 243 | 235 | ||
| 244 | inode = ramfs_get_inode(sb, S_IFDIR | fsi->mount_opts.mode, 0); | 236 | inode = ramfs_get_inode(sb, NULL, S_IFDIR | fsi->mount_opts.mode, 0); |
| 245 | if (!inode) { | 237 | if (!inode) { |
| 246 | err = -ENOMEM; | 238 | err = -ENOMEM; |
| 247 | goto fail; | 239 | goto fail; |
diff --git a/include/linux/ramfs.h b/include/linux/ramfs.h index 8600508c77a6..e7320b5e82fb 100644 --- a/include/linux/ramfs.h +++ b/include/linux/ramfs.h | |||
| @@ -1,7 +1,8 @@ | |||
| 1 | #ifndef _LINUX_RAMFS_H | 1 | #ifndef _LINUX_RAMFS_H |
| 2 | #define _LINUX_RAMFS_H | 2 | #define _LINUX_RAMFS_H |
| 3 | 3 | ||
| 4 | struct inode *ramfs_get_inode(struct super_block *sb, int mode, dev_t dev); | 4 | struct inode *ramfs_get_inode(struct super_block *sb, const struct inode *dir, |
| 5 | int mode, dev_t dev); | ||
| 5 | extern int ramfs_get_sb(struct file_system_type *fs_type, | 6 | extern int ramfs_get_sb(struct file_system_type *fs_type, |
| 6 | int flags, const char *dev_name, void *data, struct vfsmount *mnt); | 7 | int flags, const char *dev_name, void *data, struct vfsmount *mnt); |
| 7 | 8 | ||
diff --git a/mm/shmem.c b/mm/shmem.c index 717aa62ff127..0cd7f66f1c66 100644 --- a/mm/shmem.c +++ b/mm/shmem.c | |||
| @@ -1545,8 +1545,8 @@ static int shmem_mmap(struct file *file, struct vm_area_struct *vma) | |||
| 1545 | return 0; | 1545 | return 0; |
| 1546 | } | 1546 | } |
| 1547 | 1547 | ||
| 1548 | static struct inode *shmem_get_inode(struct super_block *sb, int mode, | 1548 | static struct inode *shmem_get_inode(struct super_block *sb, const struct inode *dir, |
| 1549 | dev_t dev, unsigned long flags) | 1549 | int mode, dev_t dev, unsigned long flags) |
| 1550 | { | 1550 | { |
| 1551 | struct inode *inode; | 1551 | struct inode *inode; |
| 1552 | struct shmem_inode_info *info; | 1552 | struct shmem_inode_info *info; |
| @@ -1557,9 +1557,7 @@ static struct inode *shmem_get_inode(struct super_block *sb, int mode, | |||
| 1557 | 1557 | ||
| 1558 | inode = new_inode(sb); | 1558 | inode = new_inode(sb); |
| 1559 | if (inode) { | 1559 | if (inode) { |
| 1560 | inode->i_mode = mode; | 1560 | inode_init_owner(inode, dir, mode); |
| 1561 | inode->i_uid = current_fsuid(); | ||
| 1562 | inode->i_gid = current_fsgid(); | ||
| 1563 | inode->i_blocks = 0; | 1561 | inode->i_blocks = 0; |
| 1564 | inode->i_mapping->backing_dev_info = &shmem_backing_dev_info; | 1562 | inode->i_mapping->backing_dev_info = &shmem_backing_dev_info; |
| 1565 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 1563 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
| @@ -1814,7 +1812,7 @@ shmem_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev) | |||
| 1814 | struct inode *inode; | 1812 | struct inode *inode; |
| 1815 | int error = -ENOSPC; | 1813 | int error = -ENOSPC; |
| 1816 | 1814 | ||
| 1817 | inode = shmem_get_inode(dir->i_sb, mode, dev, VM_NORESERVE); | 1815 | inode = shmem_get_inode(dir->i_sb, dir, mode, dev, VM_NORESERVE); |
| 1818 | if (inode) { | 1816 | if (inode) { |
| 1819 | error = security_inode_init_security(inode, dir, NULL, NULL, | 1817 | error = security_inode_init_security(inode, dir, NULL, NULL, |
| 1820 | NULL); | 1818 | NULL); |
| @@ -1833,11 +1831,6 @@ shmem_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev) | |||
| 1833 | #else | 1831 | #else |
| 1834 | error = 0; | 1832 | error = 0; |
| 1835 | #endif | 1833 | #endif |
| 1836 | if (dir->i_mode & S_ISGID) { | ||
| 1837 | inode->i_gid = dir->i_gid; | ||
| 1838 | if (S_ISDIR(mode)) | ||
| 1839 | inode->i_mode |= S_ISGID; | ||
| 1840 | } | ||
| 1841 | dir->i_size += BOGO_DIRENT_SIZE; | 1834 | dir->i_size += BOGO_DIRENT_SIZE; |
| 1842 | dir->i_ctime = dir->i_mtime = CURRENT_TIME; | 1835 | dir->i_ctime = dir->i_mtime = CURRENT_TIME; |
| 1843 | d_instantiate(dentry, inode); | 1836 | d_instantiate(dentry, inode); |
| @@ -1957,7 +1950,7 @@ static int shmem_symlink(struct inode *dir, struct dentry *dentry, const char *s | |||
| 1957 | if (len > PAGE_CACHE_SIZE) | 1950 | if (len > PAGE_CACHE_SIZE) |
| 1958 | return -ENAMETOOLONG; | 1951 | return -ENAMETOOLONG; |
| 1959 | 1952 | ||
| 1960 | inode = shmem_get_inode(dir->i_sb, S_IFLNK|S_IRWXUGO, 0, VM_NORESERVE); | 1953 | inode = shmem_get_inode(dir->i_sb, dir, S_IFLNK|S_IRWXUGO, 0, VM_NORESERVE); |
| 1961 | if (!inode) | 1954 | if (!inode) |
| 1962 | return -ENOSPC; | 1955 | return -ENOSPC; |
| 1963 | 1956 | ||
| @@ -1992,8 +1985,6 @@ static int shmem_symlink(struct inode *dir, struct dentry *dentry, const char *s | |||
| 1992 | unlock_page(page); | 1985 | unlock_page(page); |
| 1993 | page_cache_release(page); | 1986 | page_cache_release(page); |
| 1994 | } | 1987 | } |
| 1995 | if (dir->i_mode & S_ISGID) | ||
| 1996 | inode->i_gid = dir->i_gid; | ||
| 1997 | dir->i_size += BOGO_DIRENT_SIZE; | 1988 | dir->i_size += BOGO_DIRENT_SIZE; |
| 1998 | dir->i_ctime = dir->i_mtime = CURRENT_TIME; | 1989 | dir->i_ctime = dir->i_mtime = CURRENT_TIME; |
| 1999 | d_instantiate(dentry, inode); | 1990 | d_instantiate(dentry, inode); |
| @@ -2366,7 +2357,7 @@ int shmem_fill_super(struct super_block *sb, void *data, int silent) | |||
| 2366 | sb->s_flags |= MS_POSIXACL; | 2357 | sb->s_flags |= MS_POSIXACL; |
| 2367 | #endif | 2358 | #endif |
| 2368 | 2359 | ||
| 2369 | inode = shmem_get_inode(sb, S_IFDIR | sbinfo->mode, 0, VM_NORESERVE); | 2360 | inode = shmem_get_inode(sb, NULL, S_IFDIR | sbinfo->mode, 0, VM_NORESERVE); |
| 2370 | if (!inode) | 2361 | if (!inode) |
| 2371 | goto failed; | 2362 | goto failed; |
| 2372 | inode->i_uid = sbinfo->uid; | 2363 | inode->i_uid = sbinfo->uid; |
| @@ -2611,7 +2602,7 @@ int shmem_lock(struct file *file, int lock, struct user_struct *user) | |||
| 2611 | 2602 | ||
| 2612 | #define shmem_vm_ops generic_file_vm_ops | 2603 | #define shmem_vm_ops generic_file_vm_ops |
| 2613 | #define shmem_file_operations ramfs_file_operations | 2604 | #define shmem_file_operations ramfs_file_operations |
| 2614 | #define shmem_get_inode(sb, mode, dev, flags) ramfs_get_inode(sb, mode, dev) | 2605 | #define shmem_get_inode(sb, dir, mode, dev, flags) ramfs_get_inode(sb, dir, mode, dev) |
| 2615 | #define shmem_acct_size(flags, size) 0 | 2606 | #define shmem_acct_size(flags, size) 0 |
| 2616 | #define shmem_unacct_size(flags, size) do {} while (0) | 2607 | #define shmem_unacct_size(flags, size) do {} while (0) |
| 2617 | #define SHMEM_MAX_BYTES MAX_LFS_FILESIZE | 2608 | #define SHMEM_MAX_BYTES MAX_LFS_FILESIZE |
| @@ -2655,7 +2646,7 @@ struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags | |||
| 2655 | path.mnt = mntget(shm_mnt); | 2646 | path.mnt = mntget(shm_mnt); |
| 2656 | 2647 | ||
| 2657 | error = -ENOSPC; | 2648 | error = -ENOSPC; |
| 2658 | inode = shmem_get_inode(root->d_sb, S_IFREG | S_IRWXUGO, 0, flags); | 2649 | inode = shmem_get_inode(root->d_sb, NULL, S_IFREG | S_IRWXUGO, 0, flags); |
| 2659 | if (!inode) | 2650 | if (!inode) |
| 2660 | goto put_dentry; | 2651 | goto put_dentry; |
| 2661 | 2652 | ||
