ramfs: replace inode uid,gid,mode initialization with helper function
[pandora-kernel.git] / fs / ramfs / inode.c
index f47cd21..a5ebae7 100644 (file)
@@ -52,14 +52,13 @@ static struct backing_dev_info ramfs_backing_dev_info = {
                          BDI_CAP_READ_MAP | BDI_CAP_WRITE_MAP | BDI_CAP_EXEC_MAP,
 };
 
-struct inode *ramfs_get_inode(struct super_block *sb, int mode, dev_t dev)
+struct inode *ramfs_get_inode(struct super_block *sb,
+                               const struct inode *dir, int mode, dev_t dev)
 {
        struct inode * inode = new_inode(sb);
 
        if (inode) {
-               inode->i_mode = mode;
-               inode->i_uid = current_fsuid();
-               inode->i_gid = current_fsgid();
+               inode_init_owner(inode, dir, mode);
                inode->i_mapping->a_ops = &ramfs_aops;
                inode->i_mapping->backing_dev_info = &ramfs_backing_dev_info;
                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)
 static int
 ramfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev)
 {
-       struct inode * inode = ramfs_get_inode(dir->i_sb, mode, dev);
+       struct inode * inode = ramfs_get_inode(dir->i_sb, dir, mode, dev);
        int error = -ENOSPC;
 
        if (inode) {
-               if (dir->i_mode & S_ISGID) {
-                       inode->i_gid = dir->i_gid;
-                       if (S_ISDIR(mode))
-                               inode->i_mode |= S_ISGID;
-               }
                d_instantiate(dentry, inode);
                dget(dentry);   /* Extra count - pin the dentry in core */
                error = 0;
@@ -130,13 +124,11 @@ static int ramfs_symlink(struct inode * dir, struct dentry *dentry, const char *
        struct inode *inode;
        int error = -ENOSPC;
 
-       inode = ramfs_get_inode(dir->i_sb, S_IFLNK|S_IRWXUGO, 0);
+       inode = ramfs_get_inode(dir->i_sb, dir, S_IFLNK|S_IRWXUGO, 0);
        if (inode) {
                int l = strlen(symname)+1;
                error = page_symlink(inode, symname, l);
                if (!error) {
-                       if (dir->i_mode & S_ISGID)
-                               inode->i_gid = dir->i_gid;
                        d_instantiate(dentry, inode);
                        dget(dentry);
                        dir->i_mtime = dir->i_ctime = CURRENT_TIME;
@@ -241,7 +233,7 @@ int ramfs_fill_super(struct super_block *sb, void *data, int silent)
        sb->s_op                = &ramfs_ops;
        sb->s_time_gran         = 1;
 
-       inode = ramfs_get_inode(sb, S_IFDIR | fsi->mount_opts.mode, 0);
+       inode = ramfs_get_inode(sb, NULL, S_IFDIR | fsi->mount_opts.mode, 0);
        if (!inode) {
                err = -ENOMEM;
                goto fail;