file-mmu.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. * NOTE! This filesystem is probably most useful
  13. * not as a real filesystem, but as an example of
  14. * how virtual filesystems can be written.
  15. *
  16. * It doesn't get much simpler than this. Consider
  17. * that this file implements the full semantics of
  18. * a POSIX-compliant read-write filesystem.
  19. *
  20. * Note in particular how the filesystem does not
  21. * need to implement any data structures of its own
  22. * to keep track of the virtual data: using the VFS
  23. * caches is sufficient.
  24. */
  25. #include <linux/fs.h>
  26. #include <linux/mm.h>
  27. #include <linux/ramfs.h>
  28. #include <linux/sched.h>
  29. #include "internal.h"
  30. static unsigned long ramfs_mmu_get_unmapped_area(struct file *file,
  31. unsigned long addr, unsigned long len, unsigned long pgoff,
  32. unsigned long flags)
  33. {
  34. return current->mm->get_unmapped_area(file, addr, len, pgoff, flags);
  35. }
  36. const struct file_operations ramfs_file_operations = {
  37. .read_iter = generic_file_read_iter,
  38. .write_iter = generic_file_write_iter,
  39. .mmap = generic_file_mmap,
  40. .fsync = noop_fsync,
  41. .splice_read = generic_file_splice_read,
  42. .splice_write = iter_file_splice_write,
  43. .llseek = generic_file_llseek,
  44. .get_unmapped_area = ramfs_mmu_get_unmapped_area,
  45. };
  46. const struct inode_operations ramfs_file_inode_operations = {
  47. .setattr = simple_setattr,
  48. .getattr = simple_getattr,
  49. };