ufsmount.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. /*-
  2. * Copyright (c) 1982, 1986, 1989, 1993
  3. * The Regents of the University of California. All rights reserved.
  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 REGENTS 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 REGENTS 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. * @(#)ufsmount.h 8.6 (Berkeley) 3/30/95
  30. * $FreeBSD$
  31. */
  32. #ifdef MALLOC_DECLARE
  33. MALLOC_DECLARE(M_UFSMNT);
  34. #endif
  35. typedef struct Buf Buf;
  36. typedef struct Fs Fs;
  37. typedef struct inode inode;
  38. struct nameidata;
  39. struct taskqueue;
  40. struct timeval;
  41. typedef struct Ucred Ucred;
  42. struct uio;
  43. struct vnode;
  44. struct ufs_extattr_per_mount;
  45. struct jblocks;
  46. struct inodedep;
  47. struct MountPoint;
  48. //TAILQ_HEAD(inodedeplst, inodedep);
  49. //LIST_HEAD(bmsafemaphd, bmsafemap);
  50. /* This structure describes the UFS specific mount structure data. */
  51. // TODO HARVEY Maybe combine this with MountPoint?
  52. typedef struct ufsmount {
  53. MountPoint *um_mountp; /* filesystem vfs structure */
  54. //struct cdev *um_dev; /* device mounted */
  55. //struct g_consumer *um_cp;
  56. //struct bufobj *um_bo; /* Buffer cache object */
  57. //struct vnode *um_devvp; /* block device mounted vnode */
  58. uint64_t um_fstype; /* type of filesystem */
  59. Fs *um_fs; /* pointer to superblock */
  60. //struct ufs_extattr_per_mount um_extattr; /* extended attrs */
  61. uint64_t um_nindir; /* indirect ptrs per block */
  62. uint64_t um_bptrtodb; /* indir ptr to disk block */
  63. uint64_t um_seqinc; /* inc between seq blocks */
  64. QLock um_lock; /* Protects ufsmount & fs */
  65. //pid_t um_fsckpid; /* PID permitted fsck sysctls */
  66. //struct mount_softdeps *um_softdep; /* softdep mgmt structure */
  67. //struct vnode *um_quotas[MAXQUOTAS]; /* pointer to quota files */
  68. //struct ucred *um_cred[MAXQUOTAS]; /* quota file access cred */
  69. //time_t um_btime[MAXQUOTAS]; /* block quota time limit */
  70. //time_t um_itime[MAXQUOTAS]; /* inode quota time limit */
  71. //char um_qflags[MAXQUOTAS]; /* quota specific flags */
  72. int64_t um_savedmaxfilesize; /* XXX - limit maxfilesize */
  73. //int um_candelete; /* devvp supports TRIM */
  74. //int um_writesuspended; /* suspension in progress */
  75. //uint um_trim_inflight;
  76. //struct taskqueue *um_trim_tq;
  77. int (*um_balloc)(vnode *, off_t, int, Ucred *, int, Buf **);
  78. int (*um_blkatoff)(vnode *, off_t, char **, Buf **);
  79. int (*um_truncate)(vnode *, off_t, int, Ucred *);
  80. int (*um_update)(vnode *, int);
  81. int (*um_valloc)(vnode *, int, Ucred *, vnode **);
  82. int (*um_vfree)(vnode *, ino_t, int);
  83. void (*um_ifree)(ufsmount *, inode *);
  84. int (*um_rdonly)(inode *);
  85. void (*um_snapgone)(inode *);
  86. } ufsmount;
  87. /*#define UFS_BALLOC(aa, bb, cc, dd, ee, ff) VFSTOUFS((aa)->v_mount)->um_balloc(aa, bb, cc, dd, ee, ff)
  88. #define UFS_BLKATOFF(aa, bb, cc, dd) VFSTOUFS((aa)->v_mount)->um_blkatoff(aa, bb, cc, dd)
  89. #define UFS_TRUNCATE(aa, bb, cc, dd) VFSTOUFS((aa)->v_mount)->um_truncate(aa, bb, cc, dd)
  90. #define UFS_UPDATE(aa, bb) VFSTOUFS((aa)->v_mount)->um_update(aa, bb)
  91. #define UFS_VALLOC(aa, bb, cc, dd) VFSTOUFS((aa)->v_mount)->um_valloc(aa, bb, cc, dd)
  92. #define UFS_VFREE(aa, bb, cc) VFSTOUFS((aa)->v_mount)->um_vfree(aa, bb, cc)
  93. #define UFS_IFREE(aa, bb) ((aa)->um_ifree(aa, bb))
  94. #define UFS_RDONLY(aa) (ITOUMP(aa)->um_rdonly(aa))
  95. #define UFS_SNAPGONE(aa) (ITOUMP(aa)->um_snapgone(aa))
  96. #define UFS_LOCK(aa) mtx_lock(&(aa)->um_lock)
  97. #define UFS_UNLOCK(aa) mtx_unlock(&(aa)->um_lock)
  98. #define UFS_MTX(aa) (&(aa)->um_lock)
  99. */
  100. /*
  101. * Filesystem types
  102. */
  103. #define UFS1 1
  104. #define UFS2 2
  105. /*
  106. * Flags describing the state of quotas.
  107. */
  108. #define QTF_OPENING 0x01 /* Q_QUOTAON in progress */
  109. #define QTF_CLOSING 0x02 /* Q_QUOTAOFF in progress */
  110. #define QTF_64BIT 0x04 /* 64-bit quota file */
  111. /*
  112. * Macros to access filesystem parameters in the ufsmount structure.
  113. * Used by ufs_bmap.
  114. */
  115. #define blkptrtodb(ump, b) ((b) << (ump)->um_bptrtodb)
  116. #define is_sequential(ump, a, b) ((b) == (a) + ump->um_seqinc)