vserver 2.0 rc7
[linux-2.6.git] / fs / xfs / linux-2.6 / xfs_vnode.c
index 44ba5e5..b0cdaa8 100644 (file)
@@ -34,7 +34,7 @@
 
 
 uint64_t vn_generation;                /* vnode generation number */
-spinlock_t vnumber_lock = SPIN_LOCK_UNLOCKED;
+DEFINE_SPINLOCK(vnumber_lock);
 
 /*
  * Dedicated vnode inactive/reclaim sync semaphores.
@@ -156,7 +156,6 @@ vn_initialize(
 
 #ifdef XFS_VNODE_TRACE
        vp->v_trace = ktrace_alloc(VNODE_TRACE_SIZE, KM_SLEEP);
-       printk("Allocated VNODE_TRACE at 0x%p\n", vp->v_trace);
 #endif /* XFS_VNODE_TRACE */
 
        vn_trace_exit(vp, "vn_initialize", (inst_t *)__return_address);
@@ -187,6 +186,53 @@ vn_get(
        return vp;
 }
 
+/*
+ * Revalidate the Linux inode from the vattr.
+ * Note: i_size _not_ updated; we must hold the inode
+ * semaphore when doing that - callers responsibility.
+ */
+void
+vn_revalidate_core(
+       struct vnode    *vp,
+       vattr_t         *vap)
+{
+       struct inode    *inode = LINVFS_GET_IP(vp);
+
+       inode->i_mode       = VTTOIF(vap->va_type) | vap->va_mode;
+       inode->i_nlink      = vap->va_nlink;
+       inode->i_uid        = vap->va_uid;
+       inode->i_gid        = vap->va_gid;
+       inode->i_xid        = vap->va_xid;
+       inode->i_blocks     = vap->va_nblocks;
+       inode->i_mtime      = vap->va_mtime;
+       inode->i_ctime      = vap->va_ctime;
+       inode->i_atime      = vap->va_atime;
+       if (vap->va_xflags & XFS_XFLAG_IMMUTABLE)
+               inode->i_flags |= S_IMMUTABLE;
+       else
+               inode->i_flags &= ~S_IMMUTABLE;
+       if (vap->va_xflags & XFS_XFLAG_IUNLINK)
+               inode->i_flags |= S_IUNLINK;
+       else
+               inode->i_flags &= ~S_IUNLINK;
+       if (vap->va_xflags & XFS_XFLAG_BARRIER)
+               inode->i_flags |= S_BARRIER;
+       else
+               inode->i_flags &= ~S_BARRIER;
+       if (vap->va_xflags & XFS_XFLAG_APPEND)
+               inode->i_flags |= S_APPEND;
+       else
+               inode->i_flags &= ~S_APPEND;
+       if (vap->va_xflags & XFS_XFLAG_SYNC)
+               inode->i_flags |= S_SYNC;
+       else
+               inode->i_flags &= ~S_SYNC;
+       if (vap->va_xflags & XFS_XFLAG_NOATIME)
+               inode->i_flags |= S_NOATIME;
+       else
+               inode->i_flags &= ~S_NOATIME;
+}
+
 /*
  * Revalidate the Linux inode from the vnode.
  */
@@ -194,7 +240,6 @@ int
 vn_revalidate(
        struct vnode    *vp)
 {
-       struct inode    *inode;
        vattr_t         va;
        int             error;
 
@@ -204,39 +249,7 @@ vn_revalidate(
        va.va_mask = XFS_AT_STAT|XFS_AT_XFLAGS;
        VOP_GETATTR(vp, &va, 0, NULL, error);
        if (!error) {
-               inode = LINVFS_GET_IP(vp);
-               inode->i_mode       = VTTOIF(va.va_type) | va.va_mode;
-               inode->i_nlink      = va.va_nlink;
-               inode->i_uid        = va.va_uid;
-               inode->i_gid        = va.va_gid;
-               inode->i_blocks     = va.va_nblocks;
-               inode->i_mtime      = va.va_mtime;
-               inode->i_ctime      = va.va_ctime;
-               inode->i_atime      = va.va_atime;
-               if (va.va_xflags & XFS_XFLAG_IMMUTABLE)
-                       inode->i_flags |= S_IMMUTABLE;
-               else
-                       inode->i_flags &= ~S_IMMUTABLE;
-               if (va.va_xflags & XFS_XFLAG_IUNLINK)
-                       inode->i_flags |= S_IUNLINK;
-               else
-                       inode->i_flags &= ~S_IUNLINK;
-               if (va.va_xflags & XFS_XFLAG_BARRIER)
-                       inode->i_flags |= S_BARRIER;
-               else
-                       inode->i_flags &= ~S_BARRIER;
-               if (va.va_xflags & XFS_XFLAG_APPEND)
-                       inode->i_flags |= S_APPEND;
-               else
-                       inode->i_flags &= ~S_APPEND;
-               if (va.va_xflags & XFS_XFLAG_SYNC)
-                       inode->i_flags |= S_SYNC;
-               else
-                       inode->i_flags &= ~S_SYNC;
-               if (va.va_xflags & XFS_XFLAG_NOATIME)
-                       inode->i_flags |= S_NOATIME;
-               else
-                       inode->i_flags &= ~S_NOATIME;
+               vn_revalidate_core(vp, &va);
                VUNMODIFY(vp);
        }
        return -error;
@@ -410,8 +423,8 @@ vn_remove(
 /*  3 */               (void *)(vn_count(vp)), \
 /*  4 */               (void *)(ra),                           \
 /*  5 */               (void *)(__psunsigned_t)(vp)->v_flag,   \
-/*  6 */               (void *)(__psint_t)smp_processor_id(),  \
-/*  7 */               (void *)(__psint_t)(current->pid),      \
+/*  6 */               (void *)(__psint_t)current_cpu(),       \
+/*  7 */               (void *)(__psint_t)current_pid(),       \
 /*  8 */               (void *)__return_address,               \
 /*  9 */               0, 0, 0, 0, 0, 0, 0)
 
@@ -419,13 +432,13 @@ vn_remove(
  * Vnode tracing code.
  */
 void
-vn_trace_entry(vnode_t *vp, char *func, inst_t *ra)
+vn_trace_entry(vnode_t *vp, const char *func, inst_t *ra)
 {
        KTRACE_ENTER(vp, VNODE_KTRACE_ENTRY, func, 0, ra);
 }
 
 void
-vn_trace_exit(vnode_t *vp, char *func, inst_t *ra)
+vn_trace_exit(vnode_t *vp, const char *func, inst_t *ra)
 {
        KTRACE_ENTER(vp, VNODE_KTRACE_EXIT, func, 0, ra);
 }