diff options
author | Christoph Hellwig <hch@sgi.com> | 2006-01-11 04:58:44 -0500 |
---|---|---|
committer | Nathan Scott <nathans@sgi.com> | 2006-01-11 04:58:44 -0500 |
commit | 75e17b3caf29b262000dc7348f1be9a7d5403463 (patch) | |
tree | 4bdf782dd3624fd23832b035ebbdbb4daca7dd94 /fs/xfs | |
parent | 204ab25f36fbd44a24458c0227cf2629c8caf00d (diff) |
[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>
Diffstat (limited to 'fs/xfs')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_aops.c | 4 | ||||
-rw-r--r-- | fs/xfs/linux-2.6/xfs_file.c | 6 | ||||
-rw-r--r-- | fs/xfs/linux-2.6/xfs_ioctl.c | 5 | ||||
-rw-r--r-- | fs/xfs/linux-2.6/xfs_iops.c | 16 | ||||
-rw-r--r-- | fs/xfs/xfs_dfrag.c | 16 | ||||
-rw-r--r-- | fs/xfs/xfs_iget.c | 5 | ||||
-rw-r--r-- | fs/xfs/xfs_inode.h | 2 | ||||
-rw-r--r-- | fs/xfs/xfs_rename.c | 7 | ||||
-rw-r--r-- | fs/xfs/xfs_utils.c | 9 | ||||
-rw-r--r-- | fs/xfs/xfs_vnodeops.c | 4 |
10 files changed, 33 insertions, 41 deletions
diff --git a/fs/xfs/linux-2.6/xfs_aops.c b/fs/xfs/linux-2.6/xfs_aops.c index 52707b5ddcb8..d1db8c17a74e 100644 --- a/fs/xfs/linux-2.6/xfs_aops.c +++ b/fs/xfs/linux-2.6/xfs_aops.c | |||
@@ -54,7 +54,6 @@ xfs_page_trace( | |||
54 | int mask) | 54 | int mask) |
55 | { | 55 | { |
56 | xfs_inode_t *ip; | 56 | xfs_inode_t *ip; |
57 | bhv_desc_t *bdp; | ||
58 | vnode_t *vp = LINVFS_GET_VP(inode); | 57 | vnode_t *vp = LINVFS_GET_VP(inode); |
59 | loff_t isize = i_size_read(inode); | 58 | loff_t isize = i_size_read(inode); |
60 | loff_t offset = page_offset(page); | 59 | loff_t offset = page_offset(page); |
@@ -63,8 +62,7 @@ xfs_page_trace( | |||
63 | if (page_has_buffers(page)) | 62 | if (page_has_buffers(page)) |
64 | xfs_count_page_state(page, &delalloc, &unmapped, &unwritten); | 63 | xfs_count_page_state(page, &delalloc, &unmapped, &unwritten); |
65 | 64 | ||
66 | bdp = vn_bhv_lookup(VN_BHV_HEAD(vp), &xfs_vnodeops); | 65 | ip = xfs_vtoi(vp); |
67 | ip = XFS_BHVTOI(bdp); | ||
68 | if (!ip->i_rwtrace) | 66 | if (!ip->i_rwtrace) |
69 | return; | 67 | return; |
70 | 68 | ||
diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c index 06111d0bbae4..ced4404339c7 100644 --- a/fs/xfs/linux-2.6/xfs_file.c +++ b/fs/xfs/linux-2.6/xfs_file.c | |||
@@ -509,16 +509,14 @@ linvfs_open_exec( | |||
509 | vnode_t *vp = LINVFS_GET_VP(inode); | 509 | vnode_t *vp = LINVFS_GET_VP(inode); |
510 | xfs_mount_t *mp = XFS_VFSTOM(vp->v_vfsp); | 510 | xfs_mount_t *mp = XFS_VFSTOM(vp->v_vfsp); |
511 | int error = 0; | 511 | int error = 0; |
512 | bhv_desc_t *bdp; | ||
513 | xfs_inode_t *ip; | 512 | xfs_inode_t *ip; |
514 | 513 | ||
515 | if (vp->v_vfsp->vfs_flag & VFS_DMI) { | 514 | if (vp->v_vfsp->vfs_flag & VFS_DMI) { |
516 | bdp = vn_bhv_lookup(VN_BHV_HEAD(vp), &xfs_vnodeops); | 515 | ip = xfs_vtoi(vp); |
517 | if (!bdp) { | 516 | if (!ip) { |
518 | error = -EINVAL; | 517 | error = -EINVAL; |
519 | goto open_exec_out; | 518 | goto open_exec_out; |
520 | } | 519 | } |
521 | ip = XFS_BHVTOI(bdp); | ||
522 | if (DM_EVENT_ENABLED(vp->v_vfsp, ip, DM_EVENT_READ)) { | 520 | if (DM_EVENT_ENABLED(vp->v_vfsp, ip, DM_EVENT_READ)) { |
523 | error = -XFS_SEND_DATA(mp, DM_EVENT_READ, vp, | 521 | error = -XFS_SEND_DATA(mp, DM_EVENT_READ, vp, |
524 | 0, 0, 0, NULL); | 522 | 0, 0, 0, NULL); |
diff --git a/fs/xfs/linux-2.6/xfs_ioctl.c b/fs/xfs/linux-2.6/xfs_ioctl.c index 7ad7b680e996..b3b2cfda273c 100644 --- a/fs/xfs/linux-2.6/xfs_ioctl.c +++ b/fs/xfs/linux-2.6/xfs_ioctl.c | |||
@@ -145,13 +145,10 @@ xfs_find_handle( | |||
145 | 145 | ||
146 | if (cmd != XFS_IOC_PATH_TO_FSHANDLE) { | 146 | if (cmd != XFS_IOC_PATH_TO_FSHANDLE) { |
147 | xfs_inode_t *ip; | 147 | xfs_inode_t *ip; |
148 | bhv_desc_t *bhv; | ||
149 | int lock_mode; | 148 | int lock_mode; |
150 | 149 | ||
151 | /* need to get access to the xfs_inode to read the generation */ | 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); | 151 | ip = xfs_vtoi(vp); |
153 | ASSERT(bhv); | ||
154 | ip = XFS_BHVTOI(bhv); | ||
155 | ASSERT(ip); | 152 | ASSERT(ip); |
156 | lock_mode = xfs_ilock_map_shared(ip); | 153 | lock_mode = xfs_ilock_map_shared(ip); |
157 | 154 | ||
diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c index fe5e9894fdee..d388d14efe3e 100644 --- a/fs/xfs/linux-2.6/xfs_iops.c +++ b/fs/xfs/linux-2.6/xfs_iops.c | |||
@@ -59,6 +59,22 @@ | |||
59 | (S_ISDIR(inode->i_mode) && inode->i_sb->s_flags & MS_NODIRATIME)) | 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 | * Bring the atime in the XFS inode uptodate. | 78 | * Bring the atime in the XFS inode uptodate. |
63 | * Used before logging the inode to disk or when the Linux inode goes away. | 79 | * Used before logging the inode to disk or when the Linux inode goes away. |
64 | */ | 80 | */ |
diff --git a/fs/xfs/xfs_dfrag.c b/fs/xfs/xfs_dfrag.c index 070259a4254c..c6191d00ad27 100644 --- a/fs/xfs/xfs_dfrag.c +++ b/fs/xfs/xfs_dfrag.c | |||
@@ -60,8 +60,6 @@ xfs_swapext( | |||
60 | xfs_bstat_t *sbp; | 60 | xfs_bstat_t *sbp; |
61 | struct file *fp = NULL, *tfp = NULL; | 61 | struct file *fp = NULL, *tfp = NULL; |
62 | vnode_t *vp, *tvp; | 62 | vnode_t *vp, *tvp; |
63 | bhv_desc_t *bdp, *tbdp; | ||
64 | vn_bhv_head_t *bhp, *tbhp; | ||
65 | static uint lock_flags = XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL; | 63 | static uint lock_flags = XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL; |
66 | int ilf_fields, tilf_fields; | 64 | int ilf_fields, tilf_fields; |
67 | int error = 0; | 65 | int error = 0; |
@@ -90,13 +88,10 @@ xfs_swapext( | |||
90 | goto error0; | 88 | goto error0; |
91 | } | 89 | } |
92 | 90 | ||
93 | bhp = VN_BHV_HEAD(vp); | 91 | ip = xfs_vtoi(vp); |
94 | bdp = vn_bhv_lookup(bhp, &xfs_vnodeops); | 92 | if (ip == NULL) { |
95 | if (bdp == NULL) { | ||
96 | error = XFS_ERROR(EBADF); | 93 | error = XFS_ERROR(EBADF); |
97 | goto error0; | 94 | goto error0; |
98 | } else { | ||
99 | ip = XFS_BHVTOI(bdp); | ||
100 | } | 95 | } |
101 | 96 | ||
102 | if (((tfp = fget((int)sxp->sx_fdtmp)) == NULL) || | 97 | if (((tfp = fget((int)sxp->sx_fdtmp)) == NULL) || |
@@ -105,13 +100,10 @@ xfs_swapext( | |||
105 | goto error0; | 100 | goto error0; |
106 | } | 101 | } |
107 | 102 | ||
108 | tbhp = VN_BHV_HEAD(tvp); | 103 | tip = xfs_vtoi(tvp); |
109 | tbdp = vn_bhv_lookup(tbhp, &xfs_vnodeops); | 104 | if (tip == NULL) { |
110 | if (tbdp == NULL) { | ||
111 | error = XFS_ERROR(EBADF); | 105 | error = XFS_ERROR(EBADF); |
112 | goto error0; | 106 | goto error0; |
113 | } else { | ||
114 | tip = XFS_BHVTOI(tbdp); | ||
115 | } | 107 | } |
116 | 108 | ||
117 | if (ip->i_mount != tip->i_mount) { | 109 | if (ip->i_mount != tip->i_mount) { |
diff --git a/fs/xfs/xfs_iget.c b/fs/xfs/xfs_iget.c index fc19eedbd11b..8e380a1fb79b 100644 --- a/fs/xfs/xfs_iget.c +++ b/fs/xfs/xfs_iget.c | |||
@@ -493,7 +493,6 @@ xfs_iget( | |||
493 | 493 | ||
494 | retry: | 494 | retry: |
495 | if ((inode = iget_locked(XFS_MTOVFS(mp)->vfs_super, ino))) { | 495 | if ((inode = iget_locked(XFS_MTOVFS(mp)->vfs_super, ino))) { |
496 | bhv_desc_t *bdp; | ||
497 | xfs_inode_t *ip; | 496 | xfs_inode_t *ip; |
498 | 497 | ||
499 | vp = LINVFS_GET_VP(inode); | 498 | vp = LINVFS_GET_VP(inode); |
@@ -517,14 +516,12 @@ retry: | |||
517 | * to wait for the inode to go away. | 516 | * to wait for the inode to go away. |
518 | */ | 517 | */ |
519 | if (is_bad_inode(inode) || | 518 | if (is_bad_inode(inode) || |
520 | ((bdp = vn_bhv_lookup(VN_BHV_HEAD(vp), | 519 | ((ip = xfs_vtoi(vp)) == NULL)) { |
521 | &xfs_vnodeops)) == NULL)) { | ||
522 | iput(inode); | 520 | iput(inode); |
523 | delay(1); | 521 | delay(1); |
524 | goto retry; | 522 | goto retry; |
525 | } | 523 | } |
526 | 524 | ||
527 | ip = XFS_BHVTOI(bdp); | ||
528 | if (lock_flags != 0) | 525 | if (lock_flags != 0) |
529 | xfs_ilock(ip, lock_flags); | 526 | xfs_ilock(ip, lock_flags); |
530 | XFS_STATS_INC(xs_ig_found); | 527 | XFS_STATS_INC(xs_ig_found); |
diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index c4c1d9bce82e..1cfbcf18ce86 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h | |||
@@ -436,6 +436,8 @@ void xfs_ichgtime(xfs_inode_t *, int); | |||
436 | xfs_fsize_t xfs_file_last_byte(xfs_inode_t *); | 436 | xfs_fsize_t xfs_file_last_byte(xfs_inode_t *); |
437 | void xfs_lock_inodes(xfs_inode_t **, int, int, uint); | 437 | void xfs_lock_inodes(xfs_inode_t **, int, int, uint); |
438 | 438 | ||
439 | xfs_inode_t *xfs_vtoi(struct vnode *vp); | ||
440 | |||
439 | void xfs_synchronize_atime(xfs_inode_t *); | 441 | void xfs_synchronize_atime(xfs_inode_t *); |
440 | 442 | ||
441 | #define xfs_ipincount(ip) ((unsigned int) atomic_read(&ip->i_pincount)) | 443 | #define xfs_ipincount(ip) ((unsigned int) atomic_read(&ip->i_pincount)) |
diff --git a/fs/xfs/xfs_rename.c b/fs/xfs/xfs_rename.c index 4d4e8f4e768e..81a05cfd77d2 100644 --- a/fs/xfs/xfs_rename.c +++ b/fs/xfs/xfs_rename.c | |||
@@ -243,7 +243,6 @@ xfs_rename( | |||
243 | xfs_inode_t *inodes[4]; | 243 | xfs_inode_t *inodes[4]; |
244 | int target_ip_dropped = 0; /* dropped target_ip link? */ | 244 | int target_ip_dropped = 0; /* dropped target_ip link? */ |
245 | vnode_t *src_dir_vp; | 245 | vnode_t *src_dir_vp; |
246 | bhv_desc_t *target_dir_bdp; | ||
247 | int spaceres; | 246 | int spaceres; |
248 | int target_link_zero = 0; | 247 | int target_link_zero = 0; |
249 | int num_inodes; | 248 | int num_inodes; |
@@ -260,14 +259,12 @@ xfs_rename( | |||
260 | * Find the XFS behavior descriptor for the target directory | 259 | * Find the XFS behavior descriptor for the target directory |
261 | * vnode since it was not handed to us. | 260 | * vnode since it was not handed to us. |
262 | */ | 261 | */ |
263 | target_dir_bdp = vn_bhv_lookup_unlocked(VN_BHV_HEAD(target_dir_vp), | 262 | target_dp = xfs_vtoi(target_dir_vp); |
264 | &xfs_vnodeops); | 263 | if (target_dp == NULL) { |
265 | if (target_dir_bdp == NULL) { | ||
266 | return XFS_ERROR(EXDEV); | 264 | return XFS_ERROR(EXDEV); |
267 | } | 265 | } |
268 | 266 | ||
269 | src_dp = XFS_BHVTOI(src_dir_bdp); | 267 | src_dp = XFS_BHVTOI(src_dir_bdp); |
270 | target_dp = XFS_BHVTOI(target_dir_bdp); | ||
271 | mp = src_dp->i_mount; | 268 | mp = src_dp->i_mount; |
272 | 269 | ||
273 | if (DM_EVENT_ENABLED(src_dir_vp->v_vfsp, src_dp, DM_EVENT_RENAME) || | 270 | if (DM_EVENT_ENABLED(src_dir_vp->v_vfsp, src_dp, DM_EVENT_RENAME) || |
diff --git a/fs/xfs/xfs_utils.c b/fs/xfs/xfs_utils.c index fefe1d60377f..34654ec6ae10 100644 --- a/fs/xfs/xfs_utils.c +++ b/fs/xfs/xfs_utils.c | |||
@@ -55,16 +55,13 @@ xfs_get_dir_entry( | |||
55 | xfs_inode_t **ipp) | 55 | xfs_inode_t **ipp) |
56 | { | 56 | { |
57 | vnode_t *vp; | 57 | vnode_t *vp; |
58 | bhv_desc_t *bdp; | ||
59 | 58 | ||
60 | vp = VNAME_TO_VNODE(dentry); | 59 | vp = VNAME_TO_VNODE(dentry); |
61 | bdp = vn_bhv_lookup_unlocked(VN_BHV_HEAD(vp), &xfs_vnodeops); | 60 | |
62 | if (!bdp) { | 61 | *ipp = xfs_vtoi(vp); |
63 | *ipp = NULL; | 62 | if (!*ipp) |
64 | return XFS_ERROR(ENOENT); | 63 | return XFS_ERROR(ENOENT); |
65 | } | ||
66 | VN_HOLD(vp); | 64 | VN_HOLD(vp); |
67 | *ipp = XFS_BHVTOI(bdp); | ||
68 | return 0; | 65 | return 0; |
69 | } | 66 | } |
70 | 67 | ||
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 3e8f1cbb7049..b12fcfcb196d 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c | |||
@@ -2578,7 +2578,6 @@ xfs_link( | |||
2578 | int cancel_flags; | 2578 | int cancel_flags; |
2579 | int committed; | 2579 | int committed; |
2580 | vnode_t *target_dir_vp; | 2580 | vnode_t *target_dir_vp; |
2581 | bhv_desc_t *src_bdp; | ||
2582 | int resblks; | 2581 | int resblks; |
2583 | char *target_name = VNAME(dentry); | 2582 | char *target_name = VNAME(dentry); |
2584 | int target_namelen; | 2583 | int target_namelen; |
@@ -2591,8 +2590,7 @@ xfs_link( | |||
2591 | if (VN_ISDIR(src_vp)) | 2590 | if (VN_ISDIR(src_vp)) |
2592 | return XFS_ERROR(EPERM); | 2591 | return XFS_ERROR(EPERM); |
2593 | 2592 | ||
2594 | src_bdp = vn_bhv_lookup_unlocked(VN_BHV_HEAD(src_vp), &xfs_vnodeops); | 2593 | sip = xfs_vtoi(src_vp); |
2595 | sip = XFS_BHVTOI(src_bdp); | ||
2596 | tdp = XFS_BHVTOI(target_dir_bdp); | 2594 | tdp = XFS_BHVTOI(target_dir_bdp); |
2597 | mp = tdp->i_mount; | 2595 | mp = tdp->i_mount; |
2598 | if (XFS_FORCED_SHUTDOWN(mp)) | 2596 | if (XFS_FORCED_SHUTDOWN(mp)) |