Commit b4dd330b9e0c9c78ebff754e72563b148f05e9e0

Authored by David Chinner
Committed by Lachlan McIlroy
1 parent 12017faf38

[XFS] replace the XFS buf iodone semaphore with a completion

The xfs_buf_t b_iodonesema is really just a semaphore that wants to be a
completion. Change it to a completion and remove the last user of the
sema_t from XFS.

SGI-PV: 981498

SGI-Modid: xfs-linux-melb:xfs-kern:31815a

Signed-off-by: David Chinner <david@fromorbit.com>
Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>

Showing 4 changed files with 7 additions and 7 deletions Side-by-side Diff

fs/xfs/linux-2.6/xfs_buf.c
... ... @@ -253,7 +253,7 @@
253 253  
254 254 memset(bp, 0, sizeof(xfs_buf_t));
255 255 atomic_set(&bp->b_hold, 1);
256   - init_MUTEX_LOCKED(&bp->b_iodonesema);
  256 + init_completion(&bp->b_iowait);
257 257 INIT_LIST_HEAD(&bp->b_list);
258 258 INIT_LIST_HEAD(&bp->b_hash_list);
259 259 init_MUTEX_LOCKED(&bp->b_sema); /* held, no waiters */
... ... @@ -1033,7 +1033,7 @@
1033 1033 xfs_buf_iodone_work(&bp->b_iodone_work);
1034 1034 }
1035 1035 } else {
1036   - up(&bp->b_iodonesema);
  1036 + complete(&bp->b_iowait);
1037 1037 }
1038 1038 }
1039 1039  
... ... @@ -1271,7 +1271,7 @@
1271 1271 XB_TRACE(bp, "iowait", 0);
1272 1272 if (atomic_read(&bp->b_io_remaining))
1273 1273 blk_run_address_space(bp->b_target->bt_mapping);
1274   - down(&bp->b_iodonesema);
  1274 + wait_for_completion(&bp->b_iowait);
1275 1275 XB_TRACE(bp, "iowaited", (long)bp->b_error);
1276 1276 return bp->b_error;
1277 1277 }
fs/xfs/linux-2.6/xfs_buf.h
... ... @@ -157,7 +157,7 @@
157 157 xfs_buf_iodone_t b_iodone; /* I/O completion function */
158 158 xfs_buf_relse_t b_relse; /* releasing function */
159 159 xfs_buf_bdstrat_t b_strat; /* pre-write function */
160   - struct semaphore b_iodonesema; /* Semaphore for I/O waiters */
  160 + struct completion b_iowait; /* queue for I/O waiters */
161 161 void *b_fspriv;
162 162 void *b_fspriv2;
163 163 void *b_fspriv3;
... ... @@ -352,7 +352,7 @@
352 352 #define XFS_BUF_CPSEMA(bp) (xfs_buf_cond_lock(bp) == 0)
353 353 #define XFS_BUF_VSEMA(bp) xfs_buf_unlock(bp)
354 354 #define XFS_BUF_PSEMA(bp,x) xfs_buf_lock(bp)
355   -#define XFS_BUF_V_IODONESEMA(bp) up(&bp->b_iodonesema);
  355 +#define XFS_BUF_FINISH_IOWAIT(bp) complete(&bp->b_iowait);
356 356  
357 357 #define XFS_BUF_SET_TARGET(bp, target) ((bp)->b_target = (target))
358 358 #define XFS_BUF_TARGET(bp) ((bp)->b_target)
fs/xfs/xfs_buf_item.c
... ... @@ -1056,7 +1056,7 @@
1056 1056 anyway. */
1057 1057 XFS_BUF_SET_BRELSE_FUNC(bp,xfs_buf_error_relse);
1058 1058 XFS_BUF_DONE(bp);
1059   - XFS_BUF_V_IODONESEMA(bp);
  1059 + XFS_BUF_FINISH_IOWAIT(bp);
1060 1060 }
1061 1061 return;
1062 1062 }
... ... @@ -314,7 +314,7 @@
314 314 * ASYNC buffers.
315 315 */
316 316 XFS_BUF_ERROR(bp, EIO);
317   - XFS_BUF_V_IODONESEMA(bp);
  317 + XFS_BUF_FINISH_IOWAIT(bp);
318 318 } else {
319 319 xfs_buf_relse(bp);
320 320 }