file.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. * linux/fs/sysv/file.c
  3. *
  4. * minix/file.c
  5. * Copyright (C) 1991, 1992 Linus Torvalds
  6. *
  7. * coh/file.c
  8. * Copyright (C) 1993 Pascal Haible, Bruno Haible
  9. *
  10. * sysv/file.c
  11. * Copyright (C) 1993 Bruno Haible
  12. *
  13. * SystemV/Coherent regular file handling primitives
  14. */
  15. #include "sysv.h"
  16. /*
  17. * We have mostly NULLs here: the current defaults are OK for
  18. * the coh filesystem.
  19. */
  20. const struct file_operations sysv_file_operations = {
  21. .llseek = generic_file_llseek,
  22. .read_iter = generic_file_read_iter,
  23. .write_iter = generic_file_write_iter,
  24. .mmap = generic_file_mmap,
  25. .fsync = generic_file_fsync,
  26. .splice_read = generic_file_splice_read,
  27. };
  28. static int sysv_setattr(struct dentry *dentry, struct iattr *attr)
  29. {
  30. struct inode *inode = d_inode(dentry);
  31. int error;
  32. error = inode_change_ok(inode, attr);
  33. if (error)
  34. return error;
  35. if ((attr->ia_valid & ATTR_SIZE) &&
  36. attr->ia_size != i_size_read(inode)) {
  37. error = inode_newsize_ok(inode, attr->ia_size);
  38. if (error)
  39. return error;
  40. truncate_setsize(inode, attr->ia_size);
  41. sysv_truncate(inode);
  42. }
  43. setattr_copy(inode, attr);
  44. mark_inode_dirty(inode);
  45. return 0;
  46. }
  47. const struct inode_operations sysv_file_inode_operations = {
  48. .setattr = sysv_setattr,
  49. .getattr = sysv_getattr,
  50. };