Print this page
fsh webrev (August 24th)


 181  * "rootvfs".
 182  * File system implementations should not access this list;
 183  * it's intended for use only in the kernel's vfs layer.
 184  *
 185  * Each zone also has its own list of mounts, containing filesystems mounted
 186  * somewhere within the filesystem tree rooted at the zone's rootpath.  The
 187  * list is doubly linked to match the global list.
 188  *
 189  * mnttab locking: the in-kernel mnttab uses the vfs_mntpt, vfs_resource and
 190  * vfs_mntopts fields in the vfs_t. mntpt and resource are refstr_ts that
 191  * are set at mount time and can only be modified during a remount.
 192  * It is safe to read these fields if you can prevent a remount on the vfs,
 193  * or through the convenience funcs vfs_getmntpoint() and vfs_getresource().
 194  * The mntopts field may only be accessed through the provided convenience
 195  * functions, as it is protected by the vfs list lock. Modifying a mount
 196  * option requires grabbing the vfs list write lock, which can be a very
 197  * high latency lock.
 198  */
 199 struct zone;            /* from zone.h */
 200 struct fem_head;        /* from fem.h */

 201 
 202 typedef struct vfs {
 203         struct vfs      *vfs_next;              /* next VFS in VFS list */
 204         struct vfs      *vfs_prev;              /* prev VFS in VFS list */
 205 
 206 /* vfs_op should not be used directly.  Accessor functions are provided */
 207         vfsops_t        *vfs_op;                /* operations on VFS */
 208 
 209         struct vnode    *vfs_vnodecovered;      /* vnode mounted on */
 210         uint_t          vfs_flag;               /* flags */
 211         uint_t          vfs_bsize;              /* native block size */
 212         int             vfs_fstype;             /* file system type index */
 213         fsid_t          vfs_fsid;               /* file system id */
 214         void            *vfs_data;              /* private data */
 215         dev_t           vfs_dev;                /* device of mounted VFS */
 216         ulong_t         vfs_bcount;             /* I/O count (accounting) */
 217         struct vfs      *vfs_list;              /* sync list pointer */
 218         struct vfs      *vfs_hash;              /* hash list pointer */
 219         ksema_t         vfs_reflock;            /* mount/unmount/sync lock */
 220         uint_t          vfs_count;              /* vfs reference count */
 221         mntopts_t       vfs_mntopts;            /* options mounted with */
 222         refstr_t        *vfs_resource;          /* mounted resource name */
 223         refstr_t        *vfs_mntpt;             /* mount point name */
 224         time_t          vfs_mtime;              /* time we were mounted */
 225         struct vfs_impl *vfs_implp;             /* impl specific data */
 226         /*
 227          * Zones support.  Note that the zone that "owns" the mount isn't
 228          * necessarily the same as the zone in which the zone is visible.
 229          * That is, vfs_zone and (vfs_zone_next|vfs_zone_prev) may refer to
 230          * different zones.
 231          */
 232         struct zone     *vfs_zone;              /* zone that owns the mount */
 233         struct vfs      *vfs_zone_next;         /* next VFS visible in zone */
 234         struct vfs      *vfs_zone_prev;         /* prev VFS visible in zone */
 235 
 236         struct fem_head *vfs_femhead;           /* fs monitoring */
 237         minor_t         vfs_lofi_minor;         /* minor if lofi mount */



 238 } vfs_t;
 239 
 240 #define vfs_featureset  vfs_implp->vi_featureset
 241 #define vfs_vskap       vfs_implp->vi_vskap
 242 #define vfs_fstypevsp   vfs_implp->vi_fstypevsp
 243 #define vfs_vopstats    vfs_implp->vi_vopstats
 244 #define vfs_hrctime     vfs_implp->vi_hrctime
 245 
 246 /*
 247  * VFS flags.
 248  */
 249 #define VFS_RDONLY      0x01            /* read-only vfs */
 250 #define VFS_NOMNTTAB    0x02            /* vfs not seen in mnttab */
 251 #define VFS_NOSETUID    0x08            /* setuid disallowed */
 252 #define VFS_REMOUNT     0x10            /* modify mount options only */
 253 #define VFS_NOTRUNC     0x20            /* does not truncate long file names */
 254 #define VFS_UNLINKABLE  0x40            /* unlink(2) can be applied to root */
 255 #define VFS_PXFS        0x80            /* clustering: global fs proxy vfs */
 256 #define VFS_UNMOUNTED   0x100           /* file system has been unmounted */
 257 #define VFS_NBMAND      0x200           /* allow non-blocking mandatory locks */




 181  * "rootvfs".
 182  * File system implementations should not access this list;
 183  * it's intended for use only in the kernel's vfs layer.
 184  *
 185  * Each zone also has its own list of mounts, containing filesystems mounted
 186  * somewhere within the filesystem tree rooted at the zone's rootpath.  The
 187  * list is doubly linked to match the global list.
 188  *
 189  * mnttab locking: the in-kernel mnttab uses the vfs_mntpt, vfs_resource and
 190  * vfs_mntopts fields in the vfs_t. mntpt and resource are refstr_ts that
 191  * are set at mount time and can only be modified during a remount.
 192  * It is safe to read these fields if you can prevent a remount on the vfs,
 193  * or through the convenience funcs vfs_getmntpoint() and vfs_getresource().
 194  * The mntopts field may only be accessed through the provided convenience
 195  * functions, as it is protected by the vfs list lock. Modifying a mount
 196  * option requires grabbing the vfs list write lock, which can be a very
 197  * high latency lock.
 198  */
 199 struct zone;            /* from zone.h */
 200 struct fem_head;        /* from fem.h */
 201 struct fsh_fsrecord;    /* from fsh_impl.h */
 202 
 203 typedef struct vfs {
 204         struct vfs      *vfs_next;              /* next VFS in VFS list */
 205         struct vfs      *vfs_prev;              /* prev VFS in VFS list */
 206 
 207 /* vfs_op should not be used directly.  Accessor functions are provided */
 208         vfsops_t        *vfs_op;                /* operations on VFS */
 209 
 210         struct vnode    *vfs_vnodecovered;      /* vnode mounted on */
 211         uint_t          vfs_flag;               /* flags */
 212         uint_t          vfs_bsize;              /* native block size */
 213         int             vfs_fstype;             /* file system type index */
 214         fsid_t          vfs_fsid;               /* file system id */
 215         void            *vfs_data;              /* private data */
 216         dev_t           vfs_dev;                /* device of mounted VFS */
 217         ulong_t         vfs_bcount;             /* I/O count (accounting) */
 218         struct vfs      *vfs_list;              /* sync list pointer */
 219         struct vfs      *vfs_hash;              /* hash list pointer */
 220         ksema_t         vfs_reflock;            /* mount/unmount/sync lock */
 221         uint_t          vfs_count;              /* vfs reference count */
 222         mntopts_t       vfs_mntopts;            /* options mounted with */
 223         refstr_t        *vfs_resource;          /* mounted resource name */
 224         refstr_t        *vfs_mntpt;             /* mount point name */
 225         time_t          vfs_mtime;              /* time we were mounted */
 226         struct vfs_impl *vfs_implp;             /* impl specific data */
 227         /*
 228          * Zones support.  Note that the zone that "owns" the mount isn't
 229          * necessarily the same as the zone in which the zone is visible.
 230          * That is, vfs_zone and (vfs_zone_next|vfs_zone_prev) may refer to
 231          * different zones.
 232          */
 233         struct zone     *vfs_zone;              /* zone that owns the mount */
 234         struct vfs      *vfs_zone_next;         /* next VFS visible in zone */
 235         struct vfs      *vfs_zone_prev;         /* prev VFS visible in zone */
 236 
 237         struct fem_head *vfs_femhead;           /* fs monitoring */
 238         minor_t         vfs_lofi_minor;         /* minor if lofi mount */
 239 
 240         struct fsh_fsrecord *volatile
 241                 vfs_fshrecord;                  /* fs hooking */
 242 } vfs_t;
 243 
 244 #define vfs_featureset  vfs_implp->vi_featureset
 245 #define vfs_vskap       vfs_implp->vi_vskap
 246 #define vfs_fstypevsp   vfs_implp->vi_fstypevsp
 247 #define vfs_vopstats    vfs_implp->vi_vopstats
 248 #define vfs_hrctime     vfs_implp->vi_hrctime
 249 
 250 /*
 251  * VFS flags.
 252  */
 253 #define VFS_RDONLY      0x01            /* read-only vfs */
 254 #define VFS_NOMNTTAB    0x02            /* vfs not seen in mnttab */
 255 #define VFS_NOSETUID    0x08            /* setuid disallowed */
 256 #define VFS_REMOUNT     0x10            /* modify mount options only */
 257 #define VFS_NOTRUNC     0x20            /* does not truncate long file names */
 258 #define VFS_UNLINKABLE  0x40            /* unlink(2) can be applied to root */
 259 #define VFS_PXFS        0x80            /* clustering: global fs proxy vfs */
 260 #define VFS_UNMOUNTED   0x100           /* file system has been unmounted */
 261 #define VFS_NBMAND      0x200           /* allow non-blocking mandatory locks */