diff options
Diffstat (limited to 'fs/xfs')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_vnode.c | 59 | ||||
-rw-r--r-- | fs/xfs/linux-2.6/xfs_vnode.h | 4 | ||||
-rw-r--r-- | fs/xfs/xfs_iget.c | 11 |
3 files changed, 1 insertions, 73 deletions
diff --git a/fs/xfs/linux-2.6/xfs_vnode.c b/fs/xfs/linux-2.6/xfs_vnode.c index ad16af38e965..654da98de2a5 100644 --- a/fs/xfs/linux-2.6/xfs_vnode.c +++ b/fs/xfs/linux-2.6/xfs_vnode.c | |||
@@ -78,10 +78,6 @@ vn_reclaim( | |||
78 | } | 78 | } |
79 | ASSERT(vp->v_fbhv == NULL); | 79 | ASSERT(vp->v_fbhv == NULL); |
80 | 80 | ||
81 | VN_LOCK(vp); | ||
82 | vp->v_flag &= (VRECLM|VWAIT); | ||
83 | VN_UNLOCK(vp, 0); | ||
84 | |||
85 | vp->v_fbhv = NULL; | 81 | vp->v_fbhv = NULL; |
86 | 82 | ||
87 | #ifdef XFS_VNODE_TRACE | 83 | #ifdef XFS_VNODE_TRACE |
@@ -92,31 +88,6 @@ vn_reclaim( | |||
92 | return 0; | 88 | return 0; |
93 | } | 89 | } |
94 | 90 | ||
95 | STATIC void | ||
96 | vn_wakeup( | ||
97 | struct vnode *vp) | ||
98 | { | ||
99 | VN_LOCK(vp); | ||
100 | if (vp->v_flag & VWAIT) | ||
101 | sv_broadcast(vptosync(vp)); | ||
102 | vp->v_flag &= ~(VRECLM|VWAIT|VMODIFIED); | ||
103 | VN_UNLOCK(vp, 0); | ||
104 | } | ||
105 | |||
106 | int | ||
107 | vn_wait( | ||
108 | struct vnode *vp) | ||
109 | { | ||
110 | VN_LOCK(vp); | ||
111 | if (vp->v_flag & (VINACT | VRECLM)) { | ||
112 | vp->v_flag |= VWAIT; | ||
113 | sv_wait(vptosync(vp), PINOD, &vp->v_lock, 0); | ||
114 | return 1; | ||
115 | } | ||
116 | VN_UNLOCK(vp, 0); | ||
117 | return 0; | ||
118 | } | ||
119 | |||
120 | struct vnode * | 91 | struct vnode * |
121 | vn_initialize( | 92 | vn_initialize( |
122 | struct inode *inode) | 93 | struct inode *inode) |
@@ -221,7 +192,6 @@ vn_purge( | |||
221 | { | 192 | { |
222 | vn_trace_entry(vp, "vn_purge", (inst_t *)__return_address); | 193 | vn_trace_entry(vp, "vn_purge", (inst_t *)__return_address); |
223 | 194 | ||
224 | again: | ||
225 | /* | 195 | /* |
226 | * Check whether vp has already been reclaimed since our caller | 196 | * Check whether vp has already been reclaimed since our caller |
227 | * sampled its version while holding a filesystem cache lock that | 197 | * sampled its version while holding a filesystem cache lock that |
@@ -234,19 +204,6 @@ again: | |||
234 | } | 204 | } |
235 | 205 | ||
236 | /* | 206 | /* |
237 | * If vp is being reclaimed or inactivated, wait until it is inert, | ||
238 | * then proceed. Can't assume that vnode is actually reclaimed | ||
239 | * just because the reclaimed flag is asserted -- a vn_alloc | ||
240 | * reclaim can fail. | ||
241 | */ | ||
242 | if (vp->v_flag & (VINACT | VRECLM)) { | ||
243 | ASSERT(vn_count(vp) == 0); | ||
244 | vp->v_flag |= VWAIT; | ||
245 | sv_wait(vptosync(vp), PINOD, &vp->v_lock, 0); | ||
246 | goto again; | ||
247 | } | ||
248 | |||
249 | /* | ||
250 | * Another process could have raced in and gotten this vnode... | 207 | * Another process could have raced in and gotten this vnode... |
251 | */ | 208 | */ |
252 | if (vn_count(vp) > 0) { | 209 | if (vn_count(vp) > 0) { |
@@ -255,7 +212,6 @@ again: | |||
255 | } | 212 | } |
256 | 213 | ||
257 | XFS_STATS_DEC(vn_active); | 214 | XFS_STATS_DEC(vn_active); |
258 | vp->v_flag |= VRECLM; | ||
259 | VN_UNLOCK(vp, 0); | 215 | VN_UNLOCK(vp, 0); |
260 | 216 | ||
261 | /* | 217 | /* |
@@ -266,11 +222,6 @@ again: | |||
266 | */ | 222 | */ |
267 | if (vn_reclaim(vp) != 0) | 223 | if (vn_reclaim(vp) != 0) |
268 | panic("vn_purge: cannot reclaim"); | 224 | panic("vn_purge: cannot reclaim"); |
269 | |||
270 | /* | ||
271 | * Wakeup anyone waiting for vp to be reclaimed. | ||
272 | */ | ||
273 | vn_wakeup(vp); | ||
274 | } | 225 | } |
275 | 226 | ||
276 | /* | 227 | /* |
@@ -315,11 +266,6 @@ vn_rele( | |||
315 | * return. | 266 | * return. |
316 | */ | 267 | */ |
317 | if (!vcnt) { | 268 | if (!vcnt) { |
318 | /* | ||
319 | * As soon as we turn this on, noone can find us in vn_get | ||
320 | * until we turn off VINACT or VRECLM | ||
321 | */ | ||
322 | vp->v_flag |= VINACT; | ||
323 | VN_UNLOCK(vp, 0); | 269 | VN_UNLOCK(vp, 0); |
324 | 270 | ||
325 | /* | 271 | /* |
@@ -330,10 +276,7 @@ vn_rele( | |||
330 | VOP_INACTIVE(vp, NULL, cache); | 276 | VOP_INACTIVE(vp, NULL, cache); |
331 | 277 | ||
332 | VN_LOCK(vp); | 278 | VN_LOCK(vp); |
333 | if (vp->v_flag & VWAIT) | 279 | vp->v_flag &= ~VMODIFIED; |
334 | sv_broadcast(vptosync(vp)); | ||
335 | |||
336 | vp->v_flag &= ~(VINACT|VWAIT|VRECLM|VMODIFIED); | ||
337 | } | 280 | } |
338 | 281 | ||
339 | VN_UNLOCK(vp, 0); | 282 | VN_UNLOCK(vp, 0); |
diff --git a/fs/xfs/linux-2.6/xfs_vnode.h b/fs/xfs/linux-2.6/xfs_vnode.h index bc9ed722ba1e..4a74569a5690 100644 --- a/fs/xfs/linux-2.6/xfs_vnode.h +++ b/fs/xfs/linux-2.6/xfs_vnode.h | |||
@@ -135,9 +135,6 @@ typedef enum { | |||
135 | /* | 135 | /* |
136 | * Vnode flags. | 136 | * Vnode flags. |
137 | */ | 137 | */ |
138 | #define VINACT 0x1 /* vnode is being inactivated */ | ||
139 | #define VRECLM 0x2 /* vnode is being reclaimed */ | ||
140 | #define VWAIT 0x4 /* waiting for VINACT/VRECLM to end */ | ||
141 | #define VMODIFIED 0x8 /* XFS inode state possibly differs */ | 138 | #define VMODIFIED 0x8 /* XFS inode state possibly differs */ |
142 | /* to the Linux inode state. */ | 139 | /* to the Linux inode state. */ |
143 | 140 | ||
@@ -489,7 +486,6 @@ typedef struct vattr { | |||
489 | (VN_ISREG(vp) && ((mode) & (VSGID|(VEXEC>>3))) == VSGID) | 486 | (VN_ISREG(vp) && ((mode) & (VSGID|(VEXEC>>3))) == VSGID) |
490 | 487 | ||
491 | extern void vn_init(void); | 488 | extern void vn_init(void); |
492 | extern int vn_wait(struct vnode *); | ||
493 | extern vnode_t *vn_initialize(struct inode *); | 489 | extern vnode_t *vn_initialize(struct inode *); |
494 | 490 | ||
495 | /* | 491 | /* |
diff --git a/fs/xfs/xfs_iget.c b/fs/xfs/xfs_iget.c index d3da00045f26..fa796910f3aa 100644 --- a/fs/xfs/xfs_iget.c +++ b/fs/xfs/xfs_iget.c | |||
@@ -505,7 +505,6 @@ xfs_iget( | |||
505 | vnode_t *vp = NULL; | 505 | vnode_t *vp = NULL; |
506 | int error; | 506 | int error; |
507 | 507 | ||
508 | retry: | ||
509 | XFS_STATS_INC(xs_ig_attempts); | 508 | XFS_STATS_INC(xs_ig_attempts); |
510 | 509 | ||
511 | if ((inode = iget_locked(XFS_MTOVFS(mp)->vfs_super, ino))) { | 510 | if ((inode = iget_locked(XFS_MTOVFS(mp)->vfs_super, ino))) { |
@@ -526,16 +525,6 @@ inode_allocate: | |||
526 | iput(inode); | 525 | iput(inode); |
527 | } | 526 | } |
528 | } else { | 527 | } else { |
529 | /* These are true if the inode is in inactive or | ||
530 | * reclaim. The linux inode is about to go away, | ||
531 | * wait for that path to finish, and try again. | ||
532 | */ | ||
533 | if (vp->v_flag & (VINACT | VRECLM)) { | ||
534 | vn_wait(vp); | ||
535 | iput(inode); | ||
536 | goto retry; | ||
537 | } | ||
538 | |||
539 | if (is_bad_inode(inode)) { | 528 | if (is_bad_inode(inode)) { |
540 | iput(inode); | 529 | iput(inode); |
541 | return EIO; | 530 | return EIO; |