Implement read(2) in ashmem driver
Bug: 2595601 Change-Id: I47c0016f594f9354fb8658ccb26e3d395bcb137b Signed-off-by: Bjorn Bringert <bringert@android.com>
This commit is contained in:
committed by
Colin Cross
parent
f23ba5021d
commit
6809f0087c
26
mm/ashmem.c
26
mm/ashmem.c
@@ -211,6 +211,31 @@ static int ashmem_release(struct inode *ignored, struct file *file)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ssize_t ashmem_read(struct file *file, char __user *buf,
|
||||||
|
size_t len, loff_t *pos)
|
||||||
|
{
|
||||||
|
struct ashmem_area *asma = file->private_data;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
mutex_lock(&ashmem_mutex);
|
||||||
|
|
||||||
|
/* If size is not set, or set to 0, always return EOF. */
|
||||||
|
if (asma->size == 0) {
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!asma->file) {
|
||||||
|
ret = -EBADF;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = asma->file->f_op->read(asma->file, buf, len, pos);
|
||||||
|
|
||||||
|
out:
|
||||||
|
mutex_unlock(&ashmem_mutex);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static int ashmem_mmap(struct file *file, struct vm_area_struct *vma)
|
static int ashmem_mmap(struct file *file, struct vm_area_struct *vma)
|
||||||
{
|
{
|
||||||
struct ashmem_area *asma = file->private_data;
|
struct ashmem_area *asma = file->private_data;
|
||||||
@@ -604,6 +629,7 @@ static struct file_operations ashmem_fops = {
|
|||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.open = ashmem_open,
|
.open = ashmem_open,
|
||||||
.release = ashmem_release,
|
.release = ashmem_release,
|
||||||
|
.read = ashmem_read,
|
||||||
.mmap = ashmem_mmap,
|
.mmap = ashmem_mmap,
|
||||||
.unlocked_ioctl = ashmem_ioctl,
|
.unlocked_ioctl = ashmem_ioctl,
|
||||||
.compat_ioctl = ashmem_ioctl,
|
.compat_ioctl = ashmem_ioctl,
|
||||||
|
|||||||
Reference in New Issue
Block a user