| 1 | /* file-mmu.c: ramfs MMU-based file operations | 
|---|
| 2 | * | 
|---|
| 3 | * Resizable simple ram filesystem for Linux. | 
|---|
| 4 | * | 
|---|
| 5 | * Copyright (C) 2000 Linus Torvalds. | 
|---|
| 6 | *               2000 Transmeta Corp. | 
|---|
| 7 | * | 
|---|
| 8 | * Usage limits added by David Gibson, Linuxcare Australia. | 
|---|
| 9 | * This file is released under the GPL. | 
|---|
| 10 | */ | 
|---|
| 11 |  | 
|---|
| 12 | /* | 
|---|
| 13 | * NOTE! This filesystem is probably most useful | 
|---|
| 14 | * not as a real filesystem, but as an example of | 
|---|
| 15 | * how virtual filesystems can be written. | 
|---|
| 16 | * | 
|---|
| 17 | * It doesn't get much simpler than this. Consider | 
|---|
| 18 | * that this file implements the full semantics of | 
|---|
| 19 | * a POSIX-compliant read-write filesystem. | 
|---|
| 20 | * | 
|---|
| 21 | * Note in particular how the filesystem does not | 
|---|
| 22 | * need to implement any data structures of its own | 
|---|
| 23 | * to keep track of the virtual data: using the VFS | 
|---|
| 24 | * caches is sufficient. | 
|---|
| 25 | */ | 
|---|
| 26 |  | 
|---|
| 27 | #include <linux/fs.h> | 
|---|
| 28 | #include <linux/mm.h> | 
|---|
| 29 | #include <linux/ramfs.h> | 
|---|
| 30 | #include <linux/sched.h> | 
|---|
| 31 |  | 
|---|
| 32 | #include "internal.h" | 
|---|
| 33 |  | 
|---|
| 34 | static unsigned long ramfs_mmu_get_unmapped_area(struct file *file, | 
|---|
| 35 | unsigned long addr, unsigned long len, unsigned long pgoff, | 
|---|
| 36 | unsigned long flags) | 
|---|
| 37 | { | 
|---|
| 38 | return mm_get_unmapped_area(current->mm, filp: file, addr, len, pgoff, flags); | 
|---|
| 39 | } | 
|---|
| 40 |  | 
|---|
| 41 | const struct file_operations ramfs_file_operations = { | 
|---|
| 42 | .read_iter	= generic_file_read_iter, | 
|---|
| 43 | .write_iter	= generic_file_write_iter, | 
|---|
| 44 | .mmap_prepare	= generic_file_mmap_prepare, | 
|---|
| 45 | .fsync		= noop_fsync, | 
|---|
| 46 | .splice_read	= filemap_splice_read, | 
|---|
| 47 | .splice_write	= iter_file_splice_write, | 
|---|
| 48 | .llseek		= generic_file_llseek, | 
|---|
| 49 | .get_unmapped_area	= ramfs_mmu_get_unmapped_area, | 
|---|
| 50 | }; | 
|---|
| 51 |  | 
|---|
| 52 | const struct inode_operations ramfs_file_inode_operations = { | 
|---|
| 53 | .setattr	= simple_setattr, | 
|---|
| 54 | .getattr	= simple_getattr, | 
|---|
| 55 | }; | 
|---|
| 56 |  | 
|---|