[PATCH 1/7][RFC]KVM: external module: Moving anon_inodes.c to x86 directory.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>From cf92c1937fbfbf468c598b0e88588f7352c4e2d1 Mon Sep 17 00:00:00 2001
From: Xiantao Zhang <xiantao.zhang@xxxxxxxxx>
Date: Wed, 2 Jul 2008 12:32:21 +0800
Subject: [PATCH] KVM: external module: Moving anon_inodes.c to x86
directory.

Create an x86 directory to hold x86 specific files
Moving anon_inodes.c to x86.

Signed-off-by: Xiantao Zhang <xiantao.zhang@xxxxxxxxx>
---
 kernel/Kbuild            |    2 +-
 kernel/anon_inodes.c     |  214
----------------------------------------------
 kernel/x86/anon_inodes.c |  214
++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 215 insertions(+), 215 deletions(-)
 delete mode 100644 kernel/anon_inodes.c
 create mode 100644 kernel/x86/anon_inodes.c

diff --git a/kernel/Kbuild b/kernel/Kbuild
index 676f28d..60ecf5a 100644
--- a/kernel/Kbuild
+++ b/kernel/Kbuild
@@ -1,5 +1,5 @@
 obj-m := kvm.o kvm-intel.o kvm-amd.o
-kvm-objs := kvm_main.o x86.o mmu.o x86_emulate.o anon_inodes.o irq.o
i8259.o \
+kvm-objs := kvm_main.o x86.o mmu.o x86_emulate.o x86/anon_inodes.o
irq.o i8259.o \
 	 lapic.o ioapic.o preempt.o i8254.o coalesced_mmio.o \
 	 external-module-compat.o
 ifeq ($(CONFIG_KVM_TRACE),y)
