Version:  2.0.40 2.2.26 2.4.37 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 3.19 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8

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 #ifdef CONFIG_XEN_SYMS
 61                 { "xensyms", &xensyms_ops, S_IRUSR},
 62 #endif
 63                 {""},
 64         };
 65 
 66         return simple_fill_super(sb, XENFS_SUPER_MAGIC,
 67                         xen_initial_domain() ? xenfs_init_files : xenfs_files);
 68 }
 69 
 70 static struct dentry *xenfs_mount(struct file_system_type *fs_type,
 71                                   int flags, const char *dev_name,
 72                                   void *data)
 73 {
 74         return mount_single(fs_type, flags, data, xenfs_fill_super);
 75 }
 76 
 77 static struct file_system_type xenfs_type = {
 78         .owner =        THIS_MODULE,
 79         .name =         "xenfs",
 80         .mount =        xenfs_mount,
 81         .kill_sb =      kill_litter_super,
 82 };
 83 MODULE_ALIAS_FS("xenfs");
 84 
 85 static int __init xenfs_init(void)
 86 {
 87         if (xen_domain())
 88                 return register_filesystem(&xenfs_type);
 89 
 90         pr_info("not registering filesystem on non-xen platform\n");
 91         return 0;
 92 }
 93 
 94 static void __exit xenfs_exit(void)
 95 {
 96         if (xen_domain())
 97                 unregister_filesystem(&xenfs_type);
 98 }
 99 
100 module_init(xenfs_init);
101 module_exit(xenfs_exit);
102 
103 

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