[XFS] add helper to get xfs_inode from vnode
authorChristoph Hellwig <hch@sgi.com>
Wed, 11 Jan 2006 09:58:44 +0000 (20:58 +1100)
committerNathan Scott <nathans@sgi.com>
Wed, 11 Jan 2006 09:58:44 +0000 (20:58 +1100)
SGI-PV: 947206
SGI-Modid: xfs-linux-melb:xfs-kern:203960a

Signed-off-by: Christoph Hellwig <hch@sgi.com>
Signed-off-by: Nathan Scott <nathans@sgi.com>
fs/xfs/linux-2.6/xfs_aops.c
fs/xfs/linux-2.6/xfs_file.c
fs/xfs/linux-2.6/xfs_ioctl.c
fs/xfs/linux-2.6/xfs_iops.c
fs/xfs/xfs_dfrag.c
fs/xfs/xfs_iget.c
fs/xfs/xfs_inode.h
fs/xfs/xfs_rename.c
fs/xfs/xfs_utils.c
fs/xfs/xfs_vnodeops.c

index 52707b5ddcb82d58648dcbe89b674f465aef5f37..d1db8c17a74e8eb7b5ccd0a0a971808d1960606f 100644 (file)
@@ -54,7 +54,6 @@ xfs_page_trace(
        int             mask)
 {
        xfs_inode_t     *ip;
-       bhv_desc_t      *bdp;
        vnode_t         *vp = LINVFS_GET_VP(inode);
        loff_t          isize = i_size_read(inode);
        loff_t          offset = page_offset(page);
@@ -63,8 +62,7 @@ xfs_page_trace(
        if (page_has_buffers(page))
                xfs_count_page_state(page, &delalloc, &unmapped, &unwritten);
 
-       bdp = vn_bhv_lookup(VN_BHV_HEAD(vp), &xfs_vnodeops);
-       ip = XFS_BHVTOI(bdp);
+       ip = xfs_vtoi(vp);
        if (!ip->i_rwtrace)
                return;
 
index 06111d0bbae4b2fff01bfd220092c4d396aa9f5b..ced4404339c7efd214255aed73ba6110d33d0eaf 100644 (file)
@@ -509,16 +509,14 @@ linvfs_open_exec(
        vnode_t         *vp = LINVFS_GET_VP(inode);
        xfs_mount_t     *mp = XFS_VFSTOM(vp->v_vfsp);
        int             error = 0;
-       bhv_desc_t      *bdp;
        xfs_inode_t     *ip;
 
        if (vp->v_vfsp->vfs_flag & VFS_DMI) {
-               bdp = vn_bhv_lookup(VN_BHV_HEAD(vp), &xfs_vnodeops);
-               if (!bdp) {
+               ip = xfs_vtoi(vp);
+               if (!ip) {
                        error = -EINVAL;
                        goto open_exec_out;
                }
-               ip = XFS_BHVTOI(bdp);
                if (DM_EVENT_ENABLED(vp->v_vfsp, ip, DM_EVENT_READ)) {
                        error = -XFS_SEND_DATA(mp, DM_EVENT_READ, vp,
                                               0, 0, 0, NULL);
index 7ad7b680e9966518bd32877e138b2df922dc6ec0..b3b2cfda273ccbe625d79cfacf1c382a50a0c51e 100644 (file)
@@ -145,13 +145,10 @@ xfs_find_handle(
 
        if (cmd != XFS_IOC_PATH_TO_FSHANDLE) {
                xfs_inode_t     *ip;
-               bhv_desc_t      *bhv;
                int             lock_mode;
 
                /* need to get access to the xfs_inode to read the generation */
-               bhv = vn_bhv_lookup_unlocked(VN_BHV_HEAD(vp), &xfs_vnodeops);
-               ASSERT(bhv);
-               ip = XFS_BHVTOI(bhv);
+               ip = xfs_vtoi(vp);
                ASSERT(ip);
                lock_mode = xfs_ilock_map_shared(ip);
 
index fe5e9894fdeed50980aaa1e74594732e5e55279b..d388d14efe3e6b0e49f5444619ddbee809731c30 100644 (file)
 #define IS_NOATIME(inode) ((inode->i_sb->s_flags & MS_NOATIME) ||      \
        (S_ISDIR(inode->i_mode) && inode->i_sb->s_flags & MS_NODIRATIME))
 
+/*
+ * Get a XFS inode from a given vnode.
+ */
+xfs_inode_t *
+xfs_vtoi(
+       struct vnode    *vp)
+{
+       bhv_desc_t      *bdp;
+
+       bdp = bhv_lookup_range(VN_BHV_HEAD(vp),
+                       VNODE_POSITION_XFS, VNODE_POSITION_XFS);
+       if (unlikely(bdp == NULL))
+               return NULL;
+       return XFS_BHVTOI(bdp);
+}
+
 /*
  * Bring the atime in the XFS inode uptodate.
  * Used before logging the inode to disk or when the Linux inode goes away.
index 070259a4254c41a6fc370f9c43e42e253fb0e496..c6191d00ad27fb721e11c2639e02a3c199653279 100644 (file)
@@ -60,8 +60,6 @@ xfs_swapext(
        xfs_bstat_t     *sbp;
        struct file     *fp = NULL, *tfp = NULL;
        vnode_t         *vp, *tvp;
-       bhv_desc_t      *bdp, *tbdp;
-       vn_bhv_head_t   *bhp, *tbhp;
        static uint     lock_flags = XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL;
        int             ilf_fields, tilf_fields;
        int             error = 0;
@@ -90,13 +88,10 @@ xfs_swapext(
                goto error0;
        }
 
-       bhp = VN_BHV_HEAD(vp);
-       bdp = vn_bhv_lookup(bhp, &xfs_vnodeops);
-       if (bdp == NULL) {
+       ip = xfs_vtoi(vp);
+       if (ip == NULL) {
                error = XFS_ERROR(EBADF);
                goto error0;
-       } else {
-               ip = XFS_BHVTOI(bdp);
        }
 
        if (((tfp = fget((int)sxp->sx_fdtmp)) == NULL) ||
@@ -105,13 +100,10 @@ xfs_swapext(
                goto error0;
        }
 
-       tbhp = VN_BHV_HEAD(tvp);
-       tbdp = vn_bhv_lookup(tbhp, &xfs_vnodeops);
-       if (tbdp == NULL) {
+       tip = xfs_vtoi(tvp);
+       if (tip == NULL) {
                error = XFS_ERROR(EBADF);
                goto error0;
-       } else {
-               tip = XFS_BHVTOI(tbdp);
        }
 
        if (ip->i_mount != tip->i_mount) {
index fc19eedbd11b0addaea5ed62386f2f6447988cd4..8e380a1fb79b691f03efa0e0aa126ce9c0e78727 100644 (file)
@@ -493,7 +493,6 @@ xfs_iget(
 
 retry:
        if ((inode = iget_locked(XFS_MTOVFS(mp)->vfs_super, ino))) {
-               bhv_desc_t      *bdp;
                xfs_inode_t     *ip;
 
                vp = LINVFS_GET_VP(inode);
@@ -517,14 +516,12 @@ retry:
                         * to wait for the inode to go away.
                         */
                        if (is_bad_inode(inode) ||
-                           ((bdp = vn_bhv_lookup(VN_BHV_HEAD(vp),
-                                                 &xfs_vnodeops)) == NULL)) {
+                           ((ip = xfs_vtoi(vp)) == NULL)) {
                                iput(inode);
                                delay(1);
                                goto retry;
                        }
 
-                       ip = XFS_BHVTOI(bdp);
                        if (lock_flags != 0)
                                xfs_ilock(ip, lock_flags);
                        XFS_STATS_INC(xs_ig_found);
index c4c1d9bce82e25716be54d2967387586acb17990..1cfbcf18ce86375a2a1ee6bacafd45cefab44361 100644 (file)
@@ -436,6 +436,8 @@ void                xfs_ichgtime(xfs_inode_t *, int);
 xfs_fsize_t    xfs_file_last_byte(xfs_inode_t *);
 void           xfs_lock_inodes(xfs_inode_t **, int, int, uint);
 
+xfs_inode_t    *xfs_vtoi(struct vnode *vp);
+
 void           xfs_synchronize_atime(xfs_inode_t *);
 
 #define xfs_ipincount(ip)      ((unsigned int) atomic_read(&ip->i_pincount))
index 4d4e8f4e768e09640b48dc3f843b82414448b5a1..81a05cfd77d2b5f60fa2429366ae07af19ca4843 100644 (file)
@@ -243,7 +243,6 @@ xfs_rename(
        xfs_inode_t     *inodes[4];
        int             target_ip_dropped = 0;  /* dropped target_ip link? */
        vnode_t         *src_dir_vp;
-       bhv_desc_t      *target_dir_bdp;
        int             spaceres;
        int             target_link_zero = 0;
        int             num_inodes;
@@ -260,14 +259,12 @@ xfs_rename(
         * Find the XFS behavior descriptor for the target directory
         * vnode since it was not handed to us.
         */
-       target_dir_bdp = vn_bhv_lookup_unlocked(VN_BHV_HEAD(target_dir_vp),
-                                               &xfs_vnodeops);
-       if (target_dir_bdp == NULL) {
+       target_dp = xfs_vtoi(target_dir_vp);
+       if (target_dp == NULL) {
                return XFS_ERROR(EXDEV);
        }
 
        src_dp = XFS_BHVTOI(src_dir_bdp);
-       target_dp = XFS_BHVTOI(target_dir_bdp);
        mp = src_dp->i_mount;
 
        if (DM_EVENT_ENABLED(src_dir_vp->v_vfsp, src_dp, DM_EVENT_RENAME) ||
index fefe1d60377fc825eecbf688ede1e2e6a4fce4ed..34654ec6ae106e45a2d508556cb09e70b18a40dd 100644 (file)
@@ -55,16 +55,13 @@ xfs_get_dir_entry(
        xfs_inode_t     **ipp)
 {
        vnode_t         *vp;
-       bhv_desc_t      *bdp;
 
        vp = VNAME_TO_VNODE(dentry);
-       bdp = vn_bhv_lookup_unlocked(VN_BHV_HEAD(vp), &xfs_vnodeops);
-       if (!bdp) {
-               *ipp = NULL;
+
+       *ipp = xfs_vtoi(vp);
+       if (!*ipp)
                return XFS_ERROR(ENOENT);
-       }
        VN_HOLD(vp);
-       *ipp = XFS_BHVTOI(bdp);
        return 0;
 }
 
index 3e8f1cbb7049ba6ac220d2818da923d42557155d..b12fcfcb196db603717121fc4fcd77e6f036ce7d 100644 (file)
@@ -2578,7 +2578,6 @@ xfs_link(
        int                     cancel_flags;
        int                     committed;
        vnode_t                 *target_dir_vp;
-       bhv_desc_t              *src_bdp;
        int                     resblks;
        char                    *target_name = VNAME(dentry);
        int                     target_namelen;
@@ -2591,8 +2590,7 @@ xfs_link(
        if (VN_ISDIR(src_vp))
                return XFS_ERROR(EPERM);
 
-       src_bdp = vn_bhv_lookup_unlocked(VN_BHV_HEAD(src_vp), &xfs_vnodeops);
-       sip = XFS_BHVTOI(src_bdp);
+       sip = xfs_vtoi(src_vp);
        tdp = XFS_BHVTOI(target_dir_bdp);
        mp = tdp->i_mount;
        if (XFS_FORCED_SHUTDOWN(mp))