17c478bd9Sstevel@tonic-gate /* 27c478bd9Sstevel@tonic-gate * CDDL HEADER START 37c478bd9Sstevel@tonic-gate * 47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 554c529d4SViswanathan Kannappan * Common Development and Distribution License (the "License"). 654c529d4SViswanathan Kannappan * You may not use this file except in compliance with the License. 77c478bd9Sstevel@tonic-gate * 87c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 107c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 117c478bd9Sstevel@tonic-gate * and limitations under the License. 127c478bd9Sstevel@tonic-gate * 137c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 147c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 167c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 177c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 187c478bd9Sstevel@tonic-gate * 197c478bd9Sstevel@tonic-gate * CDDL HEADER END 207c478bd9Sstevel@tonic-gate */ 217c478bd9Sstevel@tonic-gate /* 22*a19609f8Sjv227347 * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. 237c478bd9Sstevel@tonic-gate */ 247c478bd9Sstevel@tonic-gate 257c478bd9Sstevel@tonic-gate #ifndef _SYS_MNTFS_MNTDATA_H 267c478bd9Sstevel@tonic-gate #define _SYS_MNTFS_MNTDATA_H 277c478bd9Sstevel@tonic-gate 287c478bd9Sstevel@tonic-gate #include <sys/vnode.h> 297c478bd9Sstevel@tonic-gate #include <sys/poll.h> 30835ee219SRobert Harris #include <sys/mnttab.h> 31*a19609f8Sjv227347 #include <sys/zone.h> 327c478bd9Sstevel@tonic-gate 337c478bd9Sstevel@tonic-gate #ifdef __cplusplus 347c478bd9Sstevel@tonic-gate extern "C" { 357c478bd9Sstevel@tonic-gate #endif 367c478bd9Sstevel@tonic-gate 37835ee219SRobert Harris typedef struct mntelem { 38835ee219SRobert Harris /* Metadata. */ 39835ee219SRobert Harris struct mntelem *mnte_next; 40835ee219SRobert Harris struct mntelem *mnte_prev; 41835ee219SRobert Harris timespec_t mnte_birth; 42835ee219SRobert Harris timespec_t mnte_death; 43835ee219SRobert Harris timespec_t mnte_vfs_ctime; 44835ee219SRobert Harris int mnte_refcnt; 45835ee219SRobert Harris /* Payload. */ 46835ee219SRobert Harris int mnte_hidden; 47835ee219SRobert Harris char *mnte_text; 48835ee219SRobert Harris size_t mnte_text_size; 49835ee219SRobert Harris struct extmnttab mnte_tab; 50835ee219SRobert Harris } mntelem_t; 51835ee219SRobert Harris 527c478bd9Sstevel@tonic-gate typedef struct mntsnap { 53835ee219SRobert Harris timespec_t mnts_time; /* Time of this snapshot. */ 54835ee219SRobert Harris timespec_t mnts_last_mtime; /* mnttab modification time. */ 55835ee219SRobert Harris mntelem_t *mnts_first; /* First element in this snapshot. */ 56835ee219SRobert Harris mntelem_t *mnts_next; /* Next element to use. */ 57835ee219SRobert Harris int mnts_flags; /* flags; see below. */ 58835ee219SRobert Harris size_t mnts_nmnts; /* # of elements in this snapshot. */ 59835ee219SRobert Harris size_t mnts_text_size; /* Text size for this snapshot. */ 60835ee219SRobert Harris size_t mnts_foffset; /* File offset of last read(). */ 61835ee219SRobert Harris size_t mnts_ieoffset; /* Offset of last read() in element. */ 627c478bd9Sstevel@tonic-gate } mntsnap_t; 637c478bd9Sstevel@tonic-gate 647c478bd9Sstevel@tonic-gate typedef struct mntnode { 657c478bd9Sstevel@tonic-gate vnode_t *mnt_vnode; /* vnode for this mntnode */ 665545576aSRobert Harris vnode_t *mnt_mountvp; /* vnode mounted on */ 675545576aSRobert Harris krwlock_t mnt_contents; /* protects mnt_flags, mnt_read & mnt_ioctl */ 685545576aSRobert Harris uint_t mnt_flags; /* flags; see below */ 695545576aSRobert Harris mntsnap_t mnt_read; /* data for read() */ 705545576aSRobert Harris mntsnap_t mnt_ioctl; /* data for ioctl() */ 717c478bd9Sstevel@tonic-gate } mntnode_t; 727c478bd9Sstevel@tonic-gate 737c478bd9Sstevel@tonic-gate /* 747c478bd9Sstevel@tonic-gate * Conversion macros. 757c478bd9Sstevel@tonic-gate */ 767c478bd9Sstevel@tonic-gate #define VTOM(vp) ((struct mntnode *)(vp)->v_data) 777c478bd9Sstevel@tonic-gate #define MTOV(pnp) ((pnp)->mnt_vnode) 787c478bd9Sstevel@tonic-gate #define MTOD(pnp) ((struct mntdata *)MTOV(pnp)->v_vfsp->vfs_data) 797c478bd9Sstevel@tonic-gate 80835ee219SRobert Harris #define MNTFS_ELEM_IS_DEAD(x) ((x)->mnte_death.tv_sec || \ 81835ee219SRobert Harris (x)->mnte_death.tv_nsec) 82835ee219SRobert Harris #define MNTFS_ELEM_IS_ALIVE(x) !MNTFS_ELEM_IS_DEAD(x) 83835ee219SRobert Harris 847c478bd9Sstevel@tonic-gate #if defined(_KERNEL) 857c478bd9Sstevel@tonic-gate 86*a19609f8Sjv227347 typedef struct mntdata { 87*a19609f8Sjv227347 zone_ref_t mnt_zone_ref; /* zone for mount point */ 88*a19609f8Sjv227347 uint_t mnt_nopen; /* count of vnodes open */ 89*a19609f8Sjv227347 size_t mnt_size; /* size of last normal snapshot */ 90*a19609f8Sjv227347 size_t mnt_hidden_size; /* size of last hidden snapshot */ 91*a19609f8Sjv227347 timespec_t mnt_mtime; /* mtime at last normal snapshot */ 92*a19609f8Sjv227347 timespec_t mnt_hidden_mtime; /* mtime at last hidden snapshot */ 93*a19609f8Sjv227347 struct mntnode mnt_node; /* embedded mntnode */ 94*a19609f8Sjv227347 } mntdata_t; 95*a19609f8Sjv227347 967c478bd9Sstevel@tonic-gate /* 97835ee219SRobert Harris * Value for a mntsnap_t's mnts_flags. 987c478bd9Sstevel@tonic-gate */ 99835ee219SRobert Harris #define MNTS_SHOWHIDDEN 0x1 /* This snapshot contains hidden mounts. */ 100835ee219SRobert Harris #define MNTS_REWIND 0x2 /* This snapshot must be refreshed. */ 101835ee219SRobert Harris /* 102835ee219SRobert Harris * Values for a mntnode_t's mnt_flags. 103835ee219SRobert Harris */ 104835ee219SRobert Harris #define MNT_SHOWHIDDEN 0x1 /* Include MS_NOMNTTAB mounts in snapshots. */ 1057c478bd9Sstevel@tonic-gate 1067c478bd9Sstevel@tonic-gate extern struct vnodeops *mntvnodeops; 1077c478bd9Sstevel@tonic-gate extern void mntfs_getmntopts(struct vfs *, char **, size_t *); 1087c478bd9Sstevel@tonic-gate 1097c478bd9Sstevel@tonic-gate #endif /* _KERNEL */ 1107c478bd9Sstevel@tonic-gate 1117c478bd9Sstevel@tonic-gate #ifdef __cplusplus 1127c478bd9Sstevel@tonic-gate } 1137c478bd9Sstevel@tonic-gate #endif 1147c478bd9Sstevel@tonic-gate 1157c478bd9Sstevel@tonic-gate #endif /* _SYS_MNTFS_MNTDATA_H */ 116