X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=ipc%2Fshm.c;h=4fefbad7096d539d90345621ac6419d2ab904b85;hb=860abe8f7254208074cef83dc9ebc4d70ae277a9;hp=eb57e22543049f2bb157505458fc90308a797543;hpb=6842ac64ae2ed2714004a25d53d3b20f0d3af524;p=powerpc.git diff --git a/ipc/shm.c b/ipc/shm.c index eb57e22543..4fefbad709 100644 --- a/ipc/shm.c +++ b/ipc/shm.c @@ -226,8 +226,8 @@ static void shm_close(struct vm_area_struct *vma) mutex_unlock(&shm_ids(ns).mutex); } -struct page *shm_nopage(struct vm_area_struct *vma, unsigned long address, - int *type) +static struct page *shm_nopage(struct vm_area_struct *vma, + unsigned long address, int *type) { struct file *file = vma->vm_file; struct shm_file_data *sfd = shm_file_data(file); @@ -285,21 +285,41 @@ static int shm_release(struct inode *ino, struct file *file) return 0; } -#ifndef CONFIG_MMU +static int shm_fsync(struct file *file, struct dentry *dentry, int datasync) +{ + int (*fsync) (struct file *, struct dentry *, int datasync); + struct shm_file_data *sfd = shm_file_data(file); + int ret = -EINVAL; + + fsync = sfd->file->f_op->fsync; + if (fsync) + ret = fsync(sfd->file, sfd->file->f_path.dentry, datasync); + return ret; +} + static unsigned long shm_get_unmapped_area(struct file *file, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags) { struct shm_file_data *sfd = shm_file_data(file); - return sfd->file->f_op->get_unmapped_area(sfd->file, addr, len, pgoff, - flags); + return get_unmapped_area(sfd->file, addr, len, pgoff, flags); +} + +int is_file_shm_hugepages(struct file *file) +{ + int ret = 0; + + if (file->f_op == &shm_file_operations) { + struct shm_file_data *sfd; + sfd = shm_file_data(file); + ret = is_file_hugepages(sfd->file); + } + return ret; } -#else -#define shm_get_unmapped_area NULL -#endif static const struct file_operations shm_file_operations = { .mmap = shm_mmap, + .fsync = shm_fsync, .release = shm_release, .get_unmapped_area = shm_get_unmapped_area, };