UbixOS V2  2.0
ufsmount.h
Go to the documentation of this file.
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  * 4. 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: releng/11.1/sys/ufs/ufs/ufsmount.h 306553 2016-10-01 09:19:43Z kib $
31  */
32 
33 #ifndef _UFS_UFS_UFSMOUNT_H_
34 #define _UFS_UFS_UFSMOUNT_H_
35 
36 /*
37  * Arguments to mount UFS-based filesystems
38  */
39 struct ufs_args {
40  char *fspec; /* block special device to mount */
41  //struct oexport_args export; /* network export information */
42 };
43 
44 #ifdef MALLOC_DECLARE
45 MALLOC_DECLARE(M_UFSMNT);
46 #endif
47 
48 struct buf;
49 struct inode;
50 struct nameidata;
51 struct taskqueue;
52 struct timeval;
53 struct ucred;
54 struct uio;
55 struct vnode;
56 struct ufs_extattr_per_mount;
57 struct jblocks;
58 struct inodedep;
59 
60 //TAILQ_HEAD(inodedeplst, inodedep);
61 //LIST_HEAD(bmsafemaphd, bmsafemap);
62 
63 /* This structure describes the UFS specific mount structure data. */
64 struct ufsmount {
65  struct mount *um_mountp; /* filesystem vfs structure */
66  struct cdev *um_dev; /* device mounted */
67  struct g_consumer *um_cp;
68  struct bufobj *um_bo; /* Buffer cache object */
69  struct vnode *um_devvp; /* block device mounted vnode */
70  u_long um_fstype; /* type of filesystem */
71  struct fs *um_fs; /* pointer to superblock */
72  //struct ufs_extattr_per_mount um_extattr; /* extended attrs */
73  u_long um_nindir; /* indirect ptrs per block */
74  u_long um_bptrtodb; /* indir ptr to disk block */
75  u_long um_seqinc; /* inc between seq blocks */
76  //struct mtx um_lock; /* Protects ufsmount & fs */
77  pid_t um_fsckpid; /* PID permitted fsck sysctls */
78  struct mount_softdeps *um_softdep; /* softdep mgmt structure */
79  struct vnode *um_quotas[MAXQUOTAS]; /* pointer to quota files */
80  struct ucred *um_cred[MAXQUOTAS]; /* quota file access cred */
81  time_t um_btime[MAXQUOTAS]; /* block quota time limit */
82  time_t um_itime[MAXQUOTAS]; /* inode quota time limit */
83  char um_qflags[MAXQUOTAS]; /* quota specific flags */
84  int64_t um_savedmaxfilesize; /* XXX - limit maxfilesize */
85  int um_candelete; /* devvp supports TRIM */
86  int um_writesuspended; /* suspension in progress */
88  struct taskqueue *um_trim_tq;
89  int (*um_balloc)(struct vnode *, off_t, int, struct ucred *,
90  int, struct buf **);
91  int (*um_blkatoff)(struct vnode *, off_t, char **, struct buf **);
92  int (*um_truncate)(struct vnode *, off_t, int, struct ucred *);
93  int (*um_update)(struct vnode *, int);
94  int (*um_valloc)(struct vnode *, int, struct ucred *,
95  struct vnode **);
96  int (*um_vfree)(struct vnode *, ino_t, int);
97  void (*um_ifree)(struct ufsmount *, struct inode *);
98  int (*um_rdonly)(struct inode *);
99  void (*um_snapgone)(struct inode *);
100 };
101 
102 #define UFS_BALLOC(aa, bb, cc, dd, ee, ff) VFSTOUFS((aa)->v_mount)->um_balloc(aa, bb, cc, dd, ee, ff)
103 #define UFS_BLKATOFF(aa, bb, cc, dd) VFSTOUFS((aa)->v_mount)->um_blkatoff(aa, bb, cc, dd)
104 #define UFS_TRUNCATE(aa, bb, cc, dd) VFSTOUFS((aa)->v_mount)->um_truncate(aa, bb, cc, dd)
105 #define UFS_UPDATE(aa, bb) VFSTOUFS((aa)->v_mount)->um_update(aa, bb)
106 #define UFS_VALLOC(aa, bb, cc, dd) VFSTOUFS((aa)->v_mount)->um_valloc(aa, bb, cc, dd)
107 #define UFS_VFREE(aa, bb, cc) VFSTOUFS((aa)->v_mount)->um_vfree(aa, bb, cc)
108 #define UFS_IFREE(aa, bb) ((aa)->um_ifree(aa, bb))
109 #define UFS_RDONLY(aa) (ITOUMP(aa)->um_rdonly(aa))
110 #define UFS_SNAPGONE(aa) (ITOUMP(aa)->um_snapgone(aa))
111 
112 #define UFS_LOCK(aa) mtx_lock(&(aa)->um_lock)
113 #define UFS_UNLOCK(aa) mtx_unlock(&(aa)->um_lock)
114 #define UFS_MTX(aa) (&(aa)->um_lock)
115 
116 /*
117  * Filesystem types
118  */
119 #define UFS1 1
120 #define UFS2 2
121 
122 /*
123  * Flags describing the state of quotas.
124  */
125 #define QTF_OPENING 0x01 /* Q_QUOTAON in progress */
126 #define QTF_CLOSING 0x02 /* Q_QUOTAOFF in progress */
127 #define QTF_64BIT 0x04 /* 64-bit quota file */
128 
129 /* Convert mount ptr to ufsmount ptr. */
130 #define VFSTOUFS(mp) ((struct ufsmount *)((mp)->mnt_data))
131 #define UFSTOVFS(ump) (ump)->um_mountp
132 
133 /*
134  * Macros to access filesystem parameters in the ufsmount structure.
135  * Used by ufs_bmap.
136  */
137 #define MNINDIR(ump) ((ump)->um_nindir)
138 #define blkptrtodb(ump, b) ((b) << (ump)->um_bptrtodb)
139 #define is_sequential(ump, a, b) ((b) == (a) + ump->um_seqinc)
140 
141 #endif
ufsmount::um_blkatoff
int(* um_blkatoff)(struct vnode *, off_t, char **, struct buf **)
Definition: ufsmount.h:91
u_long
unsigned long u_long
Definition: types.h:73
ufsmount::um_softdep
struct mount_softdeps * um_softdep
Definition: ufsmount.h:78
ucred
Definition: descrip.h:59
ufs_args
Definition: ufsmount.h:39
ufsmount::um_update
int(* um_update)(struct vnode *, int)
Definition: ufsmount.h:93
ufsmount::um_fs
struct fs * um_fs
Definition: ufsmount.h:71
ufsmount::um_btime
time_t um_btime[MAXQUOTAS]
Definition: ufsmount.h:81
ufsmount::um_balloc
int(* um_balloc)(struct vnode *, off_t, int, struct ucred *, int, struct buf **)
Definition: ufsmount.h:89
ufsmount::um_mountp
struct mount * um_mountp
Definition: ufsmount.h:65
ufsmount::um_cred
struct ucred * um_cred[MAXQUOTAS]
Definition: ufsmount.h:80
ufs_args::fspec
char * fspec
Definition: ufsmount.h:40
ino_t
__ino_t ino_t
Definition: types.h:93
pid_t
int pid_t
Definition: types.h:77
ufsmount::um_savedmaxfilesize
int64_t um_savedmaxfilesize
Definition: ufsmount.h:84
ufsmount::um_truncate
int(* um_truncate)(struct vnode *, off_t, int, struct ucred *)
Definition: ufsmount.h:92
ufsmount::um_writesuspended
int um_writesuspended
Definition: ufsmount.h:86
ufsmount::um_itime
time_t um_itime[MAXQUOTAS]
Definition: ufsmount.h:82
ufsmount::um_bptrtodb
u_long um_bptrtodb
Definition: ufsmount.h:74
fs
Definition: fs.h:260
ufsmount::um_snapgone
void(* um_snapgone)(struct inode *)
Definition: ufsmount.h:99
ufsmount::um_nindir
u_long um_nindir
Definition: ufsmount.h:73
ufsmount
Definition: ufsmount.h:64
ufsmount::um_seqinc
u_long um_seqinc
Definition: ufsmount.h:75
inode
Definition: inode.h:39
buf
Definition: buf.h:35
ufsmount::um_qflags
char um_qflags[MAXQUOTAS]
Definition: ufsmount.h:83
ufsmount::um_trim_tq
struct taskqueue * um_trim_tq
Definition: ufsmount.h:88
ufsmount::um_bo
struct bufobj * um_bo
Definition: ufsmount.h:68
ufsmount::um_fstype
u_long um_fstype
Definition: ufsmount.h:70
int64_t
__int64_t int64_t
Definition: types.h:113
time_t
__time_t time_t
Definition: _timespec.h:7
ufsmount::um_valloc
int(* um_valloc)(struct vnode *, int, struct ucred *, struct vnode **)
Definition: ufsmount.h:94
timeval
Definition: _timeval.h:17
ufsmount::um_dev
struct cdev * um_dev
Definition: ufsmount.h:66
ufsmount::um_vfree
int(* um_vfree)(struct vnode *, ino_t, int)
Definition: ufsmount.h:96
off_t
__int64_t off_t
Definition: types.h:119
ufsmount::um_trim_inflight
u_int um_trim_inflight
Definition: ufsmount.h:87
ufsmount::um_rdonly
int(* um_rdonly)(struct inode *)
Definition: ufsmount.h:98
ufsmount::um_cp
struct g_consumer * um_cp
Definition: ufsmount.h:67
u_int
unsigned int u_int
Definition: types.h:72
uio
Definition: descrip.h:63
ufsmount::um_devvp
struct vnode * um_devvp
Definition: ufsmount.h:69
ufsmount::um_fsckpid
pid_t um_fsckpid
Definition: ufsmount.h:77
ufsmount::um_candelete
int um_candelete
Definition: ufsmount.h:85
ufsmount::um_quotas
struct vnode * um_quotas[MAXQUOTAS]
Definition: ufsmount.h:79
ufsmount::um_ifree
void(* um_ifree)(struct ufsmount *, struct inode *)
Definition: ufsmount.h:97