Line data Source code
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 0 : 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 0 : return current->mm->get_unmapped_area(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 = generic_file_mmap, 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 : };