projects
/
powerpc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge master.kernel.org:/home/rmk/linux-2.6-arm
[powerpc.git]
/
drivers
/
char
/
mem.c
diff --git
a/drivers/char/mem.c
b/drivers/char/mem.c
index
6511012
..
f5c160c
100644
(file)
--- a/
drivers/char/mem.c
+++ b/
drivers/char/mem.c
@@
-26,6
+26,7
@@
#include <linux/backing-dev.h>
#include <linux/bootmem.h>
#include <linux/pipe_fs_i.h>
#include <linux/backing-dev.h>
#include <linux/bootmem.h>
#include <linux/pipe_fs_i.h>
+#include <linux/pfn.h>
#include <asm/uaccess.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#include <asm/io.h>
@@
-645,7
+646,8
@@
static inline size_t read_zero_pagealigned(char __user * buf, size_t size)
count = size;
zap_page_range(vma, addr, count, NULL);
count = size;
zap_page_range(vma, addr, count, NULL);
- zeromap_page_range(vma, addr, count, PAGE_COPY);
+ if (zeromap_page_range(vma, addr, count, PAGE_COPY))
+ break;
size -= count;
buf += count;
size -= count;
buf += count;
@@
-712,11
+714,14
@@
out:
static int mmap_zero(struct file * file, struct vm_area_struct * vma)
{
static int mmap_zero(struct file * file, struct vm_area_struct * vma)
{
+ int err;
+
if (vma->vm_flags & VM_SHARED)
return shmem_zero_setup(vma);
if (vma->vm_flags & VM_SHARED)
return shmem_zero_setup(vma);
- if (zeromap_page_range(vma, vma->vm_start, vma->vm_end - vma->vm_start, vma->vm_page_prot))
- return -EAGAIN;
- return 0;
+ err = zeromap_page_range(vma, vma->vm_start,
+ vma->vm_end - vma->vm_start, vma->vm_page_prot);
+ BUG_ON(err == -EEXIST);
+ return err;
}
#else /* CONFIG_MMU */
static ssize_t read_zero(struct file * file, char * buf,
}
#else /* CONFIG_MMU */
static ssize_t read_zero(struct file * file, char * buf,
@@
-773,7
+778,7
@@
static loff_t memory_lseek(struct file * file, loff_t offset, int orig)
{
loff_t ret;
{
loff_t ret;
- mutex_lock(&file->f_dentry->d_inode->i_mutex);
+ mutex_lock(&file->f_
path.
dentry->d_inode->i_mutex);
switch (orig) {
case 0:
file->f_pos = offset;
switch (orig) {
case 0:
file->f_pos = offset;
@@
-788,7
+793,7
@@
static loff_t memory_lseek(struct file * file, loff_t offset, int orig)
default:
ret = -EINVAL;
}
default:
ret = -EINVAL;
}
- mutex_unlock(&file->f_dentry->d_inode->i_mutex);
+ mutex_unlock(&file->f_
path.
dentry->d_inode->i_mutex);
return ret;
}
return ret;
}
@@
-979,10
+984,10
@@
static int __init chr_dev_init(void)
mem_class = class_create(THIS_MODULE, "mem");
for (i = 0; i < ARRAY_SIZE(devlist); i++)
mem_class = class_create(THIS_MODULE, "mem");
for (i = 0; i < ARRAY_SIZE(devlist); i++)
-
class_
device_create(mem_class, NULL,
-
MKDEV(MEM_MAJOR, devlist[i].minor),
-
NULL,
devlist[i].name);
-
+ device_create(mem_class, NULL,
+ MKDEV(MEM_MAJOR, devlist[i].minor),
+ devlist[i].name);
+
return 0;
}
return 0;
}