uts: make emu10k non-verbose
[unleashed.git] / include / sys / fs / udf_inode.h
blob4d0e11942b42cc30172f454dfbeae805cd622d56
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
25 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
26 /* All Rights Reserved */
28 #ifndef _SYS_FS_UDF_INODE_H
29 #define _SYS_FS_UDF_INODE_H
31 #include <sys/note.h>
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
37 #define SUN_IMPL_ID "*SUN SOLARIS UDF"
38 #define SUN_IMPL_ID_LEN 16
39 #define SUN_OS_CLASS 4
40 #define SUN_OS_ID 2
43 * Size of each cluster
44 * and bits to be shifted
46 #define CLSTR_SIZE 8
47 #define CLSTR_MASK 7
51 * enums
53 enum de_op { DE_CREATE, DE_MKDIR, DE_LINK, DE_RENAME }; /* direnter ops */
54 enum dr_op { DR_REMOVE, DR_RMDIR, DR_RENAME }; /* dirremove ops */
57 * The following macros optimize certain frequently calculated
58 * quantities by using shifts and masks in place of divisions
59 * modulos and multiplications.
62 #define blkoff(udfvfsp, loc) /* calculates (loc % udfcfs->udf_lbsize) */ \
63 ((loc) & (udfvfsp)->udf_lbmask)
65 #define lblkno(udf_vfsp, loc) \
66 ((int32_t)((loc) / (udf_vfsp)->udf_lbsize))
68 #define fsbtodb(udf, blk) \
69 ((blk) << udf->udf_l2d_shift)
72 struct udf_fid {
73 uint16_t udfid_len; /* Length of data */
74 uint16_t udfid_prn; /* the partition number of icb */
75 uint32_t udfid_icb_lbn; /* file entry block no */
76 uint32_t udfid_uinq_lo; /* uniq id to validate the vnode */
82 #define MAXNAMLEN 255
87 struct ud_part {
88 uint16_t udp_flags; /* See below */
89 uint16_t udp_number; /* partition Number */
90 uint32_t udp_seqno; /* to find the prevailaing desc */
91 uint32_t udp_access; /* access type */
92 uint32_t udp_start; /* Starting block no of partition */
93 uint32_t udp_length; /* Lenght of the partition */
94 uint32_t udp_unall_loc; /* unall space tbl or bitmap loc */
95 uint32_t udp_unall_len; /* unall space tbl or bitmap length */
96 uint32_t udp_freed_loc; /* freed space tbl or bitmap loc */
97 uint32_t udp_freed_len; /* freed space tbl or bitmap length */
98 /* From part desc */
100 uint32_t udp_nfree; /* No of free blocks in the partition */
101 uint32_t udp_nblocks; /* Total no of blks in the partition */
102 /* From lvid */
103 uint32_t udp_last_alloc; /* Last allocated space in bitmap */
105 int32_t udp_cache_count; /* Cache is used for metadata */
106 daddr_t udp_cache[CLSTR_SIZE];
110 * udp_flags
112 #define UDP_BITMAPS 0x00
113 #define UDP_SPACETBLS 0x01
116 * udp_access
118 #define UDP_MT_RO 0x0001 /* ROM */
119 #define UDP_MT_WO 0x0002 /* WORM */
120 #define UDP_MT_RW 0x0003 /* RW */
121 #define UDP_MT_OW 0x0004 /* OW */
125 #define MAX_SPM 4
127 struct ud_map {
128 uint32_t udm_flags; /* Flags */
129 uint16_t udm_vsn; /* Volume Sequence Number */
130 uint16_t udm_pn; /* Partition Number */
131 uint32_t udm_vat_icb; /* VAT ICB location */
132 uint32_t udm_nent; /* Number of vat entries */
133 uint32_t *udm_count; /* Number of entrues in each table */
134 struct buf **udm_bp; /* VAT translation tables */
135 uint32_t **udm_addr;
138 int32_t udm_plen;
139 int32_t udm_nspm;
140 uint32_t udm_spsz;
141 uint32_t udm_loc[MAX_SPM];
142 struct buf *udm_sbp[MAX_SPM];
143 caddr_t udm_spaddr[MAX_SPM];
147 * udm_flags
149 #define UDM_MAP_NORM 0x00
150 #define UDM_MAP_VPM 0x01
151 #define UDM_MAP_SPM 0x02
153 struct udf_vfs {
154 struct vfs *udf_vfs; /* Back link */
155 struct udf_vfs *udf_next; /* Chain of udf file-system's */
156 struct udf_vfs *udf_wnext; /* work list link */
158 struct buf *udf_vds; /* most of the superblock */
159 struct buf *udf_iseq; /* Integrity of the fs */
160 struct vnode *udf_root; /* Root vnode */
161 struct vnode *udf_devvp; /* Block device vnode */
163 char *udf_fsmnt; /* Path name of directory mouted on */
164 uint32_t udf_flags; /* Flags */
165 uint32_t udf_mtype; /* Media type */
167 int32_t udf_rdclustsz; /* read cluster size */
168 int32_t udf_wrclustsz; /* write cluster size */
170 uint64_t udf_maxfsize; /* Max file size allowed in this fs */
171 int32_t udf_maxfbits; /* No of bit's for max file size */
173 char udf_volid[32]; /* volume identifier */
174 /* from pvd */
175 uint16_t udf_tsno; /* Taken from pvd and */
176 /* used in making tags */
178 int32_t udf_lbsize; /* Block size */
179 /* from lvd */
180 int32_t udf_lbmask; /* udf_lbsize - 1 */
181 int32_t udf_l2b_shift; /* lbsize to bytes */
182 int32_t udf_l2d_shift; /* right shift's to */
183 /* make lbsize to DEV_BSIZE */
185 int32_t udf_npart; /* No. of partition's in the volume */
186 /* restricted to 1 till udf 1.50 */
187 struct ud_part *udf_parts; /* pointer to array of partitions */
188 /* from part desc's */
190 int32_t udf_nmaps;
191 struct ud_map *udf_maps;
193 int32_t udf_fragmented; /* File System fragmented */
194 int32_t udf_mark_bad; /* force fsck at next mount */
197 * sum of udp_nfree and udp_nblocks
198 * from the array udf_parts[0] to udf_parts[udf_nparts - 1]
200 uint32_t udf_freeblks; /* Total udf_lbsize Free Blocks */
201 uint32_t udf_totalblks; /* Total number of Blocks */
202 /* udf_parts[0].udp_nfree == udf_freespace */
203 /* till udf 1.50 (DVD-R?) */
204 uint64_t udf_maxuniq; /* Maximum unique ID on the fs */
205 uint32_t udf_nfiles; /* No of files */
206 uint32_t udf_ndirs; /* No of directories */
207 uint32_t udf_miread; /* minimum read revision */
208 uint32_t udf_miwrite; /* minimum write revision */
209 uint32_t udf_mawrite; /* maximum read revision */
210 /* from lvid */
212 time_t udf_time; /* Last time super block is written */
213 uint32_t udf_mod; /* file system was modified */
214 uint32_t udf_clean; /* state of the file system */
215 kmutex_t udf_lock; /* protects contents */
217 kmutex_t udf_rename_lck; /* lock for udf_rename */
220 * Have them cached here for fast access
222 struct pri_vol_desc *udf_pvd;
223 struct log_vol_desc *udf_lvd;
224 struct log_vol_int_desc *udf_lvid;
226 uint32_t udf_mvds_loc;
227 uint32_t udf_mvds_len;
229 uint32_t udf_rvds_loc;
230 uint32_t udf_rvds_len;
232 uint32_t udf_iseq_loc;
233 uint32_t udf_iseq_len;
235 uint16_t udf_fsd_prn;
236 uint32_t udf_fsd_loc;
237 uint32_t udf_fsd_len;
239 uint16_t udf_ricb_prn;
240 uint32_t udf_ricb_loc;
241 uint32_t udf_ricb_len;
242 daddr_t udf_root_blkno;
246 #ifndef __lint
247 _NOTE(MUTEX_PROTECTS_DATA(udf_vfs::udf_lock,
248 udf_vfs::udf_fragmented))
249 _NOTE(MUTEX_PROTECTS_DATA(udf_vfs::udf_lock,
250 udf_vfs::udf_freeblks udf_vfs::udf_totalblks))
251 _NOTE(MUTEX_PROTECTS_DATA(udf_vfs::udf_lock,
252 udf_vfs::udf_maxuniq udf_vfs::udf_nfiles
253 udf_vfs::udf_ndirs))
254 _NOTE(MUTEX_PROTECTS_DATA(udf_vfs::udf_lock,
255 udf_vfs::udf_time
256 udf_vfs::udf_mod udf_vfs::udf_clean))
258 _NOTE(READ_ONLY_DATA(udf_vfs::udf_nmaps udf_vfs::udf_maps))
260 _NOTE(READ_ONLY_DATA(udf_vfs::udf_mtype
261 udf_vfs::udf_rdclustsz
262 udf_vfs::udf_wrclustsz
263 udf_vfs::udf_maxfsize
264 udf_vfs::udf_maxfbits
265 udf_vfs::udf_lbsize
266 udf_vfs::udf_l2b_shift
267 udf_vfs::udf_lbmask
268 udf_vfs::udf_l2d_shift))
270 _NOTE(READ_ONLY_DATA(udf_vfs::udf_pvd
271 udf_vfs::udf_lvd
272 udf_vfs::udf_lvid))
274 _NOTE(READ_ONLY_DATA(udf_vfs::udf_mvds_loc
275 udf_vfs::udf_mvds_len
276 udf_vfs::udf_iseq_loc
277 udf_vfs::udf_iseq_len
278 udf_vfs::udf_fsd_prn
279 udf_vfs::udf_fsd_loc
280 udf_vfs::udf_fsd_len
281 udf_vfs::udf_ricb_prn
282 udf_vfs::udf_ricb_loc
283 udf_vfs::udf_ricb_len
284 udf_vfs::udf_root_blkno))
286 _NOTE(READ_ONLY_DATA(ud_part::udp_flags
287 ud_part::udp_number
288 ud_part::udp_seqno
289 ud_part::udp_access
290 ud_part::udp_start
291 ud_part::udp_length
292 ud_part::udp_unall_loc
293 ud_part::udp_unall_len
294 ud_part::udp_freed_loc
295 ud_part::udp_freed_len
296 ud_part::udp_nblocks))
298 _NOTE(MUTEX_PROTECTS_DATA(udf_vfs::udf_lock,
299 ud_part::udp_nfree
300 ud_part::udp_last_alloc
301 ud_part::udp_cache_count
302 ud_part::udp_cache))
303 #endif
306 * udf_mtype
308 #define UDF_MT_RO UDP_MT_RO /* ROM */
309 #define UDF_MT_WO UDP_MT_OW /* WORM */
310 #define UDF_MT_RW UDP_MT_RW /* RW */
311 #define UDF_MT_OW UDP_MT_OW /* OW */
314 * udf_flags
316 #define UDF_FL_RDONLY 0x0001 /* file system is read only */
317 #define UDF_FL_RW 0x0002 /* file system is read write */
320 * udf_clean
322 #define UDF_DIRTY 0x00
323 #define UDF_CLEAN 0x01
326 #define RD_CLUSTSZ(ip) ((ip)->i_udf->udf_rdclustsz)
327 #define WR_CLUSTSZ(ip) ((ip)->i_udf->udf_wrclustsz)
330 * Size can be a 64-bit value and therefore we sign extend fs_bmask
331 * to a 64-bit value too so that the higher 32 bits are masked
332 * properly. Note that the type of fs_bmask has to be signed. Otherwise
333 * compiler will set the higher 32 bits as zero and we don't want
334 * this to happen.
337 #ifdef UNDEF
338 #define blkroundup(fs, size) /* calculates roundup(size, fs->fs_bsize) */ \
339 (((size) + (fs)->udf_lbsize - 1) & (offset_t)(fs)->udf_lbmask)
340 #endif
342 #define blkroundup(fs, size) /* calculates roundup(size, fs->fs_bsize) */ \
343 (((size) + (fs)->udf_lbmask) & (offset_t)(~(fs)->udf_lbmask))
345 #define blksize(fs) (fs->udf_lbsize)
349 * Convert between inode pointers and vnode pointers
351 #define VTOI(VP) ((struct ud_inode *)(VP)->v_data)
352 #define ITOV(IP) ((IP)->i_vnode)
353 #define i_vfs i_vnode->v_vfsp
355 struct icb_ext {
356 uint16_t ib_flags;
358 /* Direct Entry will go here */
359 uint16_t ib_prn; /* partition reference number */
360 uint32_t ib_block; /* block offset into partition */
361 uint64_t ib_offset; /* offset into the file bytes */
362 int32_t ib_count; /* No of bytes in current ext */
363 uint32_t ib_marker1; /* 0xAAAAAAAA */
364 uint32_t ib_marker2; /* 0xBBBBBBBB */
368 /* ib_flags */
369 #define IB_UN_REC 0x1 /* The entry is not allocated */
370 #define IB_UN_RE_AL 0x2 /* The entry is not recorded */
371 /* and not unallocated */
372 #define IB_CON 0x3 /* Continuation entry */
374 #define IB_MASK 0x3
376 #define IB_ALLOCATED(flags) \
377 (((flags) & IB_MASK) != IB_UN_RE_AL)
379 #define EXT_PER_MALLOC 8
382 struct ud_inode {
383 struct ud_inode *i_forw;
384 struct ud_inode *i_back;
385 struct ud_inode *i_freef;
386 struct ud_inode *i_freeb;
388 struct vnode *i_vnode; /* vnode associated with this inode */
389 struct vnode *i_devvp; /* vnode for block I/O */
390 struct udf_vfs *i_udf; /* incore fs associated with inode */
391 krwlock_t i_rwlock; /* serializes write/setattr requests */
392 krwlock_t i_contents; /* protects (most of) inode contents */
393 dev_t i_dev; /* device where inode resides */
394 uoff_t i_diroff; /* last loc for fast name lookup */
396 daddr_t i_icb_lbano; /* Loc of file icb on disk */
397 uint16_t i_icb_prn; /* partition reference number */
398 kcondvar_t i_wrcv; /* sleep/wakeup for write throttle */
399 uint32_t i_flag;
400 uint32_t i_icb_block;
402 int16_t i_astrat; /* ICB strategy */
403 int16_t i_desc_type; /* Allocation desc type */
404 int32_t i_ext_count; /* Number of extents allocated */
405 int32_t i_ext_used; /* Number of extents used */
406 struct icb_ext *i_ext; /* array of extents */
408 kmutex_t i_con_lock;
409 struct icb_ext *i_con;
410 int32_t i_con_count;
411 int32_t i_con_used;
412 int32_t i_con_read;
414 uint32_t i_cur_max_ext;
415 vtype_t i_type; /* File type */
416 uint16_t i_char; /* File characteristics */
417 uint16_t i_perm; /* File permissions */
419 uid_t i_uid; /* File owner's uid */
420 gid_t i_gid; /* File owner's gid */
421 uint32_t i_nlink; /* number of links to file */
422 uint32_t i_maxent; /* Max entries that are recorded */
423 uoff_t i_size; /* File size in bytes */
424 uint64_t i_lbr; /* Logical blocks recorded */
425 uint64_t i_uniqid; /* from the file entry */
427 timespec32_t i_atime;
428 timespec32_t i_mtime;
429 timespec32_t i_ctime;
431 size_t i_delaylen; /* delayed writes, units=bytes */
432 offset_t i_delayoff; /* where we started delaying */
433 offset_t i_nextrio; /* where to start the next clust */
434 uint64_t i_writes; /* remaining bytes in write q */
435 kmutex_t i_tlock; /* protects time fields, i_flag */
436 major_t i_major;
437 minor_t i_minor;
439 uint32_t i_marker1; /* 0xAAAAAAAA */
440 uint32_t i_seq; /* sequence number attribute */
441 offset_t i_nextr; /* next byte read offset (read-ahead) */
442 long i_mapcnt; /* number of mappings of pages */
443 int *i_map; /* block list for the file */
444 dev_t i_rdev; /* INCORE rdev from */
445 uint32_t i_marker2; /* 0xBBBBBBBB */
446 uint32_t i_data_off; /* Data offset into embedded file */
447 uint32_t i_max_emb;
448 uint32_t i_marker3;
452 #ifndef __lint
453 _NOTE(RWLOCK_PROTECTS_DATA(ud_inode::i_contents, ud_inode::i_astrat))
454 _NOTE(RWLOCK_PROTECTS_DATA(ud_inode::i_contents, ud_inode::i_desc_type))
455 _NOTE(RWLOCK_PROTECTS_DATA(ud_inode::i_contents, ud_inode::i_ext_count))
456 _NOTE(RWLOCK_PROTECTS_DATA(ud_inode::i_contents, ud_inode::i_ext_used))
457 _NOTE(RWLOCK_PROTECTS_DATA(ud_inode::i_contents, ud_inode::i_ext))
459 _NOTE(RWLOCK_PROTECTS_DATA(ud_inode::i_contents, ud_inode::i_type))
460 _NOTE(RWLOCK_PROTECTS_DATA(ud_inode::i_contents, ud_inode::i_char))
461 _NOTE(RWLOCK_PROTECTS_DATA(ud_inode::i_contents, ud_inode::i_perm))
463 _NOTE(RWLOCK_PROTECTS_DATA(ud_inode::i_contents, ud_inode::i_uid))
464 _NOTE(RWLOCK_PROTECTS_DATA(ud_inode::i_contents, ud_inode::i_gid))
465 _NOTE(RWLOCK_PROTECTS_DATA(ud_inode::i_contents, ud_inode::i_nlink))
466 _NOTE(RWLOCK_PROTECTS_DATA(ud_inode::i_contents, ud_inode::i_size))
467 _NOTE(RWLOCK_PROTECTS_DATA(ud_inode::i_contents, ud_inode::i_lbr))
468 _NOTE(RWLOCK_PROTECTS_DATA(ud_inode::i_contents, ud_inode::i_uniqid))
469 _NOTE(RWLOCK_PROTECTS_DATA(ud_inode::i_contents, ud_inode::i_major))
470 _NOTE(RWLOCK_PROTECTS_DATA(ud_inode::i_contents, ud_inode::i_minor))
472 _NOTE(MUTEX_PROTECTS_DATA(ud_inode::i_tlock, ud_inode::i_atime))
473 _NOTE(MUTEX_PROTECTS_DATA(ud_inode::i_tlock, ud_inode::i_mtime))
474 _NOTE(MUTEX_PROTECTS_DATA(ud_inode::i_tlock, ud_inode::i_ctime))
475 _NOTE(MUTEX_PROTECTS_DATA(ud_inode::i_tlock, ud_inode::i_delayoff))
476 _NOTE(MUTEX_PROTECTS_DATA(ud_inode::i_tlock, ud_inode::i_delaylen))
477 _NOTE(MUTEX_PROTECTS_DATA(ud_inode::i_tlock, ud_inode::i_nextrio))
478 _NOTE(MUTEX_PROTECTS_DATA(ud_inode::i_tlock, ud_inode::i_writes))
479 _NOTE(MUTEX_PROTECTS_DATA(ud_inode::i_tlock, ud_inode::i_flag))
481 _NOTE(RWLOCK_PROTECTS_DATA(ud_inode::i_contents,
482 icb_ext::ib_flags icb_ext::ib_prn
483 icb_ext::ib_block
484 icb_ext::ib_count icb_ext::ib_offset))
485 #endif
488 /* i_flag */
489 #define IUPD 0x0001 /* file has been modified */
490 #define IACC 0x0002 /* inode access time to be updated */
491 #define IMOD 0x0004 /* inode has been modified */
492 #define ICHG 0x0008 /* inode has been changed */
493 #define INOACC 0x0010 /* no access time update in getpage */
494 #define IMODTIME 0x0020 /* mod time already set */
495 #define IREF 0x0040 /* inode is being referenced */
496 #define ISYNC 0x0080 /* do all allocation synchronously */
497 #define IMODACC 0x0200 /* only access time changed; */
498 #define IATTCHG 0x0400 /* only size/blocks have changed */
499 #define IBDWRITE 0x0800 /* the inode has been scheduled for */
500 /* write operation asynchrously */
503 * i_char
504 * Do not change used by MANDLOCK macro in vnode.h
506 #define ISUID VSUID /* set user id on execution */
507 #define ISGID VSGID /* set group id on execution */
508 #define ISVTX VSVTX /* save swapped text even after use */
510 * Setuid --S---------
511 * Setgid -G----------
512 * SaveTXT T-----------
515 /* i_perm */
516 #define IEXEC 0x0400 /* read, write, execute permissions */
517 #define IWRITE 0x0800
518 #define IREAD 0x1000
519 #define IATTR 0x2000
520 #define IDELE 0x4000
522 #define UP_MASK 0x1CE7
523 #define VA2UD_PERM(perm) \
524 (((perm) & 0x7) | (((perm) & 0x38) << 2) | (((perm) & 0x1C0) << 4))
525 #define UD2VA_PERM(perm) \
526 (((perm) & 0x7) | (((perm) & 0xE0) >> 2) | (((perm) & 0x1C00) >> 4))
529 * Permissions
530 * Other -----------DARWX
531 * Group ------DARWX-----
532 * Owner -DARWX----------
534 #define UD_DPERM2UPERM(dperm) ((((dperm) >> 4) & 0x1C0) | \
535 (((dperm) >> 2) & 0x38) | \
536 ((dperm) & 0x7))
537 #define UD_UPERM2DPERM(uperm) ((((uperm) & 0x1C0) << 4) | \
538 (((uperm) & 0x38) << 2) | \
539 ((uperm) & 0x7))
542 /* specify how the inode info is written in ud_syncip() */
543 #define I_SYNC 1 /* wait for the inode written to disk */
544 #define I_DSYNC 2 /* wait for the inode written to disk */
545 /* only if IATTCHG is set */
546 #define I_ASYNC 0 /* don't wait for the inode written */
549 #define UD_HASH_SZ 512
551 #if ((UD_HASH_SZ & (UD_HASH_SZ - 1)) == 0)
552 #define UD_INOHASH(dev, bno) (hash2ints((int)dev, (int)bno) & UD_HASH_SZ - 1)
553 #else
554 #define UD_INOHASH(dev, bno) (hash2ints((int)dev, (int)bno) % UD_HASH_SZ)
555 #endif
557 union ihead {
558 union ihead *ih_head[2];
559 struct ud_inode *ih_chain[2];
563 #define IMARK(ip) ud_imark(ip)
564 #define ITIMES_NOLOCK(ip) ud_itimes_nolock(ip)
566 #define ITIMES(ip) { \
567 mutex_enter(&(ip)->i_tlock); \
568 ITIMES_NOLOCK(ip); \
569 mutex_exit(&(ip)->i_tlock); \
572 #define ESAME (-1) /* trying to rename linked files (special) */
574 #define UDF_HOLE (daddr32_t)-1 /* value used when no block allocated */
577 extern int32_t ud_trace;
578 #define ud_printf(xyz) \
579 if (ud_trace) { \
580 cmn_err(CE_NOTE, xyz); \
583 #ifndef __lint
584 _NOTE(SCHEME_PROTECTS_DATA("Unshared data",
586 dirent64
588 flock64
589 statvfs64
590 timespec32
591 udf_fid
593 vattr
595 vnode))
597 _NOTE(SCHEME_PROTECTS_DATA("Unshared data",
598 file_entry
599 file_id
600 icb_tag
601 indirect_entry
602 log_vol_int_desc
603 long_ad
604 lvid_iu
605 regid
606 short_ad
608 tstamp))
610 _NOTE(LOCK_ORDER(ud_inode::i_rwlock
611 ud_inode::i_contents
612 ud_inode::i_tlock))
613 #endif
616 * udf_vfsops.c
618 void ud_update_superblock(struct vfs *);
622 * udf_vnops.c
624 int32_t ud_rdwri(enum uio_rw, int32_t, struct ud_inode *, caddr_t,
625 int32_t, offset_t, enum uio_seg, int32_t *,
626 struct cred *cr);
627 int32_t ud_putapage(struct vnode *, page_t *, uoff_t *,
628 size_t *, int32_t, struct cred *);
632 * udf_inode.c
634 int32_t ud_iget(struct vfs *, uint16_t, uint32_t, struct ud_inode **,
635 struct buf *, struct cred *);
636 void ud_iinactive(struct ud_inode *, struct cred *);
637 void ud_iupdat(struct ud_inode *, int32_t);
638 int32_t ud_itrunc(struct ud_inode *, uoff_t, int32_t, struct cred *);
639 int32_t ud_iaccess(struct ud_inode *, int32_t, struct cred *, int dolock);
640 int32_t ud_iflush(struct vfs *);
641 void ud_imark(struct ud_inode *);
642 void ud_itimes_nolock(struct ud_inode *);
643 void ud_delcache(struct ud_inode *);
644 void ud_idrop(struct ud_inode *);
645 void ud_init_inodes(void);
649 * udf_alloc.c
651 int32_t ud_alloc_space(struct vfs *, uint16_t, uint32_t,
652 uint32_t, uint32_t *, uint32_t *, int32_t, int32_t);
653 void ud_free_space(struct vfs *, uint16_t, uint32_t, uint32_t);
654 int32_t ud_ialloc(struct ud_inode *, struct ud_inode **,
655 struct vattr *, struct cred *);
656 void ud_ifree(struct ud_inode *, vtype_t);
657 int32_t ud_freesp(struct vnode *, struct flock64 *, int32_t,
658 struct cred *);
659 int32_t ud_alloc_from_cache(struct udf_vfs *, struct ud_part *,
660 uint32_t *);
661 int32_t ud_release_cache(struct udf_vfs *);
665 * udf_subr.c
667 void ud_vfs_add(struct udf_vfs *);
668 void ud_vfs_remove(struct udf_vfs *);
669 daddr_t ud_xlate_to_daddr(struct udf_vfs *, uint16_t,
670 uint32_t, int32_t, uint32_t *);
671 int32_t ud_ip_off2bno(struct ud_inode *, uint32_t, uint32_t *);
672 void ud_dtime2utime(struct timespec32 *, struct tstamp const *);
673 void ud_utime2dtime(struct timespec32 const *, struct tstamp *);
674 int32_t ud_syncip(struct ud_inode *, int32_t, int32_t);
675 void ud_update(int32_t);
676 int32_t ud_fbwrite(struct fbuf *, struct ud_inode *);
677 void ud_sbwrite(struct udf_vfs *);
678 int32_t ud_sync_indir(struct ud_inode *);
679 void ud_update_regid(struct regid *);
680 int32_t ud_read_icb_till_off(struct ud_inode *, uoff_t);
681 void ud_make_tag(struct udf_vfs *, struct tag *,
682 uint16_t, uint32_t, uint16_t);
683 int32_t ud_make_dev_spec_ear(struct dev_spec_ear *, major_t, minor_t);
684 int32_t ud_make_ftimes_ear(struct ftimes_ear *,
685 int32_t, struct timespec32 *);
686 int32_t ud_get_next_fid(struct ud_inode *, struct fbuf **, uint32_t,
687 struct file_id **, uint8_t **, uint8_t *);
688 int32_t ud_verify_tag_and_desc(struct tag *, uint16_t, uint32_t,
689 int32_t, int32_t);
690 uint16_t ud_crc(uint8_t *, int32_t);
691 int32_t ud_compressunicode(int32_t, int32_t, uint16_t *, uint8_t *);
692 uint32_t ud_check_te_unrec(struct udf_vfs *, caddr_t, uint32_t);
693 int32_t ud_compress(int32_t, int32_t *, uint8_t *, uint8_t *);
694 int32_t ud_uncompress(int32_t, int32_t *, uint8_t *, uint8_t *);
695 struct buf *ud_bread(dev_t, daddr_t, long);
696 int ud_sticky_remove_access(struct ud_inode *, struct ud_inode *,
697 struct cred *);
701 * udf_dir.c
703 int32_t ud_dirlook(struct ud_inode *,
704 char *, struct ud_inode **, struct cred *, int32_t);
705 int32_t ud_direnter(struct ud_inode *, char *, enum de_op,
706 struct ud_inode *, struct ud_inode *, struct vattr *,
707 struct ud_inode **, struct cred *, caller_context_t *);
708 int32_t ud_dirremove(struct ud_inode *,
709 char *, struct ud_inode *, struct vnode *,
710 enum dr_op, struct cred *, caller_context_t *);
714 * udf_bmap.c
716 int32_t ud_bmap_has_holes(struct ud_inode *);
717 int32_t ud_bmap_write(struct ud_inode *, uoff_t,
718 int, int32_t, struct cred *);
719 int32_t ud_bmap_read(struct ud_inode *, uoff_t,
720 daddr_t *, int32_t *);
721 void ud_insert_new_ext(struct ud_inode *,
722 int32_t, struct icb_ext *);
723 int32_t ud_alloc_and_make_ext(struct ud_inode *, int32_t);
724 int32_t ud_create_new_icb(struct ud_inode *);
725 void ud_append_new_ext(struct ud_inode *, uint16_t,
726 uoff_t, uint32_t, uint16_t, uint32_t);
729 #ifdef __cplusplus
731 #endif
733 #endif /* _SYS_FS_UDF_INODE_H */