[XFS] add infrastructure for waiting on I/O completion at inode reclaim

time

SGI-PV: 934766
SGI-Modid: xfs-linux:xfs-kern:196854a

Signed-off-by: Christoph Hellwig <hch@sgi.com>
Signed-off-by: Nathan Scott <nathans@sgi.com>
This commit is contained in:
Christoph Hellwig
2005-09-02 16:58:38 +10:00
committed by Nathan Scott
parent 592cb26bda
commit 51c91ed52b
4 changed files with 32 additions and 58 deletions

View File

@@ -42,17 +42,33 @@ DEFINE_SPINLOCK(vnumber_lock);
*/
#define NVSYNC 37
#define vptosync(v) (&vsync[((unsigned long)v) % NVSYNC])
sv_t vsync[NVSYNC];
STATIC wait_queue_head_t vsync[NVSYNC];
void
vn_init(void)
{
register sv_t *svp;
register int i;
int i;
for (svp = vsync, i = 0; i < NVSYNC; i++, svp++)
init_sv(svp, SV_DEFAULT, "vsy", i);
for (i = 0; i < NVSYNC; i++)
init_waitqueue_head(&vsync[i]);
}
void
vn_iowait(
struct vnode *vp)
{
wait_queue_head_t *wq = vptosync(vp);
wait_event(*wq, (atomic_read(&vp->v_iocount) == 0));
}
void
vn_iowake(
struct vnode *vp)
{
if (atomic_dec_and_test(&vp->v_iocount))
wake_up(vptosync(vp));
}
/*
@@ -111,6 +127,8 @@ vn_initialize(
/* Initialize the first behavior and the behavior chain head. */
vn_bhv_head_init(VN_BHV_HEAD(vp), "vnode");
atomic_set(&vp->v_iocount, 0);
#ifdef XFS_VNODE_TRACE
vp->v_trace = ktrace_alloc(VNODE_TRACE_SIZE, KM_SLEEP);
#endif /* XFS_VNODE_TRACE */