Version:  2.0.40 2.2.26 2.4.37 2.6.39 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15

Linux/drivers/xen/xenfs/super.c

  1 /*
  2  *  xenfs.c - a filesystem for passing info between the a domain and
  3  *  the hypervisor.
  4  *
  5  * 2008-10-07  Alex Zeffertt    Replaced /proc/xen/xenbus with xenfs filesystem
  6  *                              and /proc/xen compatibility mount point.
  7  *                              Turned xenfs into a loadable module.
  8  */
  9 
 10 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 11 
 12 #include <linux/kernel.h>
 13 #include <linux/errno.h>
 14 #include <linux/module.h>
 15 #include <linux/fs.h>
 16 #include <linux/magic.h>
 17 
 18 #include <xen/xen.h>
 19 
 20 #include "xenfs.h"
 21 #include "../privcmd.h"
 22 #include "../xenbus/xenbus_comms.h"
 23 
 24 #include <asm/xen/hypervisor.h>
 25 
 26 MODULE_DESCRIPTION("Xen filesystem");
 27 MODULE_LICENSE("GPL");
 28 
 29 static ssize_t capabilities_read(struct file *file, char __user *buf,
 30                                  size_t size, loff_t *off)
 31 {
 32         char *tmp = "";
 33 
 34         if (xen_initial_domain())
 35                 tmp = "control_d\n";
 36 
 37         return simple_read_from_buffer(buf, size, off, tmp, strlen(tmp));
 38 }
 39 
 40 static const struct file_operations capabilities_file_ops = {
 41         .read = capabilities_read,
 42         .llseek = default_llseek,
 43 };
 44 
 45 static int xenfs_fill_super(struct super_block *sb, void *data, int silent)
 46 {
 47         static struct tree_descr xenfs_files[] = {
 48                 [2] = { "xenbus", &xen_xenbus_fops, S_IRUSR|S_IWUSR },
 49                 { "capabilities", &capabilities_file_ops, S_IRUGO },
 50                 { "privcmd", &xen_privcmd_fops, S_IRUSR|S_IWUSR },
 51                 {""},
 52         };
 53 
 54         static struct tree_descr xenfs_init_files[] = {
 55                 [2] = { "xenbus", &xen_xenbus_fops, S_IRUSR|S_IWUSR },
 56                 { "capabilities", &capabilities_file_ops, S_IRUGO },
 57                 { "privcmd", &xen_privcmd_fops, S_IRUSR|S_IWUSR },
 58                 { "xsd_kva", &xsd_kva_file_ops, S_IRUSR|S_IWUSR},
 59                 { "xsd_port", &xsd_port_file_ops, S_IRUSR|S_IWUSR},
 60                 {""},
 61         };
 62 
 63         return simple_fill_super(sb, XENFS_SUPER_MAGIC,
 64                         xen_initial_domain() ? xenfs_init_files : xenfs_files);
 65 }
 66 
 67 static struct dentry *xenfs_mount(struct file_system_type *fs_type,
 68                                   int flags, const char *dev_name,
 69                                   void *data)
 70 {
 71         return mount_single(fs_type, flags, data, xenfs_fill_super);
 72 }
 73 
 74 static struct file_system_type xenfs_type = {
 75         .owner =        THIS_MODULE,
 76         .name =         "xenfs",
 77         .mount =        xenfs_mount,
 78         .kill_sb =      kill_litter_super,
 79 };
 80 MODULE_ALIAS_FS("xenfs");
 81 
 82 static int __init xenfs_init(void)
 83 {
 84         if (xen_domain())
 85                 return register_filesystem(&xenfs_type);
 86 
 87         pr_info("not registering filesystem on non-xen platform\n");
 88         return 0;
 89 }
 90 
 91 static void __exit xenfs_exit(void)
 92 {
 93         if (xen_domain())
 94                 unregister_filesystem(&xenfs_type);
 95 }
 96 
 97 module_init(xenfs_init);
 98 module_exit(xenfs_exit);
 99 
100 

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us