udf_updated_lvid(sb);
        }
        mutex_unlock(&sbi->s_alloc_mutex);
-       inode->i_mode = mode;
-       inode->i_uid = current_fsuid();
-       if (dir->i_mode & S_ISGID) {
-               inode->i_gid = dir->i_gid;
-               if (S_ISDIR(mode))
-                       mode |= S_ISGID;
-       } else {
-               inode->i_gid = current_fsgid();
-       }
+
+       inode_init_owner(inode, dir, mode);
 
        iinfo->i_location.logicalBlockNum = block;
        iinfo->i_location.partitionReferenceNum =
 
                inode->i_data.a_ops = &udf_aops;
        inode->i_op = &udf_file_inode_operations;
        inode->i_fop = &udf_file_operations;
-       inode->i_mode = mode;
        mark_inode_dirty(inode);
 
        fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err);
                goto out;
 
        iinfo = UDF_I(inode);
-       inode->i_uid = current_fsuid();
        init_special_inode(inode, mode, rdev);
        fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err);
        if (!fi) {
                goto out;
 
        err = -EIO;
-       inode = udf_new_inode(dir, S_IFDIR, &err);
+       inode = udf_new_inode(dir, S_IFDIR | mode, &err);
        if (!inode)
                goto out;
 
                        FID_FILE_CHAR_DIRECTORY | FID_FILE_CHAR_PARENT;
        udf_write_fi(inode, &cfi, fi, &fibh, NULL, NULL);
        brelse(fibh.sbh);
-       inode->i_mode = S_IFDIR | mode;
-       if (dir->i_mode & S_ISGID)
-               inode->i_mode |= S_ISGID;
        mark_inode_dirty(inode);
 
        fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err);
        dquot_initialize(dir);
 
        lock_kernel();
-       inode = udf_new_inode(dir, S_IFLNK, &err);
+       inode = udf_new_inode(dir, S_IFLNK | S_IRWXUGO, &err);
        if (!inode)
                goto out;
 
        }
 
        iinfo = UDF_I(inode);
-       inode->i_mode = S_IFLNK | S_IRWXUGO;
        inode->i_data.a_ops = &udf_symlink_aops;
        inode->i_op = &udf_symlink_inode_operations;