diff options
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_vnode.h')
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_vnode.h | 60 |
1 files changed, 18 insertions, 42 deletions
diff --git a/fs/xfs/linux-2.6/xfs_vnode.h b/fs/xfs/linux-2.6/xfs_vnode.h index a6e57c647be4..35f306cebb87 100644 --- a/fs/xfs/linux-2.6/xfs_vnode.h +++ b/fs/xfs/linux-2.6/xfs_vnode.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. | 2 | * Copyright (c) 2000-2005 Silicon Graphics, Inc. All Rights Reserved. |
| 3 | * | 3 | * |
| 4 | * This program is free software; you can redistribute it and/or modify it | 4 | * This program is free software; you can redistribute it and/or modify it |
| 5 | * under the terms of version 2 of the GNU General Public License as | 5 | * under the terms of version 2 of the GNU General Public License as |
| @@ -65,10 +65,6 @@ struct vattr; | |||
| 65 | struct xfs_iomap; | 65 | struct xfs_iomap; |
| 66 | struct attrlist_cursor_kern; | 66 | struct attrlist_cursor_kern; |
| 67 | 67 | ||
| 68 | /* | ||
| 69 | * Vnode types. VNON means no type. | ||
| 70 | */ | ||
| 71 | enum vtype { VNON, VREG, VDIR, VBLK, VCHR, VLNK, VFIFO, VBAD, VSOCK }; | ||
| 72 | 68 | ||
| 73 | typedef xfs_ino_t vnumber_t; | 69 | typedef xfs_ino_t vnumber_t; |
| 74 | typedef struct dentry vname_t; | 70 | typedef struct dentry vname_t; |
| @@ -77,15 +73,14 @@ typedef bhv_head_t vn_bhv_head_t; | |||
| 77 | /* | 73 | /* |
| 78 | * MP locking protocols: | 74 | * MP locking protocols: |
| 79 | * v_flag, v_vfsp VN_LOCK/VN_UNLOCK | 75 | * v_flag, v_vfsp VN_LOCK/VN_UNLOCK |
| 80 | * v_type read-only or fs-dependent | ||
| 81 | */ | 76 | */ |
| 82 | typedef struct vnode { | 77 | typedef struct vnode { |
| 83 | __u32 v_flag; /* vnode flags (see below) */ | 78 | __u32 v_flag; /* vnode flags (see below) */ |
| 84 | enum vtype v_type; /* vnode type */ | ||
| 85 | struct vfs *v_vfsp; /* ptr to containing VFS */ | 79 | struct vfs *v_vfsp; /* ptr to containing VFS */ |
| 86 | vnumber_t v_number; /* in-core vnode number */ | 80 | vnumber_t v_number; /* in-core vnode number */ |
| 87 | vn_bhv_head_t v_bh; /* behavior head */ | 81 | vn_bhv_head_t v_bh; /* behavior head */ |
| 88 | spinlock_t v_lock; /* VN_LOCK/VN_UNLOCK */ | 82 | spinlock_t v_lock; /* VN_LOCK/VN_UNLOCK */ |
| 83 | atomic_t v_iocount; /* outstanding I/O count */ | ||
| 89 | #ifdef XFS_VNODE_TRACE | 84 | #ifdef XFS_VNODE_TRACE |
| 90 | struct ktrace *v_trace; /* trace header structure */ | 85 | struct ktrace *v_trace; /* trace header structure */ |
| 91 | #endif | 86 | #endif |
| @@ -93,6 +88,12 @@ typedef struct vnode { | |||
| 93 | /* inode MUST be last */ | 88 | /* inode MUST be last */ |
| 94 | } vnode_t; | 89 | } vnode_t; |
| 95 | 90 | ||
| 91 | #define VN_ISLNK(vp) S_ISLNK((vp)->v_inode.i_mode) | ||
| 92 | #define VN_ISREG(vp) S_ISREG((vp)->v_inode.i_mode) | ||
| 93 | #define VN_ISDIR(vp) S_ISDIR((vp)->v_inode.i_mode) | ||
| 94 | #define VN_ISCHR(vp) S_ISCHR((vp)->v_inode.i_mode) | ||
| 95 | #define VN_ISBLK(vp) S_ISBLK((vp)->v_inode.i_mode) | ||
| 96 | |||
| 96 | #define v_fbhv v_bh.bh_first /* first behavior */ | 97 | #define v_fbhv v_bh.bh_first /* first behavior */ |
| 97 | #define v_fops v_bh.bh_first->bd_ops /* first behavior ops */ | 98 | #define v_fops v_bh.bh_first->bd_ops /* first behavior ops */ |
| 98 | 99 | ||
| @@ -133,22 +134,8 @@ typedef enum { | |||
| 133 | #define LINVFS_GET_IP(vp) (&(vp)->v_inode) | 134 | #define LINVFS_GET_IP(vp) (&(vp)->v_inode) |
| 134 | 135 | ||
| 135 | /* | 136 | /* |
| 136 | * Convert between vnode types and inode formats (since POSIX.1 | ||
| 137 | * defines mode word of stat structure in terms of inode formats). | ||
| 138 | */ | ||
| 139 | extern enum vtype iftovt_tab[]; | ||
| 140 | extern u_short vttoif_tab[]; | ||
| 141 | #define IFTOVT(mode) (iftovt_tab[((mode) & S_IFMT) >> 12]) | ||
| 142 | #define VTTOIF(indx) (vttoif_tab[(int)(indx)]) | ||
| 143 | #define MAKEIMODE(indx, mode) (int)(VTTOIF(indx) | (mode)) | ||
| 144 | |||
| 145 | |||
| 146 | /* | ||
| 147 | * Vnode flags. | 137 | * Vnode flags. |
| 148 | */ | 138 | */ |
| 149 | #define VINACT 0x1 /* vnode is being inactivated */ | ||
| 150 | #define VRECLM 0x2 /* vnode is being reclaimed */ | ||
| 151 | #define VWAIT 0x4 /* waiting for VINACT/VRECLM to end */ | ||
| 152 | #define VMODIFIED 0x8 /* XFS inode state possibly differs */ | 139 | #define VMODIFIED 0x8 /* XFS inode state possibly differs */ |
| 153 | /* to the Linux inode state. */ | 140 | /* to the Linux inode state. */ |
| 154 | 141 | ||
| @@ -408,7 +395,6 @@ typedef struct vnodeops { | |||
| 408 | */ | 395 | */ |
| 409 | typedef struct vattr { | 396 | typedef struct vattr { |
| 410 | int va_mask; /* bit-mask of attributes present */ | 397 | int va_mask; /* bit-mask of attributes present */ |
| 411 | enum vtype va_type; /* vnode type (for create) */ | ||
| 412 | mode_t va_mode; /* file access mode and type */ | 398 | mode_t va_mode; /* file access mode and type */ |
| 413 | xfs_nlink_t va_nlink; /* number of references to file */ | 399 | xfs_nlink_t va_nlink; /* number of references to file */ |
| 414 | uid_t va_uid; /* owner user id */ | 400 | uid_t va_uid; /* owner user id */ |
| @@ -498,27 +484,12 @@ typedef struct vattr { | |||
| 498 | * Check whether mandatory file locking is enabled. | 484 | * Check whether mandatory file locking is enabled. |
| 499 | */ | 485 | */ |
| 500 | #define MANDLOCK(vp, mode) \ | 486 | #define MANDLOCK(vp, mode) \ |
| 501 | ((vp)->v_type == VREG && ((mode) & (VSGID|(VEXEC>>3))) == VSGID) | 487 | (VN_ISREG(vp) && ((mode) & (VSGID|(VEXEC>>3))) == VSGID) |
| 502 | 488 | ||
| 503 | extern void vn_init(void); | 489 | extern void vn_init(void); |
| 504 | extern int vn_wait(struct vnode *); | ||
| 505 | extern vnode_t *vn_initialize(struct inode *); | 490 | extern vnode_t *vn_initialize(struct inode *); |
| 506 | 491 | ||
| 507 | /* | 492 | /* |
| 508 | * Acquiring and invalidating vnodes: | ||
| 509 | * | ||
| 510 | * if (vn_get(vp, version, 0)) | ||
| 511 | * ...; | ||
| 512 | * vn_purge(vp, version); | ||
| 513 | * | ||
| 514 | * vn_get and vn_purge must be called with vmap_t arguments, sampled | ||
| 515 | * while a lock that the vnode's VOP_RECLAIM function acquires is | ||
| 516 | * held, to ensure that the vnode sampled with the lock held isn't | ||
| 517 | * recycled (VOP_RECLAIMed) or deallocated between the release of the lock | ||
| 518 | * and the subsequent vn_get or vn_purge. | ||
| 519 | */ | ||
| 520 | |||
| 521 | /* | ||
| 522 | * vnode_map structures _must_ match vn_epoch and vnode structure sizes. | 493 | * vnode_map structures _must_ match vn_epoch and vnode structure sizes. |
| 523 | */ | 494 | */ |
| 524 | typedef struct vnode_map { | 495 | typedef struct vnode_map { |
| @@ -531,11 +502,11 @@ typedef struct vnode_map { | |||
| 531 | (vmap).v_number = (vp)->v_number, \ | 502 | (vmap).v_number = (vp)->v_number, \ |
| 532 | (vmap).v_ino = (vp)->v_inode.i_ino; } | 503 | (vmap).v_ino = (vp)->v_inode.i_ino; } |
| 533 | 504 | ||
| 534 | extern void vn_purge(struct vnode *, vmap_t *); | ||
| 535 | extern vnode_t *vn_get(struct vnode *, vmap_t *); | ||
| 536 | extern int vn_revalidate(struct vnode *); | 505 | extern int vn_revalidate(struct vnode *); |
| 537 | extern void vn_revalidate_core(struct vnode *, vattr_t *); | 506 | extern void vn_revalidate_core(struct vnode *, vattr_t *); |
| 538 | extern void vn_remove(struct vnode *); | 507 | |
| 508 | extern void vn_iowait(struct vnode *vp); | ||
| 509 | extern void vn_iowake(struct vnode *vp); | ||
| 539 | 510 | ||
| 540 | static inline int vn_count(struct vnode *vp) | 511 | static inline int vn_count(struct vnode *vp) |
| 541 | { | 512 | { |
| @@ -546,7 +517,6 @@ static inline int vn_count(struct vnode *vp) | |||
| 546 | * Vnode reference counting functions (and macros for compatibility). | 517 | * Vnode reference counting functions (and macros for compatibility). |
| 547 | */ | 518 | */ |
| 548 | extern vnode_t *vn_hold(struct vnode *); | 519 | extern vnode_t *vn_hold(struct vnode *); |
| 549 | extern void vn_rele(struct vnode *); | ||
| 550 | 520 | ||
| 551 | #if defined(XFS_VNODE_TRACE) | 521 | #if defined(XFS_VNODE_TRACE) |
| 552 | #define VN_HOLD(vp) \ | 522 | #define VN_HOLD(vp) \ |
| @@ -560,6 +530,12 @@ extern void vn_rele(struct vnode *); | |||
| 560 | #define VN_RELE(vp) (iput(LINVFS_GET_IP(vp))) | 530 | #define VN_RELE(vp) (iput(LINVFS_GET_IP(vp))) |
| 561 | #endif | 531 | #endif |
| 562 | 532 | ||
| 533 | static inline struct vnode *vn_grab(struct vnode *vp) | ||
| 534 | { | ||
| 535 | struct inode *inode = igrab(LINVFS_GET_IP(vp)); | ||
| 536 | return inode ? LINVFS_GET_VP(inode) : NULL; | ||
| 537 | } | ||
| 538 | |||
| 563 | /* | 539 | /* |
| 564 | * Vname handling macros. | 540 | * Vname handling macros. |
| 565 | */ | 541 | */ |
