diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-11-24 08:23:18 +0900 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-11-24 08:23:18 +0900 | 
| commit | a4ec046c98283d9f36817589081e14850570739f (patch) | |
| tree | 0f0b573bf74ab0eef28c9050c453de9427d328de /drivers/xen/xenfs | |
| parent | 3cbaa0f7a78d3b970b566629ee298c310780b919 (diff) | |
| parent | 9b8321531a90c400e9c561d903926eee79639dcf (diff) | |
Merge branch 'upstream/for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen
* 'upstream/for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen: (23 commits)
  xen/events: Use PIRQ instead of GSI value when unmapping MSI/MSI-X irqs.
  xen: set IO permission early (before early_cpu_init())
  xen: re-enable boot-time ballooning
  xen/balloon: make sure we only include remaining extra ram
  xen/balloon: the balloon_lock is useless
  xen: add extra pages to balloon
  xen: make evtchn's name less generic
  xen/evtchn: the evtchn device is non-seekable
  Revert "xen/privcmd: create address space to allow writable mmaps"
  xen/events: use locked set|clear_bit() for cpu_evtchn_mask
  xen/evtchn: clear secondary CPUs' cpu_evtchn_mask[] after restore
  xen/xenfs: update xenfs_mount for new prototype
  xen: fix header export to userspace
  xen: implement XENMEM_machphys_mapping
  xen: set vma flag VM_PFNMAP in the privcmd mmap file_op
  xen: xenfs: privcmd: check put_user() return code
  xen/evtchn: add missing static
  xen/evtchn: Fix name of Xen event-channel device
  xen/evtchn: don't do unbind_from_irqhandler under spinlock
  xen/evtchn: remove spurious barrier
  ...
Diffstat (limited to 'drivers/xen/xenfs')
| -rw-r--r-- | drivers/xen/xenfs/privcmd.c | 13 | ||||
| -rw-r--r-- | drivers/xen/xenfs/super.c | 46 | 
2 files changed, 12 insertions, 47 deletions
| diff --git a/drivers/xen/xenfs/privcmd.c b/drivers/xen/xenfs/privcmd.c index 0f5d4162b22d..dbd3b16fd131 100644 --- a/drivers/xen/xenfs/privcmd.c +++ b/drivers/xen/xenfs/privcmd.c @@ -265,9 +265,7 @@ static int mmap_return_errors(void *data, void *state)  	xen_pfn_t *mfnp = data;  	struct mmap_batch_state *st = state; -	put_user(*mfnp, st->user++); - -	return 0; +	return put_user(*mfnp, st->user++);  }  static struct vm_operations_struct privcmd_vm_ops; @@ -322,10 +320,8 @@ static long privcmd_ioctl_mmap_batch(void __user *udata)  	up_write(&mm->mmap_sem);  	if (state.err > 0) { -		ret = 0; -  		state.user = m.arr; -		traverse_pages(m.num, sizeof(xen_pfn_t), +		ret = traverse_pages(m.num, sizeof(xen_pfn_t),  			       &pagelist,  			       mmap_return_errors, &state);  	} @@ -383,8 +379,9 @@ static int privcmd_mmap(struct file *file, struct vm_area_struct *vma)  	if (xen_feature(XENFEAT_auto_translated_physmap))  		return -ENOSYS; -	/* DONTCOPY is essential for Xen as copy_page_range is broken. */ -	vma->vm_flags |= VM_RESERVED | VM_IO | VM_DONTCOPY; +	/* DONTCOPY is essential for Xen because copy_page_range doesn't know +	 * how to recreate these mappings */ +	vma->vm_flags |= VM_RESERVED | VM_IO | VM_DONTCOPY | VM_PFNMAP;  	vma->vm_ops = &privcmd_vm_ops;  	vma->vm_private_data = NULL; diff --git a/drivers/xen/xenfs/super.c b/drivers/xen/xenfs/super.c index f6339d11d59c..1aa389719846 100644 --- a/drivers/xen/xenfs/super.c +++ b/drivers/xen/xenfs/super.c @@ -12,8 +12,6 @@  #include <linux/module.h>  #include <linux/fs.h>  #include <linux/magic.h> -#include <linux/mm.h> -#include <linux/backing-dev.h>  #include <xen/xen.h> @@ -24,28 +22,12 @@  MODULE_DESCRIPTION("Xen filesystem");  MODULE_LICENSE("GPL"); -static int xenfs_set_page_dirty(struct page *page) -{ -	return !TestSetPageDirty(page); -} - -static const struct address_space_operations xenfs_aops = { -	.set_page_dirty = xenfs_set_page_dirty, -}; - -static struct backing_dev_info xenfs_backing_dev_info = { -	.ra_pages	= 0,	/* No readahead */ -	.capabilities	= BDI_CAP_NO_ACCT_AND_WRITEBACK, -}; -  static struct inode *xenfs_make_inode(struct super_block *sb, int mode)  {  	struct inode *ret = new_inode(sb);  	if (ret) {  		ret->i_mode = mode; -		ret->i_mapping->a_ops = &xenfs_aops; -		ret->i_mapping->backing_dev_info = &xenfs_backing_dev_info;  		ret->i_uid = ret->i_gid = 0;  		ret->i_blocks = 0;  		ret->i_atime = ret->i_mtime = ret->i_ctime = CURRENT_TIME; @@ -121,9 +103,9 @@ static int xenfs_fill_super(struct super_block *sb, void *data, int silent)  	return rc;  } -static int xenfs_mount(struct file_system_type *fs_type, -			int flags, const char *dev_name, -			void *data) +static struct dentry *xenfs_mount(struct file_system_type *fs_type, +				  int flags, const char *dev_name, +				  void *data)  {  	return mount_single(fs_type, flags, data, xenfs_fill_super);  } @@ -137,25 +119,11 @@ static struct file_system_type xenfs_type = {  static int __init xenfs_init(void)  { -	int err; -	if (!xen_domain()) { -		printk(KERN_INFO "xenfs: not registering filesystem on non-xen platform\n"); -		return 0; -	} - -	err = register_filesystem(&xenfs_type); -	if (err) { -		printk(KERN_ERR "xenfs: Unable to register filesystem!\n"); -		goto out; -	} - -	err = bdi_init(&xenfs_backing_dev_info); -	if (err) -		unregister_filesystem(&xenfs_type); - - out: +	if (xen_domain()) +		return register_filesystem(&xenfs_type); -	return err; +	printk(KERN_INFO "XENFS: not registering filesystem on non-xen platform\n"); +	return 0;  }  static void __exit xenfs_exit(void) | 
