1 /* 2 * Copyright (c) 2000-2001, Boris Popov 3 * 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. All advertising materials mentioning features or use of this software 14 * must display the following acknowledgement: 15 * This product includes software developed by Boris Popov. 16 * 4. Neither the name of the author nor the names of any co-contributors 17 * may be used to endorse or promote products derived from this software 18 * without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 * SUCH DAMAGE. 31 * 32 * $Id: smbfs.h,v 1.30.100.1 2005/05/27 02:35:28 lindak Exp $ 33 */ 34 35 /* 36 * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. 37 */ 38 39 #ifndef _SMBFS_SMBFS_H 40 #define _SMBFS_SMBFS_H 41 42 /* 43 * FS-specific VFS structures for smbfs. 44 * (per-mount stuff, etc.) 45 * 46 * This file used to have mount args stuff, 47 * but that's now in sys/fs/smbfs_mount.h 48 */ 49 50 #include <sys/param.h> 51 #include <sys/fstyp.h> 52 #include <sys/avl.h> 53 #include <sys/list.h> 54 #include <sys/t_lock.h> 55 #include <sys/vfs.h> 56 #include <sys/vfs_opreg.h> 57 #include <sys/fs/smbfs_mount.h> 58 #include <sys/zone.h> 59 60 /* 61 * Path component length 62 * 63 * The generic fs code uses MAXNAMELEN to represent 64 * what the largest component length is, but note: 65 * that length DOES include the terminating NULL. 66 * SMB_MAXFNAMELEN does NOT include the NULL. 67 */ 68 #define SMB_MAXFNAMELEN (MAXNAMELEN-1) /* 255 */ 69 70 /* 71 * SM_MAX_STATFSTIME is the maximum time to cache statvfs data. Since this 72 * should be a fast call on the server, the time the data cached is short. 73 * That lets the cache handle bursts of statvfs() requests without generating 74 * lots of network traffic. 75 */ 76 #define SM_MAX_STATFSTIME 2 77 78 /* Mask values for smbmount structure sm_status field */ 79 #define SM_STATUS_STATFS_BUSY 0x00000001 /* statvfs is in progress */ 80 #define SM_STATUS_STATFS_WANT 0x00000002 /* statvfs wakeup is wanted */ 81 #define SM_STATUS_TIMEO 0x00000004 /* this mount is not responding */ 82 #define SM_STATUS_DEAD 0x00000010 /* connection gone - unmount this */ 83 84 extern const struct fs_operation_def smbfs_vnodeops_template[]; 85 extern struct vnodeops *smbfs_vnodeops; 86 87 struct smbnode; 88 struct smb_share; 89 90 /* 91 * The values for smi_flags (from nfs_clnt.h) 92 */ 93 #define SMI_INT 0x04 /* interrupts allowed */ 94 #define SMI_NOAC 0x10 /* don't cache attributes */ 95 #define SMI_LLOCK 0x80 /* local locking only */ 96 #define SMI_ACL 0x2000 /* share supports ACLs */ 97 #define SMI_DIRECTIO 0x40000 /* do direct I/O */ 98 #define SMI_EXTATTR 0x80000 /* share supports ext. attrs */ 99 #define SMI_DEAD 0x200000 /* mount has been terminated */ 100 101 /* 102 * Stuff returned by smbfs_smb_qfsattr 103 * See [CIFS] SMB_QUERY_FS_ATTRIBUTE_INFO 104 */ 105 typedef struct smb_fs_attr_info { 106 uint32_t fsa_aflags; /* Attr. flags [CIFS 4.1.6.6] */ 107 uint32_t fsa_maxname; /* max. component length */ 108 char fsa_tname[FSTYPSZ]; /* type name, i.e. "NTFS" */ 109 } smb_fs_attr_info_t; 110 111 /* 112 * Corresponds to Darwin: struct smbmount 113 */ 114 typedef struct smbmntinfo { 115 struct vfs *smi_vfsp; /* mount back pointer to vfs */ 116 struct smbnode *smi_root; /* the root node */ 117 struct smb_share *smi_share; /* netsmb SMB share conn data */ 118 struct taskq *smi_taskq; /* for async work */ 119 kmutex_t smi_lock; /* mutex for flags, etc. */ 120 uint32_t smi_flags; /* NFS-derived flag bits */ 121 uint32_t smi_status; /* status bits for this mount */ 122 hrtime_t smi_statfstime; /* sm_statvfsbuf cache time */ 123 statvfs64_t smi_statvfsbuf; /* cached statvfs data */ 124 kcondvar_t smi_statvfs_cv; 125 smb_fs_attr_info_t smi_fsa; /* SMB FS attributes. */ 126 #define smi_fsattr smi_fsa.fsa_aflags 127 128 /* 129 * The smbfs node cache for this mount. 130 * Named "hash" for historical reasons. 131 * See smbfs_node.h for details. 132 */ 133 avl_tree_t smi_hash_avl; 134 krwlock_t smi_hash_lk; 135 136 /* 137 * Kstat statistics 138 */ 139 struct kstat *smi_io_kstats; 140 struct kstat *smi_ro_kstats; 141 142 /* 143 * Zones support. 144 */ 145 zone_ref_t smi_zone_ref; /* Zone FS is mounted in */ 146 list_node_t smi_zone_node; /* Link to per-zone smi list */ 147 /* Lock for the list is: smi_globals_t -> smg_lock */ 148 149 /* 150 * Stuff copied or derived from the mount args 151 */ 152 uid_t smi_uid; /* user id */ 153 gid_t smi_gid; /* group id */ 154 mode_t smi_fmode; /* mode for files */ 155 mode_t smi_dmode; /* mode for dirs */ 156 157 hrtime_t smi_acregmin; /* min time to hold cached file attr */ 158 hrtime_t smi_acregmax; /* max time to hold cached file attr */ 159 hrtime_t smi_acdirmin; /* min time to hold cached dir attr */ 160 hrtime_t smi_acdirmax; /* max time to hold cached dir attr */ 161 } smbmntinfo_t; 162 163 /* 164 * Attribute cache timeout defaults (in seconds). 165 */ 166 #define SMBFS_ACREGMIN 3 /* min secs to hold cached file attr */ 167 #define SMBFS_ACREGMAX 60 /* max secs to hold cached file attr */ 168 #define SMBFS_ACDIRMIN 30 /* min secs to hold cached dir attr */ 169 #define SMBFS_ACDIRMAX 60 /* max secs to hold cached dir attr */ 170 /* and limits for the mount options */ 171 #define SMBFS_ACMINMAX 600 /* 10 min. is longest min timeout */ 172 #define SMBFS_ACMAXMAX 3600 /* 1 hr is longest max timeout */ 173 174 /* 175 * High-res time is nanoseconds. 176 */ 177 #define SEC2HR(sec) ((sec) * (hrtime_t)NANOSEC) 178 179 /* 180 * vnode pointer to mount info 181 */ 182 #define VTOSMI(vp) ((smbmntinfo_t *)(((vp)->v_vfsp)->vfs_data)) 183 #define VFTOSMI(vfsp) ((smbmntinfo_t *)((vfsp)->vfs_data)) 184 #define SMBINTR(vp) (VTOSMI(vp)->smi_flags & SMI_INT) 185 186 #endif /* _SMBFS_SMBFS_H */ 187