|
@@ -427,6 +427,17 @@ static int shm_split(struct vm_area_struct *vma, unsigned long addr)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static unsigned long shm_pagesize(struct vm_area_struct *vma)
|
|
|
+{
|
|
|
+ struct file *file = vma->vm_file;
|
|
|
+ struct shm_file_data *sfd = shm_file_data(file);
|
|
|
+
|
|
|
+ if (sfd->vm_ops->pagesize)
|
|
|
+ return sfd->vm_ops->pagesize(vma);
|
|
|
+
|
|
|
+ return PAGE_SIZE;
|
|
|
+}
|
|
|
+
|
|
|
#ifdef CONFIG_NUMA
|
|
|
static int shm_set_policy(struct vm_area_struct *vma, struct mempolicy *new)
|
|
|
{
|
|
@@ -554,6 +565,7 @@ static const struct vm_operations_struct shm_vm_ops = {
|
|
|
.close = shm_close, /* callback for when the vm-area is released */
|
|
|
.fault = shm_fault,
|
|
|
.split = shm_split,
|
|
|
+ .pagesize = shm_pagesize,
|
|
|
#if defined(CONFIG_NUMA)
|
|
|
.set_policy = shm_set_policy,
|
|
|
.get_policy = shm_get_policy,
|