fs.h 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*
  2. * Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009
  3. * The President and Fellows of Harvard College.
  4. *
  5. * Redistribution and use in source and binary forms, with or without
  6. * modification, are permitted provided that the following conditions
  7. * are met:
  8. * 1. Redistributions of source code must retain the above copyright
  9. * notice, this list of conditions and the following disclaimer.
  10. * 2. Redistributions in binary form must reproduce the above copyright
  11. * notice, this list of conditions and the following disclaimer in the
  12. * documentation and/or other materials provided with the distribution.
  13. * 3. Neither the name of the University nor the names of its contributors
  14. * may be used to endorse or promote products derived from this software
  15. * without specific prior written permission.
  16. *
  17. * THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND
  18. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  19. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  20. * ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE
  21. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  22. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  23. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  24. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  25. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  26. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  27. * SUCH DAMAGE.
  28. */
  29. #ifndef _FS_H_
  30. #define _FS_H_
  31. /*
  32. * Abstract filesystem. (Or device accessible as a file.)
  33. *
  34. * Operations:
  35. *
  36. * fs_sync - Flush all dirty buffers to disk.
  37. * fs_getvolname - Return volume name of filesystem.
  38. * fs_getroot - Return root vnode of filesystem.
  39. * fs_unmount - Attempt unmount of filesystem.
  40. *
  41. * fs_getvolname may return NULL on filesystem types that don't
  42. * support the concept of a volume name. The string returned is
  43. * assumed to point into the filesystem's private storage and live
  44. * until unmount time.
  45. *
  46. * If the volume name changes on the fly, there is no way at present
  47. * to make sure such changes don't cause name conflicts. So it probably
  48. * should be considered fixed.
  49. *
  50. * fs_getroot should increment the refcount of the vnode returned.
  51. * It should not ever return NULL.
  52. *
  53. * If fs_unmount returns an error, the filesystem stays mounted, and
  54. * consequently the struct fs instance should remain valid. On success,
  55. * however, the filesystem object and all storage associated with the
  56. * filesystem should have been discarded/released.
  57. *
  58. * fs_data is a pointer to filesystem-specific data.
  59. */
  60. struct fs {
  61. int (*fs_sync)(struct fs *);
  62. const char *(*fs_getvolname)(struct fs *);
  63. struct vnode *(*fs_getroot)(struct fs *);
  64. int (*fs_unmount)(struct fs *);
  65. void *fs_data;
  66. };
  67. /*
  68. * Macros to shorten the calling sequences.
  69. */
  70. #define FSOP_SYNC(fs) ((fs)->fs_sync(fs))
  71. #define FSOP_GETVOLNAME(fs) ((fs)->fs_getvolname(fs))
  72. #define FSOP_GETROOT(fs) ((fs)->fs_getroot(fs))
  73. #define FSOP_UNMOUNT(fs) ((fs)->fs_unmount(fs))
  74. #endif /* _FS_H_ */