/****************************************************************************** * prmigr_back.c * * XenLinux process migration tool * * Copyright (c) 2005 Anton Korenyushkin tiger@xxxxxxxxxxxxxx */ #include #include #include #include #include #include #include #define PRMIGR_PROC_FNAME "prmigr" #define PRMIGR_DIR "/tools" /* proc file system stuff */ static struct proc_dir_entry *prmigr_proc_file; static ssize_t prmigr_input(struct file *filp, const char *buff, size_t len, loff_t * off) { int err; err = xenbus_mkdir(PRMIGR_DIR, "prmigr"); if (err) printk(">>>prmigr_back: mkdir failed with %d\n", err); else printk(">>>prmigr_back: mkdir succeded\n"); return len; } static int prmigr_permission(struct inode *inode, int op, struct nameidata *foo) { if (op == 2 && current->euid == 0) return 0; return -EACCES; } int prmigr_open(struct inode *inode, struct file *file) { try_module_get(THIS_MODULE); return 0; } int prmigr_close(struct inode *inode, struct file *file) { module_put(THIS_MODULE); return 0; /* success */ } static struct file_operations prmigr_fops = { .write = prmigr_input, .open = prmigr_open, .release = prmigr_close, }; static struct inode_operations prmigr_iops = { .permission = prmigr_permission, }; /* Initialisation stuff */ static int __init prmigr_back_init(void) { int ret = 0; prmigr_proc_file = create_xen_proc_entry(PRMIGR_PROC_FNAME, 0200); prmigr_proc_file->owner = THIS_MODULE; prmigr_proc_file->proc_iops = &prmigr_iops; prmigr_proc_file->proc_fops = &prmigr_fops; prmigr_proc_file->mode = S_IWUSR; prmigr_proc_file->uid = 0; prmigr_proc_file->gid = 0; prmigr_proc_file->size = 0; if (prmigr_proc_file == NULL) { ret = -ENOMEM; remove_xen_proc_entry(PRMIGR_PROC_FNAME); /* FIXME */ printk(KERN_INFO "Error: Could not initialize %s/%s", "/proc/xen", PRMIGR_PROC_FNAME); } return ret; } __initcall(prmigr_back_init); /* * Local variables: * c-file-style: "linux" * indent-tabs-mode: t * c-indent-level: 8 * c-basic-offset: 8 * tab-width: 8 * End: */