diff --git a/kernel/anon_inodes.c b/kernel/anon_inodes.c
deleted file mode 100644
index 74630ea..0000000
--- a/kernel/anon_inodes.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- *  fs/anon_inodes.c
- *
- *  Copyright (C) 2007  Davide Libenzi <davidel@xxxxxxxxxxxxxxx>
- *
- *  Thanks to Arnd Bergmann for code review and suggestions.
- *  More changes for Thomas Gleixner suggestions.
- *
- */
-
-#include <linux/file.h>
-#include <linux/poll.h>
-#include <linux/slab.h>
-#include <linux/init.h>
-#include <linux/fs.h>
-#include <linux/mount.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/magic.h>
-#include <linux/anon_inodes.h>
-
-#include <asm/uaccess.h>
-
-static struct vfsmount *anon_inode_mnt __read_mostly;
-static struct inode *anon_inode_inode;
-static struct file_operations anon_inode_fops;
-
-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17)
-
-static int anon_inodefs_get_sb(struct file_system_type *fs_type, int
flags,
-			       const char *dev_name, void *data,
-			       struct vfsmount *mnt)
-{
-	return get_sb_pseudo(fs_type, "kvm_anon_inode:", NULL,
0x99700426, mnt);
-}
-
-#else
-
-static struct super_block *anon_inodefs_get_sb(struct file_system_type
*fs_type,
-					    int flags, const char
*dev_name,
-					    void *data)
-{
-	return get_sb_pseudo(fs_type, "kvm_anon_inode:", NULL,
0x99700426);
-}
-
-#endif
-
-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;
-}
-
-static struct file_system_type anon_inode_fs_type = {
-	.name		= "kvm_anon_inodefs",
-	.get_sb		= anon_inodefs_get_sb,
-	.kill_sb	= kill_anon_super,
-};
-static struct dentry_operations anon_inodefs_dentry_operations = {
-	.d_delete	= anon_inodefs_delete_dentry,
-};
-
-/**
- * anon_inode_getfd - creates a new file instance by hooking it up to
and
- *                    anonymous inode, and a dentry that describe the
"class"
- *                    of the file
- *
- * @name:    [in]    name of the "class" of the new file
- * @fops     [in]    file operations for the new file
- * @priv     [in]    private data for the new file (will be file's
private_data)
- *
- * Creates a new file by hooking it on a single inode. This is useful
for files
- * that do not need to have a full-fledged inode in order to operate
correctly.
- * All the files created with anon_inode_getfd() will share a single
inode, by
- * hence saving memory and avoiding code duplication for the
file/inode/dentry
- * setup. Returns new descriptor or -error.
- */
-int anon_inode_getfd(const char *name, const struct file_operations
*fops,
-		     void *priv)
-{
-	struct qstr this;
-	struct dentry *dentry;
-	struct inode *inode;
-	struct file *file;
-	int error, fd;
-
-	if (IS_ERR(anon_inode_inode))
-		return -ENODEV;
-	file = get_empty_filp();
-	if (!file)
-		return -ENFILE;
-
-	inode = igrab(anon_inode_inode);
-	if (IS_ERR(inode)) {
-		error = PTR_ERR(inode);
-		goto err_put_filp;
-	}
-
-	error = get_unused_fd();
-	if (error < 0)
-		goto err_iput;
-	fd = error;
-
-	/*
-	 * Link the inode to a directory entry by creating a unique name
-	 * using the inode sequence number.
-	 */
-	error = -ENOMEM;
-	this.name = name;
-	this.len = strlen(name);
-	this.hash = 0;
-	dentry = d_alloc(anon_inode_mnt->mnt_sb->s_root, &this);
-	if (!dentry)
-		goto err_put_unused_fd;
-	dentry->d_op = &anon_inodefs_dentry_operations;
-	/* Do not publish this dentry inside the global dentry hash
table */
-	dentry->d_flags &= ~DCACHE_UNHASHED;
-	d_instantiate(dentry, inode);
-
-	file->f_vfsmnt = mntget(anon_inode_mnt);
-	file->f_dentry = dentry;
-	file->f_mapping = inode->i_mapping;
-
-	file->f_pos = 0;
-	file->f_flags = O_RDWR;
-	file->f_op = (struct file_operations *)fops;
-	file->f_mode = FMODE_READ | FMODE_WRITE;
-	file->f_version = 0;
-	file->private_data = priv;
-
-	fd_install(fd, file);
-
-	return fd;
-
-err_put_unused_fd:
-	put_unused_fd(fd);
-err_iput:
-	iput(inode);
-err_put_filp:
-	fput(file);
-	return error;
-}
-
-/*
- * A single inode exist for all anon_inode files. Contrary to pipes,
- * anon_inode inodes has no per-instance data associated, so we can
avoid
- * the allocation of multiple of them.
- */
-static struct inode *anon_inode_mkinode(void)
-{
-	struct inode *inode = new_inode(anon_inode_mnt->mnt_sb);
-
-	if (!inode)
-		return ERR_PTR(-ENOMEM);
-
-	inode->i_fop = &anon_inode_fops;
-
-	/*
-	 * Mark the inode dirty from the very beginning,
-	 * that way it will never be moved to the dirty
-	 * list because mark_inode_dirty() will think
-	 * that it already _is_ on the dirty list.
-	 */
-	inode->i_state = I_DIRTY;
-	inode->i_mode = S_IRUSR | S_IWUSR;
-	inode->i_uid = current->fsuid;
-	inode->i_gid = current->fsgid;
-	inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
-	return inode;
-}
-
-static int anon_inode_init(void)
-{
-	int error;
-
-	error = register_filesystem(&anon_inode_fs_type);
-	if (error)
-		goto err_exit;
-	anon_inode_mnt = kern_mount(&anon_inode_fs_type);
-	if (IS_ERR(anon_inode_mnt)) {
-		error = PTR_ERR(anon_inode_mnt);
-		goto err_unregister_filesystem;
-	}
-	anon_inode_inode = anon_inode_mkinode();
-	if (IS_ERR(anon_inode_inode)) {
-		error = PTR_ERR(anon_inode_inode);
-		goto err_mntput;
-	}
-
-	return 0;
-
-err_mntput:
-	mntput(anon_inode_mnt);
-err_unregister_filesystem:
-	unregister_filesystem(&anon_inode_fs_type);
-err_exit:
-	return -ENOMEM;
-}
-
-int kvm_init_anon_inodes(void)
-{
-	return anon_inode_init();
-}
-
-void kvm_exit_anon_inodes(void)
-{
-	iput(anon_inode_inode);
-	mntput(anon_inode_mnt);
-	unregister_filesystem(&anon_inode_fs_type);
-}
diff --git a/kernel/x86/anon_inodes.c b/kernel/x86/anon_inodes.c
new file mode 100644
index 0000000..74630ea
--- /dev/null
+++ b/kernel/x86/anon_inodes.c
@@ -0,0 +1,214 @@
+/*
+ *  fs/anon_inodes.c
+ *
+ *  Copyright (C) 2007  Davide Libenzi <davidel@xxxxxxxxxxxxxxx>
+ *
+ *  Thanks to Arnd Bergmann for code review and suggestions.
+ *  More changes for Thomas Gleixner suggestions.
+ *
+ */
+
+#include <linux/file.h>
+#include <linux/poll.h>
+#include <linux/slab.h>
+#include <linux/init.h>
+#include <linux/fs.h>
+#include <linux/mount.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/magic.h>
+#include <linux/anon_inodes.h>
+
+#include <asm/uaccess.h>
+
+static struct vfsmount *anon_inode_mnt __read_mostly;
+static struct inode *anon_inode_inode;
+static struct file_operations anon_inode_fops;
+
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17)
+
+static int anon_inodefs_get_sb(struct file_system_type *fs_type, int
flags,
+			       const char *dev_name, void *data,
+			       struct vfsmount *mnt)
+{
+	return get_sb_pseudo(fs_type, "kvm_anon_inode:", NULL,
0x99700426, mnt);
+}
+
+#else
+
+static struct super_block *anon_inodefs_get_sb(struct file_system_type
*fs_type,
+					    int flags, const char
*dev_name,
+					    void *data)
+{
+	return get_sb_pseudo(fs_type, "kvm_anon_inode:", NULL,
0x99700426);
+}
+
+#endif
+
+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;
+}
+
+static struct file_system_type anon_inode_fs_type = {
+	.name		= "kvm_anon_inodefs",
+	.get_sb		= anon_inodefs_get_sb,
+	.kill_sb	= kill_anon_super,
+};
+static struct dentry_operations anon_inodefs_dentry_operations = {
+	.d_delete	= anon_inodefs_delete_dentry,
+};
+
+/**
+ * anon_inode_getfd - creates a new file instance by hooking it up to
and
+ *                    anonymous inode, and a dentry that describe the
"class"
+ *                    of the file
+ *
+ * @name:    [in]    name of the "class" of the new file
+ * @fops     [in]    file operations for the new file
+ * @priv     [in]    private data for the new file (will be file's
private_data)
+ *
+ * Creates a new file by hooking it on a single inode. This is useful
for files
+ * that do not need to have a full-fledged inode in order to operate
correctly.
+ * All the files created with anon_inode_getfd() will share a single
inode, by
+ * hence saving memory and avoiding code duplication for the
file/inode/dentry
+ * setup. Returns new descriptor or -error.
+ */
+int anon_inode_getfd(const char *name, const struct file_operations
*fops,
+		     void *priv)
+{
+	struct qstr this;
+	struct dentry *dentry;
+	struct inode *inode;
+	struct file *file;
+	int error, fd;
+
+	if (IS_ERR(anon_inode_inode))
+		return -ENODEV;
+	file = get_empty_filp();
+	if (!file)
+		return -ENFILE;
+
+	inode = igrab(anon_inode_inode);
+	if (IS_ERR(inode)) {
+		error = PTR_ERR(inode);
+		goto err_put_filp;
+	}
+
+	error = get_unused_fd();
+	if (error < 0)
+		goto err_iput;
+	fd = error;
+
+	/*
+	 * Link the inode to a directory entry by creating a unique name
+	 * using the inode sequence number.
+	 */
+	error = -ENOMEM;
+	this.name = name;
+	this.len = strlen(name);
+	this.hash = 0;
+	dentry = d_alloc(anon_inode_mnt->mnt_sb->s_root, &this);
+	if (!dentry)
+		goto err_put_unused_fd;
+	dentry->d_op = &anon_inodefs_dentry_operations;
+	/* Do not publish this dentry inside the global dentry hash
table */
+	dentry->d_flags &= ~DCACHE_UNHASHED;
+	d_instantiate(dentry, inode);
+
+	file->f_vfsmnt = mntget(anon_inode_mnt);
+	file->f_dentry = dentry;
+	file->f_mapping = inode->i_mapping;
+
+	file->f_pos = 0;
+	file->f_flags = O_RDWR;
+	file->f_op = (struct file_operations *)fops;
+	file->f_mode = FMODE_READ | FMODE_WRITE;
+	file->f_version = 0;
+	file->private_data = priv;
+
+	fd_install(fd, file);
+
+	return fd;
+
+err_put_unused_fd:
+	put_unused_fd(fd);
+err_iput:
+	iput(inode);
+err_put_filp:
+	fput(file);
+	return error;
+}
+
+/*
+ * A single inode exist for all anon_inode files. Contrary to pipes,
+ * anon_inode inodes has no per-instance data associated, so we can
avoid
+ * the allocation of multiple of them.
+ */
+static struct inode *anon_inode_mkinode(void)
+{
+	struct inode *inode = new_inode(anon_inode_mnt->mnt_sb);
+
+	if (!inode)
+		return ERR_PTR(-ENOMEM);
+
+	inode->i_fop = &anon_inode_fops;
+
+	/*
+	 * Mark the inode dirty from the very beginning,
+	 * that way it will never be moved to the dirty
+	 * list because mark_inode_dirty() will think
+	 * that it already _is_ on the dirty list.
+	 */
+	inode->i_state = I_DIRTY;
+	inode->i_mode = S_IRUSR | S_IWUSR;
+	inode->i_uid = current->fsuid;
+	inode->i_gid = current->fsgid;
+	inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
+	return inode;
+}
+
+static int anon_inode_init(void)
+{
+	int error;
+
+	error = register_filesystem(&anon_inode_fs_type);
+	if (error)
+		goto err_exit;
+	anon_inode_mnt = kern_mount(&anon_inode_fs_type);
+	if (IS_ERR(anon_inode_mnt)) {
+		error = PTR_ERR(anon_inode_mnt);
+		goto err_unregister_filesystem;
+	}
+	anon_inode_inode = anon_inode_mkinode();
+	if (IS_ERR(anon_inode_inode)) {
+		error = PTR_ERR(anon_inode_inode);
+		goto err_mntput;
+	}
+
+	return 0;
+
+err_mntput:
+	mntput(anon_inode_mnt);
+err_unregister_filesystem:
+	unregister_filesystem(&anon_inode_fs_type);
+err_exit:
+	return -ENOMEM;
+}
+
+int kvm_init_anon_inodes(void)
+{
+	return anon_inode_init();
+}
+
+void kvm_exit_anon_inodes(void)
+{
+	iput(anon_inode_inode);
+	mntput(anon_inode_mnt);
+	unregister_filesystem(&anon_inode_fs_type);
+}
-- 
1.5.2

Attachment: 0001-KVM-external-module-Moving-anon_inodes.c-to-x86-di.patch
Description: 0001-KVM-external-module-Moving-anon_inodes.c-to-x86-di.patch


[Index of Archives]     [Linux KVM Devel]     [Linux Virtualization]     [Big List of Linux Books]     [Linux SCSI]     [Yosemite Forum]

  Powered by Linux