1*b6586656Sandvar /* $NetBSD: ntfs_inode.h,v 1.10 2024/12/05 21:24:38 andvar Exp $ */ 29accf4dfSjdolecek 39accf4dfSjdolecek /*- 49accf4dfSjdolecek * Copyright (c) 1998, 1999 Semen Ustimenko 59accf4dfSjdolecek * All rights reserved. 69accf4dfSjdolecek * 79accf4dfSjdolecek * Redistribution and use in source and binary forms, with or without 89accf4dfSjdolecek * modification, are permitted provided that the following conditions 99accf4dfSjdolecek * are met: 109accf4dfSjdolecek * 1. Redistributions of source code must retain the above copyright 119accf4dfSjdolecek * notice, this list of conditions and the following disclaimer. 129accf4dfSjdolecek * 2. Redistributions in binary form must reproduce the above copyright 139accf4dfSjdolecek * notice, this list of conditions and the following disclaimer in the 149accf4dfSjdolecek * documentation and/or other materials provided with the distribution. 159accf4dfSjdolecek * 169accf4dfSjdolecek * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 179accf4dfSjdolecek * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 189accf4dfSjdolecek * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 199accf4dfSjdolecek * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 209accf4dfSjdolecek * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 219accf4dfSjdolecek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 229accf4dfSjdolecek * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 239accf4dfSjdolecek * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 249accf4dfSjdolecek * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 259accf4dfSjdolecek * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 269accf4dfSjdolecek * SUCH DAMAGE. 279accf4dfSjdolecek * 289accf4dfSjdolecek * Id: ntfs_inode.h,v 1.4 1999/05/12 09:43:00 semenu Exp 299accf4dfSjdolecek */ 309accf4dfSjdolecek 314bffed72Schristos #ifndef _NTFS_NTFS_INODE_H_ 324bffed72Schristos #define _NTFS_NTFS_INODE_H_ 339accf4dfSjdolecek #include <miscfs/genfs/genfs_node.h> 349accf4dfSjdolecek 359accf4dfSjdolecek /* These flags are kept in i_flag. */ 369accf4dfSjdolecek #define IN_ACCESS 0x0001 /* Access time update request. */ 379accf4dfSjdolecek #define IN_CHANGE 0x0002 /* Inode change time update request. */ 389accf4dfSjdolecek #define IN_EXLOCK 0x0004 /* File has exclusive lock. */ 399accf4dfSjdolecek #define IN_LOCKED 0x0008 /* Inode lock. */ 409accf4dfSjdolecek #define IN_LWAIT 0x0010 /* Process waiting on file lock. */ 419accf4dfSjdolecek #define IN_MODIFIED 0x0020 /* Inode has been modified. */ 429accf4dfSjdolecek #define IN_RENAME 0x0040 /* Inode is being renamed. */ 439accf4dfSjdolecek #define IN_SHLOCK 0x0080 /* File has shared lock. */ 449accf4dfSjdolecek #define IN_UPDATE 0x0100 /* Modification time update request. */ 459accf4dfSjdolecek #define IN_WANTED 0x0200 /* Inode is wanted by a process. */ 469accf4dfSjdolecek #define IN_RECURSE 0x0400 /* Recursion expected */ 479accf4dfSjdolecek 489accf4dfSjdolecek #define IN_HASHED 0x0800 /* Inode is on hash list */ 499accf4dfSjdolecek #define IN_LOADED 0x8000 /* ntvattrs loaded */ 509accf4dfSjdolecek #define IN_PRELOADED 0x4000 /* loaded from directory entry */ 519accf4dfSjdolecek 529accf4dfSjdolecek struct ntnode { 539accf4dfSjdolecek struct vnode *i_devvp; /* vnode of blk dev we live on */ 549accf4dfSjdolecek dev_t i_dev; /* Device associated with the inode. */ 559accf4dfSjdolecek 569accf4dfSjdolecek LIST_ENTRY(ntnode) i_hash; 579accf4dfSjdolecek struct ntfsmount *i_mp; 589accf4dfSjdolecek ino_t i_number; 599accf4dfSjdolecek u_int32_t i_flag; 609accf4dfSjdolecek 619accf4dfSjdolecek /* locking */ 62b9839de8Sad kcondvar_t i_lock; 634a780c9aSad kmutex_t i_interlock; 649accf4dfSjdolecek int i_usecount; 65b9839de8Sad int i_busy; 669accf4dfSjdolecek 679accf4dfSjdolecek LIST_HEAD(,ntvattr) i_valist; 689accf4dfSjdolecek 699accf4dfSjdolecek long i_nlink; /* MFR */ 709accf4dfSjdolecek ino_t i_mainrec; /* MFR */ 719accf4dfSjdolecek u_int32_t i_frflag; /* MFR */ 729accf4dfSjdolecek }; 739accf4dfSjdolecek 740bac6265Shannken #define NTKEY_SIZE(attrlen) (sizeof(struct ntkey) + (attrlen)) 750bac6265Shannken struct ntkey { 760bac6265Shannken ino_t k_ino; /* Inode number of ntnode. */ 770bac6265Shannken u_int32_t k_attrtype; /* Attribute type. */ 780bac6265Shannken char k_attrname[1]; /* Attribute name (variable length). */ 790bac6265Shannken } __packed; 800bac6265Shannken 819accf4dfSjdolecek struct fnode { 829accf4dfSjdolecek struct genfs_node f_gnode; 839accf4dfSjdolecek 849accf4dfSjdolecek LIST_ENTRY(fnode) f_fnlist; 85*b6586656Sandvar struct vnode *f_vp; /* Associated vnode */ 869accf4dfSjdolecek struct ntnode *f_ip; /* Associated ntnode */ 879accf4dfSjdolecek 889accf4dfSjdolecek ntfs_times_t f_times; /* $NAME/dirinfo */ 899accf4dfSjdolecek ino_t f_pnumber; /* $NAME/dirinfo */ 909accf4dfSjdolecek u_int32_t f_fflag; /* $NAME/dirinfo */ 919accf4dfSjdolecek u_int64_t f_size; /* defattr/dirinfo: */ 929accf4dfSjdolecek u_int64_t f_allocated; /* defattr/dirinfo */ 939accf4dfSjdolecek 940bac6265Shannken struct ntkey *f_key; 950bac6265Shannken struct ntkey f_smallkey; 960bac6265Shannken #define f_ino f_key->k_ino 970bac6265Shannken #define f_attrtype f_key->k_attrtype 980bac6265Shannken #define f_attrname f_key->k_attrname 999accf4dfSjdolecek 1009accf4dfSjdolecek /* for ntreaddir */ 1019accf4dfSjdolecek u_int32_t f_lastdattr; 1029accf4dfSjdolecek u_int32_t f_lastdblnum; 1039accf4dfSjdolecek u_int32_t f_lastdoff; 1049accf4dfSjdolecek u_int32_t f_lastdnum; 10553524e44Schristos void * f_dirblbuf; 1069accf4dfSjdolecek u_int32_t f_dirblsz; 1079accf4dfSjdolecek }; 1089accf4dfSjdolecek 1099accf4dfSjdolecek /* This overlays the fid structure (see <sys/mount.h>) */ 1109accf4dfSjdolecek struct ntfid { 1119accf4dfSjdolecek u_int16_t ntfid_len; /* Length of structure. */ 1129accf4dfSjdolecek u_int16_t ntfid_pad; /* Force 32-bit alignment. */ 1139accf4dfSjdolecek ino_t ntfid_ino; /* File number (ino). */ 1149accf4dfSjdolecek u_int8_t ntfid_attr; /* Attribute identifier */ 1159accf4dfSjdolecek #ifdef notyet 1169accf4dfSjdolecek int32_t ntfid_gen; /* Generation number. */ 1179accf4dfSjdolecek #endif 1189accf4dfSjdolecek }; 1194bffed72Schristos #endif /* _NTFS_NTFS_INODE_H_ */ 120