diff options
Diffstat (limited to 'fs/xfs/xfs_trans_buf.c')
-rw-r--r-- | fs/xfs/xfs_trans_buf.c | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/fs/xfs/xfs_trans_buf.c b/fs/xfs/xfs_trans_buf.c index 6311b99c267f..3edf5dbee001 100644 --- a/fs/xfs/xfs_trans_buf.c +++ b/fs/xfs/xfs_trans_buf.c | |||
@@ -93,7 +93,7 @@ _xfs_trans_bjoin( | |||
93 | xfs_buf_item_init(bp, tp->t_mountp); | 93 | xfs_buf_item_init(bp, tp->t_mountp); |
94 | bip = bp->b_fspriv; | 94 | bip = bp->b_fspriv; |
95 | ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); | 95 | ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); |
96 | ASSERT(!(bip->bli_format.blf_flags & XFS_BLF_CANCEL)); | 96 | ASSERT(!(bip->__bli_format.blf_flags & XFS_BLF_CANCEL)); |
97 | ASSERT(!(bip->bli_flags & XFS_BLI_LOGGED)); | 97 | ASSERT(!(bip->bli_flags & XFS_BLI_LOGGED)); |
98 | if (reset_recur) | 98 | if (reset_recur) |
99 | bip->bli_recur = 0; | 99 | bip->bli_recur = 0; |
@@ -257,7 +257,8 @@ xfs_trans_read_buf_map( | |||
257 | struct xfs_buf_map *map, | 257 | struct xfs_buf_map *map, |
258 | int nmaps, | 258 | int nmaps, |
259 | xfs_buf_flags_t flags, | 259 | xfs_buf_flags_t flags, |
260 | struct xfs_buf **bpp) | 260 | struct xfs_buf **bpp, |
261 | const struct xfs_buf_ops *ops) | ||
261 | { | 262 | { |
262 | xfs_buf_t *bp; | 263 | xfs_buf_t *bp; |
263 | xfs_buf_log_item_t *bip; | 264 | xfs_buf_log_item_t *bip; |
@@ -265,7 +266,7 @@ xfs_trans_read_buf_map( | |||
265 | 266 | ||
266 | *bpp = NULL; | 267 | *bpp = NULL; |
267 | if (!tp) { | 268 | if (!tp) { |
268 | bp = xfs_buf_read_map(target, map, nmaps, flags); | 269 | bp = xfs_buf_read_map(target, map, nmaps, flags, ops); |
269 | if (!bp) | 270 | if (!bp) |
270 | return (flags & XBF_TRYLOCK) ? | 271 | return (flags & XBF_TRYLOCK) ? |
271 | EAGAIN : XFS_ERROR(ENOMEM); | 272 | EAGAIN : XFS_ERROR(ENOMEM); |
@@ -312,7 +313,9 @@ xfs_trans_read_buf_map( | |||
312 | if (!(XFS_BUF_ISDONE(bp))) { | 313 | if (!(XFS_BUF_ISDONE(bp))) { |
313 | trace_xfs_trans_read_buf_io(bp, _RET_IP_); | 314 | trace_xfs_trans_read_buf_io(bp, _RET_IP_); |
314 | ASSERT(!XFS_BUF_ISASYNC(bp)); | 315 | ASSERT(!XFS_BUF_ISASYNC(bp)); |
316 | ASSERT(bp->b_iodone == NULL); | ||
315 | XFS_BUF_READ(bp); | 317 | XFS_BUF_READ(bp); |
318 | bp->b_ops = ops; | ||
316 | xfsbdstrat(tp->t_mountp, bp); | 319 | xfsbdstrat(tp->t_mountp, bp); |
317 | error = xfs_buf_iowait(bp); | 320 | error = xfs_buf_iowait(bp); |
318 | if (error) { | 321 | if (error) { |
@@ -349,7 +352,7 @@ xfs_trans_read_buf_map( | |||
349 | return 0; | 352 | return 0; |
350 | } | 353 | } |
351 | 354 | ||
352 | bp = xfs_buf_read_map(target, map, nmaps, flags); | 355 | bp = xfs_buf_read_map(target, map, nmaps, flags, ops); |
353 | if (bp == NULL) { | 356 | if (bp == NULL) { |
354 | *bpp = NULL; | 357 | *bpp = NULL; |
355 | return (flags & XBF_TRYLOCK) ? | 358 | return (flags & XBF_TRYLOCK) ? |
@@ -429,7 +432,7 @@ xfs_trans_brelse(xfs_trans_t *tp, | |||
429 | bip = bp->b_fspriv; | 432 | bip = bp->b_fspriv; |
430 | ASSERT(bip->bli_item.li_type == XFS_LI_BUF); | 433 | ASSERT(bip->bli_item.li_type == XFS_LI_BUF); |
431 | ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); | 434 | ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); |
432 | ASSERT(!(bip->bli_format.blf_flags & XFS_BLF_CANCEL)); | 435 | ASSERT(!(bip->__bli_format.blf_flags & XFS_BLF_CANCEL)); |
433 | ASSERT(atomic_read(&bip->bli_refcount) > 0); | 436 | ASSERT(atomic_read(&bip->bli_refcount) > 0); |
434 | 437 | ||
435 | trace_xfs_trans_brelse(bip); | 438 | trace_xfs_trans_brelse(bip); |
@@ -516,7 +519,7 @@ xfs_trans_bhold(xfs_trans_t *tp, | |||
516 | ASSERT(bp->b_transp == tp); | 519 | ASSERT(bp->b_transp == tp); |
517 | ASSERT(bip != NULL); | 520 | ASSERT(bip != NULL); |
518 | ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); | 521 | ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); |
519 | ASSERT(!(bip->bli_format.blf_flags & XFS_BLF_CANCEL)); | 522 | ASSERT(!(bip->__bli_format.blf_flags & XFS_BLF_CANCEL)); |
520 | ASSERT(atomic_read(&bip->bli_refcount) > 0); | 523 | ASSERT(atomic_read(&bip->bli_refcount) > 0); |
521 | 524 | ||
522 | bip->bli_flags |= XFS_BLI_HOLD; | 525 | bip->bli_flags |= XFS_BLI_HOLD; |
@@ -536,7 +539,7 @@ xfs_trans_bhold_release(xfs_trans_t *tp, | |||
536 | ASSERT(bp->b_transp == tp); | 539 | ASSERT(bp->b_transp == tp); |
537 | ASSERT(bip != NULL); | 540 | ASSERT(bip != NULL); |
538 | ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); | 541 | ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); |
539 | ASSERT(!(bip->bli_format.blf_flags & XFS_BLF_CANCEL)); | 542 | ASSERT(!(bip->__bli_format.blf_flags & XFS_BLF_CANCEL)); |
540 | ASSERT(atomic_read(&bip->bli_refcount) > 0); | 543 | ASSERT(atomic_read(&bip->bli_refcount) > 0); |
541 | ASSERT(bip->bli_flags & XFS_BLI_HOLD); | 544 | ASSERT(bip->bli_flags & XFS_BLI_HOLD); |
542 | 545 | ||
@@ -595,7 +598,7 @@ xfs_trans_log_buf(xfs_trans_t *tp, | |||
595 | bip->bli_flags &= ~XFS_BLI_STALE; | 598 | bip->bli_flags &= ~XFS_BLI_STALE; |
596 | ASSERT(XFS_BUF_ISSTALE(bp)); | 599 | ASSERT(XFS_BUF_ISSTALE(bp)); |
597 | XFS_BUF_UNSTALE(bp); | 600 | XFS_BUF_UNSTALE(bp); |
598 | bip->bli_format.blf_flags &= ~XFS_BLF_CANCEL; | 601 | bip->__bli_format.blf_flags &= ~XFS_BLF_CANCEL; |
599 | } | 602 | } |
600 | 603 | ||
601 | tp->t_flags |= XFS_TRANS_DIRTY; | 604 | tp->t_flags |= XFS_TRANS_DIRTY; |
@@ -640,6 +643,7 @@ xfs_trans_binval( | |||
640 | xfs_buf_t *bp) | 643 | xfs_buf_t *bp) |
641 | { | 644 | { |
642 | xfs_buf_log_item_t *bip = bp->b_fspriv; | 645 | xfs_buf_log_item_t *bip = bp->b_fspriv; |
646 | int i; | ||
643 | 647 | ||
644 | ASSERT(bp->b_transp == tp); | 648 | ASSERT(bp->b_transp == tp); |
645 | ASSERT(bip != NULL); | 649 | ASSERT(bip != NULL); |
@@ -654,8 +658,8 @@ xfs_trans_binval( | |||
654 | */ | 658 | */ |
655 | ASSERT(XFS_BUF_ISSTALE(bp)); | 659 | ASSERT(XFS_BUF_ISSTALE(bp)); |
656 | ASSERT(!(bip->bli_flags & (XFS_BLI_LOGGED | XFS_BLI_DIRTY))); | 660 | ASSERT(!(bip->bli_flags & (XFS_BLI_LOGGED | XFS_BLI_DIRTY))); |
657 | ASSERT(!(bip->bli_format.blf_flags & XFS_BLF_INODE_BUF)); | 661 | ASSERT(!(bip->__bli_format.blf_flags & XFS_BLF_INODE_BUF)); |
658 | ASSERT(bip->bli_format.blf_flags & XFS_BLF_CANCEL); | 662 | ASSERT(bip->__bli_format.blf_flags & XFS_BLF_CANCEL); |
659 | ASSERT(bip->bli_item.li_desc->lid_flags & XFS_LID_DIRTY); | 663 | ASSERT(bip->bli_item.li_desc->lid_flags & XFS_LID_DIRTY); |
660 | ASSERT(tp->t_flags & XFS_TRANS_DIRTY); | 664 | ASSERT(tp->t_flags & XFS_TRANS_DIRTY); |
661 | return; | 665 | return; |
@@ -665,10 +669,12 @@ xfs_trans_binval( | |||
665 | 669 | ||
666 | bip->bli_flags |= XFS_BLI_STALE; | 670 | bip->bli_flags |= XFS_BLI_STALE; |
667 | bip->bli_flags &= ~(XFS_BLI_INODE_BUF | XFS_BLI_LOGGED | XFS_BLI_DIRTY); | 671 | bip->bli_flags &= ~(XFS_BLI_INODE_BUF | XFS_BLI_LOGGED | XFS_BLI_DIRTY); |
668 | bip->bli_format.blf_flags &= ~XFS_BLF_INODE_BUF; | 672 | bip->__bli_format.blf_flags &= ~XFS_BLF_INODE_BUF; |
669 | bip->bli_format.blf_flags |= XFS_BLF_CANCEL; | 673 | bip->__bli_format.blf_flags |= XFS_BLF_CANCEL; |
670 | memset((char *)(bip->bli_format.blf_data_map), 0, | 674 | for (i = 0; i < bip->bli_format_count; i++) { |
671 | (bip->bli_format.blf_map_size * sizeof(uint))); | 675 | memset(bip->bli_formats[i].blf_data_map, 0, |
676 | (bip->bli_formats[i].blf_map_size * sizeof(uint))); | ||
677 | } | ||
672 | bip->bli_item.li_desc->lid_flags |= XFS_LID_DIRTY; | 678 | bip->bli_item.li_desc->lid_flags |= XFS_LID_DIRTY; |
673 | tp->t_flags |= XFS_TRANS_DIRTY; | 679 | tp->t_flags |= XFS_TRANS_DIRTY; |
674 | } | 680 | } |
@@ -772,5 +778,5 @@ xfs_trans_dquot_buf( | |||
772 | type == XFS_BLF_GDQUOT_BUF); | 778 | type == XFS_BLF_GDQUOT_BUF); |
773 | ASSERT(atomic_read(&bip->bli_refcount) > 0); | 779 | ASSERT(atomic_read(&bip->bli_refcount) > 0); |
774 | 780 | ||
775 | bip->bli_format.blf_flags |= type; | 781 | bip->__bli_format.blf_flags |= type; |
776 | } | 782 | } |