Lines Matching +full:re +full:- +full:attached

1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc.
37 list_for_each_entry(lip, &tp->t_items, li_trans) { in xfs_trans_buf_item_match()
39 if (blip->bli_item.li_type == XFS_LI_BUF && in xfs_trans_buf_item_match()
40 blip->bli_buf->b_target == target && in xfs_trans_buf_item_match()
41 xfs_buf_daddr(blip->bli_buf) == map[0].bm_bn && in xfs_trans_buf_item_match()
42 blip->bli_buf->b_length == len) { in xfs_trans_buf_item_match()
43 ASSERT(blip->bli_buf->b_map_count == nmaps); in xfs_trans_buf_item_match()
44 return blip->bli_buf; in xfs_trans_buf_item_match()
68 ASSERT(bp->b_transp == NULL); in _xfs_trans_bjoin()
75 xfs_buf_item_init(bp, tp->t_mountp); in _xfs_trans_bjoin()
76 bip = bp->b_log_item; in _xfs_trans_bjoin()
77 ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); in _xfs_trans_bjoin()
78 ASSERT(!(bip->__bli_format.blf_flags & XFS_BLF_CANCEL)); in _xfs_trans_bjoin()
79 ASSERT(!(bip->bli_flags & XFS_BLI_LOGGED)); in _xfs_trans_bjoin()
81 bip->bli_recur = 0; in _xfs_trans_bjoin()
86 atomic_inc(&bip->bli_refcount); in _xfs_trans_bjoin()
92 xfs_trans_add_item(tp, &bip->bli_item); in _xfs_trans_bjoin()
93 bp->b_transp = tp; in _xfs_trans_bjoin()
103 trace_xfs_trans_bjoin(bp->b_log_item); in xfs_trans_bjoin()
141 if (xfs_is_shutdown(tp->t_mountp)) { in xfs_trans_get_buf_map()
143 bp->b_flags |= XBF_DONE; in xfs_trans_get_buf_map()
146 ASSERT(bp->b_transp == tp); in xfs_trans_get_buf_map()
147 bip = bp->b_log_item; in xfs_trans_get_buf_map()
149 ASSERT(atomic_read(&bip->bli_refcount) > 0); in xfs_trans_get_buf_map()
150 bip->bli_recur++; in xfs_trans_get_buf_map()
160 ASSERT(!bp->b_error); in xfs_trans_get_buf_map()
163 trace_xfs_trans_get_buf(bp->b_log_item); in xfs_trans_get_buf_map()
178 * attached to this transaction. in __xfs_trans_getsb()
180 if (bp->b_transp == tp) { in __xfs_trans_getsb()
181 struct xfs_buf_log_item *bip = bp->b_log_item; in __xfs_trans_getsb()
184 ASSERT(atomic_read(&bip->bli_refcount) > 0); in __xfs_trans_getsb()
185 bip->bli_recur++; in __xfs_trans_getsb()
193 trace_xfs_trans_getsb(bp->b_log_item); in __xfs_trans_getsb()
203 return __xfs_trans_getsb(tp, tp->t_mountp->m_sb_bp); in xfs_trans_getsb()
210 if (!tp->t_mountp->m_rtsb_bp) in xfs_trans_getrtsb()
212 return __xfs_trans_getsb(tp, tp->t_mountp->m_rtsb_bp); in xfs_trans_getrtsb()
253 ASSERT(bp->b_transp == tp); in xfs_trans_read_buf_map()
254 ASSERT(bp->b_log_item != NULL); in xfs_trans_read_buf_map()
255 ASSERT(!bp->b_error); in xfs_trans_read_buf_map()
256 ASSERT(bp->b_flags & XBF_DONE); in xfs_trans_read_buf_map()
264 return -EIO; in xfs_trans_read_buf_map()
269 * already attached to the transaction yet has no buffer ops in xfs_trans_read_buf_map()
270 * assigned. Ops are usually attached when the buffer is in xfs_trans_read_buf_map()
271 * attached to the transaction, or by the read caller if in xfs_trans_read_buf_map()
279 ASSERT(bp->b_ops != NULL); in xfs_trans_read_buf_map()
284 if (tp->t_flags & XFS_TRANS_DIRTY) in xfs_trans_read_buf_map()
285 xfs_force_shutdown(tp->t_mountp, in xfs_trans_read_buf_map()
289 if (error == -EFSBADCRC) in xfs_trans_read_buf_map()
290 error = -EFSCORRUPTED; in xfs_trans_read_buf_map()
294 bip = bp->b_log_item; in xfs_trans_read_buf_map()
295 bip->bli_recur++; in xfs_trans_read_buf_map()
297 ASSERT(atomic_read(&bip->bli_refcount) > 0); in xfs_trans_read_buf_map()
299 ASSERT(bp->b_ops != NULL || ops == NULL); in xfs_trans_read_buf_map()
310 if (tp && (tp->t_flags & XFS_TRANS_DIRTY)) in xfs_trans_read_buf_map()
311 xfs_force_shutdown(tp->t_mountp, SHUTDOWN_META_IO_ERROR); in xfs_trans_read_buf_map()
313 case -ENOMEM: in xfs_trans_read_buf_map()
314 case -EAGAIN: in xfs_trans_read_buf_map()
321 return -EIO; in xfs_trans_read_buf_map()
326 trace_xfs_trans_read_buf(bp->b_log_item); in xfs_trans_read_buf_map()
328 ASSERT(bp->b_ops != NULL || ops == NULL); in xfs_trans_read_buf_map()
339 struct xfs_buf_log_item *bip = bp->b_log_item; in xfs_trans_buf_is_dirty()
343 ASSERT(bip->bli_item.li_type == XFS_LI_BUF); in xfs_trans_buf_is_dirty()
344 return test_bit(XFS_LI_DIRTY, &bip->bli_item.li_flags); in xfs_trans_buf_is_dirty()
364 struct xfs_buf_log_item *bip = bp->b_log_item; in xfs_trans_brelse()
366 ASSERT(bp->b_transp == tp); in xfs_trans_brelse()
374 ASSERT(bip->bli_item.li_type == XFS_LI_BUF); in xfs_trans_brelse()
375 ASSERT(atomic_read(&bip->bli_refcount) > 0); in xfs_trans_brelse()
381 if (bip->bli_recur > 0) { in xfs_trans_brelse()
382 bip->bli_recur--; in xfs_trans_brelse()
390 if (test_bit(XFS_LI_DIRTY, &bip->bli_item.li_flags)) in xfs_trans_brelse()
392 if (bip->bli_flags & XFS_BLI_STALE) in xfs_trans_brelse()
399 ASSERT(!(bip->bli_flags & XFS_BLI_LOGGED)); in xfs_trans_brelse()
400 xfs_trans_del_item(&bip->bli_item); in xfs_trans_brelse()
401 bip->bli_flags &= ~XFS_BLI_HOLD; in xfs_trans_brelse()
406 bp->b_transp = NULL; in xfs_trans_brelse()
420 struct xfs_buf_log_item *bip = bp->b_log_item; in xfs_trans_bdetach()
423 ASSERT(bp->b_transp == tp); in xfs_trans_bdetach()
424 ASSERT(bip->bli_item.li_type == XFS_LI_BUF); in xfs_trans_bdetach()
425 ASSERT(atomic_read(&bip->bli_refcount) > 0); in xfs_trans_bdetach()
430 * Erase all recursion count, since we're removing this buffer from the in xfs_trans_bdetach()
433 bip->bli_recur = 0; in xfs_trans_bdetach()
439 ASSERT(!test_bit(XFS_LI_DIRTY, &bip->bli_item.li_flags)); in xfs_trans_bdetach()
440 ASSERT(!(bip->bli_flags & XFS_BLI_DIRTY)); in xfs_trans_bdetach()
441 ASSERT(!(bip->bli_flags & XFS_BLI_HOLD)); in xfs_trans_bdetach()
442 ASSERT(!(bip->bli_flags & XFS_BLI_LOGGED)); in xfs_trans_bdetach()
443 ASSERT(!(bip->bli_flags & XFS_BLI_ORDERED)); in xfs_trans_bdetach()
444 ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); in xfs_trans_bdetach()
447 xfs_trans_del_item(&bip->bli_item); in xfs_trans_bdetach()
449 bp->b_transp = NULL; in xfs_trans_bdetach()
463 struct xfs_buf_log_item *bip = bp->b_log_item; in xfs_trans_bhold()
465 ASSERT(bp->b_transp == tp); in xfs_trans_bhold()
467 ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); in xfs_trans_bhold()
468 ASSERT(!(bip->__bli_format.blf_flags & XFS_BLF_CANCEL)); in xfs_trans_bhold()
469 ASSERT(atomic_read(&bip->bli_refcount) > 0); in xfs_trans_bhold()
471 bip->bli_flags |= XFS_BLI_HOLD; in xfs_trans_bhold()
484 struct xfs_buf_log_item *bip = bp->b_log_item; in xfs_trans_bhold_release()
486 ASSERT(bp->b_transp == tp); in xfs_trans_bhold_release()
488 ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); in xfs_trans_bhold_release()
489 ASSERT(!(bip->__bli_format.blf_flags & XFS_BLF_CANCEL)); in xfs_trans_bhold_release()
490 ASSERT(atomic_read(&bip->bli_refcount) > 0); in xfs_trans_bhold_release()
491 ASSERT(bip->bli_flags & XFS_BLI_HOLD); in xfs_trans_bhold_release()
493 bip->bli_flags &= ~XFS_BLI_HOLD; in xfs_trans_bhold_release()
505 struct xfs_buf_log_item *bip = bp->b_log_item; in xfs_trans_dirty_buf()
507 ASSERT(bp->b_transp == tp); in xfs_trans_dirty_buf()
516 bp->b_flags |= XBF_DONE; in xfs_trans_dirty_buf()
518 ASSERT(atomic_read(&bip->bli_refcount) > 0); in xfs_trans_dirty_buf()
522 * cancel the invalidation now that we're dirtying the buffer in xfs_trans_dirty_buf()
526 if (bip->bli_flags & XFS_BLI_STALE) { in xfs_trans_dirty_buf()
527 bip->bli_flags &= ~XFS_BLI_STALE; in xfs_trans_dirty_buf()
528 ASSERT(bp->b_flags & XBF_STALE); in xfs_trans_dirty_buf()
529 bp->b_flags &= ~XBF_STALE; in xfs_trans_dirty_buf()
530 bip->__bli_format.blf_flags &= ~XFS_BLF_CANCEL; in xfs_trans_dirty_buf()
532 bip->bli_flags |= XFS_BLI_DIRTY | XFS_BLI_LOGGED; in xfs_trans_dirty_buf()
534 tp->t_flags |= XFS_TRANS_DIRTY; in xfs_trans_dirty_buf()
535 set_bit(XFS_LI_DIRTY, &bip->bli_item.li_flags); in xfs_trans_dirty_buf()
554 struct xfs_buf_log_item *bip = bp->b_log_item; in xfs_trans_log_buf()
556 ASSERT(first <= last && last < BBTOB(bp->b_length)); in xfs_trans_log_buf()
557 ASSERT(!(bip->bli_flags & XFS_BLI_ORDERED)); in xfs_trans_log_buf()
570 * need to prevent it from being written out when we're done. Allowing it
588 * Since we're invalidating the buffer, we also clear the state about which
593 * We set the stale bit in the buffer as well since we're getting rid of it.
600 struct xfs_buf_log_item *bip = bp->b_log_item; in xfs_trans_binval()
603 ASSERT(bp->b_transp == tp); in xfs_trans_binval()
605 ASSERT(atomic_read(&bip->bli_refcount) > 0); in xfs_trans_binval()
609 if (bip->bli_flags & XFS_BLI_STALE) { in xfs_trans_binval()
614 ASSERT(bp->b_flags & XBF_STALE); in xfs_trans_binval()
615 ASSERT(!(bip->bli_flags & (XFS_BLI_LOGGED | XFS_BLI_DIRTY))); in xfs_trans_binval()
616 ASSERT(!(bip->__bli_format.blf_flags & XFS_BLF_INODE_BUF)); in xfs_trans_binval()
617 ASSERT(!(bip->__bli_format.blf_flags & XFS_BLFT_MASK)); in xfs_trans_binval()
618 ASSERT(bip->__bli_format.blf_flags & XFS_BLF_CANCEL); in xfs_trans_binval()
619 ASSERT(test_bit(XFS_LI_DIRTY, &bip->bli_item.li_flags)); in xfs_trans_binval()
620 ASSERT(tp->t_flags & XFS_TRANS_DIRTY); in xfs_trans_binval()
626 bip->bli_flags |= XFS_BLI_STALE; in xfs_trans_binval()
627 bip->bli_flags &= ~(XFS_BLI_INODE_BUF | XFS_BLI_LOGGED | XFS_BLI_DIRTY); in xfs_trans_binval()
628 bip->__bli_format.blf_flags &= ~XFS_BLF_INODE_BUF; in xfs_trans_binval()
629 bip->__bli_format.blf_flags |= XFS_BLF_CANCEL; in xfs_trans_binval()
630 bip->__bli_format.blf_flags &= ~XFS_BLFT_MASK; in xfs_trans_binval()
631 for (i = 0; i < bip->bli_format_count; i++) { in xfs_trans_binval()
632 memset(bip->bli_formats[i].blf_data_map, 0, in xfs_trans_binval()
633 (bip->bli_formats[i].blf_map_size * sizeof(uint))); in xfs_trans_binval()
635 set_bit(XFS_LI_DIRTY, &bip->bli_item.li_flags); in xfs_trans_binval()
636 tp->t_flags |= XFS_TRANS_DIRTY; in xfs_trans_binval()
640 * This call is used to indicate that the buffer contains on-disk inodes which
655 struct xfs_buf_log_item *bip = bp->b_log_item; in xfs_trans_inode_buf()
657 ASSERT(bp->b_transp == tp); in xfs_trans_inode_buf()
659 ASSERT(atomic_read(&bip->bli_refcount) > 0); in xfs_trans_inode_buf()
661 bip->bli_flags |= XFS_BLI_INODE_BUF; in xfs_trans_inode_buf()
662 bp->b_iodone = xfs_buf_inode_iodone; in xfs_trans_inode_buf()
669 * special processing during unpin - where any inodes
680 struct xfs_buf_log_item *bip = bp->b_log_item; in xfs_trans_stale_inode_buf()
682 ASSERT(bp->b_transp == tp); in xfs_trans_stale_inode_buf()
684 ASSERT(atomic_read(&bip->bli_refcount) > 0); in xfs_trans_stale_inode_buf()
686 bip->bli_flags |= XFS_BLI_STALE_INODE; in xfs_trans_stale_inode_buf()
687 bp->b_iodone = xfs_buf_inode_iodone; in xfs_trans_stale_inode_buf()
705 struct xfs_buf_log_item *bip = bp->b_log_item; in xfs_trans_inode_alloc_buf()
707 ASSERT(bp->b_transp == tp); in xfs_trans_inode_alloc_buf()
709 ASSERT(atomic_read(&bip->bli_refcount) > 0); in xfs_trans_inode_alloc_buf()
711 bip->bli_flags |= XFS_BLI_INODE_ALLOC_BUF; in xfs_trans_inode_alloc_buf()
712 bp->b_iodone = xfs_buf_inode_iodone; in xfs_trans_inode_alloc_buf()
728 struct xfs_buf_log_item *bip = bp->b_log_item; in xfs_trans_ordered_buf()
730 ASSERT(bp->b_transp == tp); in xfs_trans_ordered_buf()
732 ASSERT(atomic_read(&bip->bli_refcount) > 0); in xfs_trans_ordered_buf()
737 bip->bli_flags |= XFS_BLI_ORDERED; in xfs_trans_ordered_buf()
758 struct xfs_buf_log_item *bip = bp->b_log_item; in xfs_trans_buf_set_type()
763 ASSERT(bp->b_transp == tp); in xfs_trans_buf_set_type()
765 ASSERT(atomic_read(&bip->bli_refcount) > 0); in xfs_trans_buf_set_type()
767 xfs_blft_to_flags(&bip->__bli_format, type); in xfs_trans_buf_set_type()
775 struct xfs_buf_log_item *sbip = src_bp->b_log_item; in xfs_trans_buf_copy_type()
776 struct xfs_buf_log_item *dbip = dst_bp->b_log_item; in xfs_trans_buf_copy_type()
779 type = xfs_blft_from_flags(&sbip->__bli_format); in xfs_trans_buf_copy_type()
780 xfs_blft_to_flags(&dbip->__bli_format, type); in xfs_trans_buf_copy_type()
800 struct xfs_buf_log_item *bip = bp->b_log_item; in xfs_trans_dquot_buf()
806 bip->__bli_format.blf_flags |= type; in xfs_trans_dquot_buf()
823 bp->b_iodone = xfs_buf_dquot_iodone; in xfs_trans_dquot_buf()