|
@@ -253,7 +253,7 @@ _xfs_buf_initialize(
|
|
|
|
|
|
memset(bp, 0, sizeof(xfs_buf_t));
|
|
memset(bp, 0, sizeof(xfs_buf_t));
|
|
atomic_set(&bp->b_hold, 1);
|
|
atomic_set(&bp->b_hold, 1);
|
|
- init_MUTEX_LOCKED(&bp->b_iodonesema);
|
|
|
|
|
|
+ init_completion(&bp->b_iowait);
|
|
INIT_LIST_HEAD(&bp->b_list);
|
|
INIT_LIST_HEAD(&bp->b_list);
|
|
INIT_LIST_HEAD(&bp->b_hash_list);
|
|
INIT_LIST_HEAD(&bp->b_hash_list);
|
|
init_MUTEX_LOCKED(&bp->b_sema); /* held, no waiters */
|
|
init_MUTEX_LOCKED(&bp->b_sema); /* held, no waiters */
|
|
@@ -1033,7 +1033,7 @@ xfs_buf_ioend(
|
|
xfs_buf_iodone_work(&bp->b_iodone_work);
|
|
xfs_buf_iodone_work(&bp->b_iodone_work);
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- up(&bp->b_iodonesema);
|
|
|
|
|
|
+ complete(&bp->b_iowait);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1271,7 +1271,7 @@ xfs_buf_iowait(
|
|
XB_TRACE(bp, "iowait", 0);
|
|
XB_TRACE(bp, "iowait", 0);
|
|
if (atomic_read(&bp->b_io_remaining))
|
|
if (atomic_read(&bp->b_io_remaining))
|
|
blk_run_address_space(bp->b_target->bt_mapping);
|
|
blk_run_address_space(bp->b_target->bt_mapping);
|
|
- down(&bp->b_iodonesema);
|
|
|
|
|
|
+ wait_for_completion(&bp->b_iowait);
|
|
XB_TRACE(bp, "iowaited", (long)bp->b_error);
|
|
XB_TRACE(bp, "iowaited", (long)bp->b_error);
|
|
return bp->b_error;
|
|
return bp->b_error;
|
|
}
|
|
}
|