coda_linux.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Coda File System, Linux Kernel module
  4. *
  5. * Original version, adapted from cfs_mach.c, (C) Carnegie Mellon University
  6. * Linux modifications (C) 1996, Peter J. Braam
  7. * Rewritten for Linux 2.1 (C) 1997 Carnegie Mellon University
  8. *
  9. * Carnegie Mellon University encourages users of this software to
  10. * contribute improvements to the Coda project.
  11. */
  12. #ifndef _LINUX_CODA_FS
  13. #define _LINUX_CODA_FS
  14. #ifdef pr_fmt
  15. #undef pr_fmt
  16. #endif
  17. #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  18. #include <linux/kernel.h>
  19. #include <linux/param.h>
  20. #include <linux/mm.h>
  21. #include <linux/vmalloc.h>
  22. #include <linux/slab.h>
  23. #include <linux/wait.h>
  24. #include <linux/types.h>
  25. #include <linux/fs.h>
  26. #include "coda_fs_i.h"
  27. /* operations */
  28. extern const struct inode_operations coda_dir_inode_operations;
  29. extern const struct inode_operations coda_file_inode_operations;
  30. extern const struct inode_operations coda_ioctl_inode_operations;
  31. extern const struct dentry_operations coda_dentry_operations;
  32. extern const struct address_space_operations coda_file_aops;
  33. extern const struct address_space_operations coda_symlink_aops;
  34. extern const struct file_operations coda_dir_operations;
  35. extern const struct file_operations coda_file_operations;
  36. extern const struct file_operations coda_ioctl_operations;
  37. /* operations shared over more than one file */
  38. int coda_open(struct inode *i, struct file *f);
  39. int coda_release(struct inode *i, struct file *f);
  40. int coda_permission(struct user_namespace *mnt_userns, struct inode *inode,
  41. int mask);
  42. int coda_revalidate_inode(struct inode *);
  43. int coda_getattr(struct user_namespace *, const struct path *, struct kstat *,
  44. u32, unsigned int);
  45. int coda_setattr(struct user_namespace *, struct dentry *, struct iattr *);
  46. /* this file: helpers */
  47. char *coda_f2s(struct CodaFid *f);
  48. int coda_iscontrol(const char *name, size_t length);
  49. umode_t coda_inode_type(struct coda_vattr *attr);
  50. void coda_vattr_to_iattr(struct inode *, struct coda_vattr *);
  51. void coda_iattr_to_vattr(struct iattr *, struct coda_vattr *);
  52. unsigned short coda_flags_to_cflags(unsigned short);
  53. /* inode to cnode access functions */
  54. static inline struct coda_inode_info *ITOC(struct inode *inode)
  55. {
  56. return container_of(inode, struct coda_inode_info, vfs_inode);
  57. }
  58. static __inline__ struct CodaFid *coda_i2f(struct inode *inode)
  59. {
  60. return &(ITOC(inode)->c_fid);
  61. }
  62. static __inline__ char *coda_i2s(struct inode *inode)
  63. {
  64. return coda_f2s(&(ITOC(inode)->c_fid));
  65. }
  66. /* this will not zap the inode away */
  67. static __inline__ void coda_flag_inode(struct inode *inode, int flag)
  68. {
  69. struct coda_inode_info *cii = ITOC(inode);
  70. if (!inode)
  71. return;
  72. spin_lock(&cii->c_lock);
  73. cii->c_flags |= flag;
  74. spin_unlock(&cii->c_lock);
  75. }
  76. #endif