[XFS] add helper to get xfs_inode from vnode

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>

authored by Christoph Hellwig and committed by Nathan Scott 75e17b3c 204ab25f

+33 -41
+1 -3
fs/xfs/linux-2.6/xfs_aops.c
··· 54 54 int mask) 55 55 { 56 56 xfs_inode_t *ip; 57 - bhv_desc_t *bdp; 58 57 vnode_t *vp = LINVFS_GET_VP(inode); 59 58 loff_t isize = i_size_read(inode); 60 59 loff_t offset = page_offset(page); ··· 62 63 if (page_has_buffers(page)) 63 64 xfs_count_page_state(page, &delalloc, &unmapped, &unwritten); 64 65 65 - bdp = vn_bhv_lookup(VN_BHV_HEAD(vp), &xfs_vnodeops); 66 - ip = XFS_BHVTOI(bdp); 66 + ip = xfs_vtoi(vp); 67 67 if (!ip->i_rwtrace) 68 68 return; 69 69
+2 -4
fs/xfs/linux-2.6/xfs_file.c
··· 509 509 vnode_t *vp = LINVFS_GET_VP(inode); 510 510 xfs_mount_t *mp = XFS_VFSTOM(vp->v_vfsp); 511 511 int error = 0; 512 - bhv_desc_t *bdp; 513 512 xfs_inode_t *ip; 514 513 515 514 if (vp->v_vfsp->vfs_flag & VFS_DMI) { 516 - bdp = vn_bhv_lookup(VN_BHV_HEAD(vp), &xfs_vnodeops); 517 - if (!bdp) { 515 + ip = xfs_vtoi(vp); 516 + if (!ip) { 518 517 error = -EINVAL; 519 518 goto open_exec_out; 520 519 } 521 - ip = XFS_BHVTOI(bdp); 522 520 if (DM_EVENT_ENABLED(vp->v_vfsp, ip, DM_EVENT_READ)) { 523 521 error = -XFS_SEND_DATA(mp, DM_EVENT_READ, vp, 524 522 0, 0, 0, NULL);
+1 -4
fs/xfs/linux-2.6/xfs_ioctl.c
··· 145 145 146 146 if (cmd != XFS_IOC_PATH_TO_FSHANDLE) { 147 147 xfs_inode_t *ip; 148 - bhv_desc_t *bhv; 149 148 int lock_mode; 150 149 151 150 /* need to get access to the xfs_inode to read the generation */ 152 - bhv = vn_bhv_lookup_unlocked(VN_BHV_HEAD(vp), &xfs_vnodeops); 153 - ASSERT(bhv); 154 - ip = XFS_BHVTOI(bhv); 151 + ip = xfs_vtoi(vp); 155 152 ASSERT(ip); 156 153 lock_mode = xfs_ilock_map_shared(ip); 157 154
+16
fs/xfs/linux-2.6/xfs_iops.c
··· 59 59 (S_ISDIR(inode->i_mode) && inode->i_sb->s_flags & MS_NODIRATIME)) 60 60 61 61 /* 62 + * Get a XFS inode from a given vnode. 63 + */ 64 + xfs_inode_t * 65 + xfs_vtoi( 66 + struct vnode *vp) 67 + { 68 + bhv_desc_t *bdp; 69 + 70 + bdp = bhv_lookup_range(VN_BHV_HEAD(vp), 71 + VNODE_POSITION_XFS, VNODE_POSITION_XFS); 72 + if (unlikely(bdp == NULL)) 73 + return NULL; 74 + return XFS_BHVTOI(bdp); 75 + } 76 + 77 + /* 62 78 * Bring the atime in the XFS inode uptodate. 63 79 * Used before logging the inode to disk or when the Linux inode goes away. 64 80 */
+4 -12
fs/xfs/xfs_dfrag.c
··· 60 60 xfs_bstat_t *sbp; 61 61 struct file *fp = NULL, *tfp = NULL; 62 62 vnode_t *vp, *tvp; 63 - bhv_desc_t *bdp, *tbdp; 64 - vn_bhv_head_t *bhp, *tbhp; 65 63 static uint lock_flags = XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL; 66 64 int ilf_fields, tilf_fields; 67 65 int error = 0; ··· 88 90 goto error0; 89 91 } 90 92 91 - bhp = VN_BHV_HEAD(vp); 92 - bdp = vn_bhv_lookup(bhp, &xfs_vnodeops); 93 - if (bdp == NULL) { 93 + ip = xfs_vtoi(vp); 94 + if (ip == NULL) { 94 95 error = XFS_ERROR(EBADF); 95 96 goto error0; 96 - } else { 97 - ip = XFS_BHVTOI(bdp); 98 97 } 99 98 100 99 if (((tfp = fget((int)sxp->sx_fdtmp)) == NULL) || ··· 100 105 goto error0; 101 106 } 102 107 103 - tbhp = VN_BHV_HEAD(tvp); 104 - tbdp = vn_bhv_lookup(tbhp, &xfs_vnodeops); 105 - if (tbdp == NULL) { 108 + tip = xfs_vtoi(tvp); 109 + if (tip == NULL) { 106 110 error = XFS_ERROR(EBADF); 107 111 goto error0; 108 - } else { 109 - tip = XFS_BHVTOI(tbdp); 110 112 } 111 113 112 114 if (ip->i_mount != tip->i_mount) {
+1 -4
fs/xfs/xfs_iget.c
··· 493 493 494 494 retry: 495 495 if ((inode = iget_locked(XFS_MTOVFS(mp)->vfs_super, ino))) { 496 - bhv_desc_t *bdp; 497 496 xfs_inode_t *ip; 498 497 499 498 vp = LINVFS_GET_VP(inode); ··· 516 517 * to wait for the inode to go away. 517 518 */ 518 519 if (is_bad_inode(inode) || 519 - ((bdp = vn_bhv_lookup(VN_BHV_HEAD(vp), 520 - &xfs_vnodeops)) == NULL)) { 520 + ((ip = xfs_vtoi(vp)) == NULL)) { 521 521 iput(inode); 522 522 delay(1); 523 523 goto retry; 524 524 } 525 525 526 - ip = XFS_BHVTOI(bdp); 527 526 if (lock_flags != 0) 528 527 xfs_ilock(ip, lock_flags); 529 528 XFS_STATS_INC(xs_ig_found);
+2
fs/xfs/xfs_inode.h
··· 436 436 xfs_fsize_t xfs_file_last_byte(xfs_inode_t *); 437 437 void xfs_lock_inodes(xfs_inode_t **, int, int, uint); 438 438 439 + xfs_inode_t *xfs_vtoi(struct vnode *vp); 440 + 439 441 void xfs_synchronize_atime(xfs_inode_t *); 440 442 441 443 #define xfs_ipincount(ip) ((unsigned int) atomic_read(&ip->i_pincount))
+2 -5
fs/xfs/xfs_rename.c
··· 243 243 xfs_inode_t *inodes[4]; 244 244 int target_ip_dropped = 0; /* dropped target_ip link? */ 245 245 vnode_t *src_dir_vp; 246 - bhv_desc_t *target_dir_bdp; 247 246 int spaceres; 248 247 int target_link_zero = 0; 249 248 int num_inodes; ··· 259 260 * Find the XFS behavior descriptor for the target directory 260 261 * vnode since it was not handed to us. 261 262 */ 262 - target_dir_bdp = vn_bhv_lookup_unlocked(VN_BHV_HEAD(target_dir_vp), 263 - &xfs_vnodeops); 264 - if (target_dir_bdp == NULL) { 263 + target_dp = xfs_vtoi(target_dir_vp); 264 + if (target_dp == NULL) { 265 265 return XFS_ERROR(EXDEV); 266 266 } 267 267 268 268 src_dp = XFS_BHVTOI(src_dir_bdp); 269 - target_dp = XFS_BHVTOI(target_dir_bdp); 270 269 mp = src_dp->i_mount; 271 270 272 271 if (DM_EVENT_ENABLED(src_dir_vp->v_vfsp, src_dp, DM_EVENT_RENAME) ||
+3 -6
fs/xfs/xfs_utils.c
··· 55 55 xfs_inode_t **ipp) 56 56 { 57 57 vnode_t *vp; 58 - bhv_desc_t *bdp; 59 58 60 59 vp = VNAME_TO_VNODE(dentry); 61 - bdp = vn_bhv_lookup_unlocked(VN_BHV_HEAD(vp), &xfs_vnodeops); 62 - if (!bdp) { 63 - *ipp = NULL; 60 + 61 + *ipp = xfs_vtoi(vp); 62 + if (!*ipp) 64 63 return XFS_ERROR(ENOENT); 65 - } 66 64 VN_HOLD(vp); 67 - *ipp = XFS_BHVTOI(bdp); 68 65 return 0; 69 66 } 70 67
+1 -3
fs/xfs/xfs_vnodeops.c
··· 2578 2578 int cancel_flags; 2579 2579 int committed; 2580 2580 vnode_t *target_dir_vp; 2581 - bhv_desc_t *src_bdp; 2582 2581 int resblks; 2583 2582 char *target_name = VNAME(dentry); 2584 2583 int target_namelen; ··· 2590 2591 if (VN_ISDIR(src_vp)) 2591 2592 return XFS_ERROR(EPERM); 2592 2593 2593 - src_bdp = vn_bhv_lookup_unlocked(VN_BHV_HEAD(src_vp), &xfs_vnodeops); 2594 - sip = XFS_BHVTOI(src_bdp); 2594 + sip = xfs_vtoi(src_vp); 2595 2595 tdp = XFS_BHVTOI(target_dir_bdp); 2596 2596 mp = tdp->i_mount; 2597 2597 if (XFS_FORCED_SHUTDOWN(mp))