vfs: introduce noop_llseek()
[safe/jmp/linux-2.6] / fs / anon_inodes.c
index 01c529a..9bd4b38 100644 (file)
@@ -12,7 +12,6 @@
 #include <linux/file.h>
 #include <linux/poll.h>
 #include <linux/sched.h>
-#include <linux/slab.h>
 #include <linux/init.h>
 #include <linux/fs.h>
 #include <linux/mount.h>
@@ -35,16 +34,6 @@ static int anon_inodefs_get_sb(struct file_system_type *fs_type, int flags,
                             mnt);
 }
 
-static int anon_inodefs_delete_dentry(struct dentry *dentry)
-{
-       /*
-        * We faked vfs to believe the dentry was hashed when we created it.
-        * Now we restore the flag so that dput() will work correctly.
-        */
-       dentry->d_flags |= DCACHE_UNHASHED;
-       return 1;
-}
-
 /*
  * anon_inodefs_dname() is called from d_path().
  */
@@ -60,7 +49,6 @@ static struct file_system_type anon_inode_fs_type = {
        .kill_sb        = kill_anon_super,
 };
 static const struct dentry_operations anon_inodefs_dentry_operations = {
-       .d_delete       = anon_inodefs_delete_dentry,
        .d_dname        = anon_inodefs_dname,
 };
 
@@ -129,18 +117,16 @@ struct file *anon_inode_getfile(const char *name,
        atomic_inc(&anon_inode_inode->i_count);
 
        path.dentry->d_op = &anon_inodefs_dentry_operations;
-       /* Do not publish this dentry inside the global dentry hash table */
-       path.dentry->d_flags &= ~DCACHE_UNHASHED;
        d_instantiate(path.dentry, anon_inode_inode);
 
        error = -ENFILE;
-       file = alloc_file(&path, FMODE_READ | FMODE_WRITE, fops);
+       file = alloc_file(&path, OPEN_FMODE(flags), fops);
        if (!file)
                goto err_dput;
        file->f_mapping = anon_inode_inode->i_mapping;
 
        file->f_pos = 0;
-       file->f_flags = O_RDWR | (flags & O_NONBLOCK);
+       file->f_flags = flags & (O_ACCMODE | O_NONBLOCK);
        file->f_version = 0;
        file->private_data = priv;
 
@@ -219,9 +205,10 @@ static struct inode *anon_inode_mkinode(void)
         * that it already _is_ on the dirty list.
         */
        inode->i_state = I_DIRTY;
-       inode->i_mode = S_IRUSR | S_IWUSR;
+       inode->i_mode = S_IFREG | S_IRUSR | S_IWUSR;
        inode->i_uid = current_fsuid();
        inode->i_gid = current_fsgid();
+       inode->i_flags |= S_PRIVATE;
        inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
        return inode;
 }