Lines Matching refs:tp

66 	struct xfs_trans	*tp)
68 xfs_extent_busy_sort(&tp->t_busy);
69 xfs_extent_busy_clear(tp->t_mountp, &tp->t_busy, false);
71 trace_xfs_trans_free(tp, _RET_IP_);
72 xfs_trans_clear_context(tp);
73 if (!(tp->t_flags & XFS_TRANS_NO_WRITECOUNT))
74 sb_end_intwrite(tp->t_mountp->m_super);
75 xfs_trans_free_dqinfo(tp);
76 kmem_cache_free(xfs_trans_cache, tp);
89 struct xfs_trans *tp)
93 trace_xfs_trans_dup(tp, _RET_IP_);
101 ntp->t_mountp = tp->t_mountp;
107 ASSERT(tp->t_flags & XFS_TRANS_PERM_LOG_RES);
108 ASSERT(tp->t_ticket != NULL);
111 (tp->t_flags & XFS_TRANS_RESERVE) |
112 (tp->t_flags & XFS_TRANS_NO_WRITECOUNT) |
113 (tp->t_flags & XFS_TRANS_RES_FDBLKS);
115 tp->t_flags |= XFS_TRANS_NO_WRITECOUNT;
116 ntp->t_ticket = xfs_log_ticket_get(tp->t_ticket);
118 ASSERT(tp->t_blk_res >= tp->t_blk_res_used);
119 ntp->t_blk_res = tp->t_blk_res - tp->t_blk_res_used;
120 tp->t_blk_res = tp->t_blk_res_used;
122 ntp->t_rtx_res = tp->t_rtx_res - tp->t_rtx_res_used;
123 tp->t_rtx_res = tp->t_rtx_res_used;
125 xfs_trans_switch_context(tp, ntp);
127 /* move deferred ops over to the new tp */
128 xfs_defer_move(ntp, tp);
130 xfs_trans_dup_dqinfo(tp, ntp);
150 struct xfs_trans *tp,
155 struct xfs_mount *mp = tp->t_mountp;
157 bool rsvd = (tp->t_flags & XFS_TRANS_RESERVE) != 0;
168 tp->t_blk_res += blocks;
177 ASSERT(tp->t_log_res == 0 ||
178 tp->t_log_res == resp->tr_logres);
179 ASSERT(tp->t_log_count == 0 ||
180 tp->t_log_count == resp->tr_logcount);
183 tp->t_flags |= XFS_TRANS_PERM_LOG_RES;
186 ASSERT(tp->t_ticket == NULL);
187 ASSERT(!(tp->t_flags & XFS_TRANS_PERM_LOG_RES));
190 if (tp->t_ticket != NULL) {
192 error = xfs_log_regrant(mp, tp->t_ticket);
196 &tp->t_ticket, permanent);
202 tp->t_log_res = resp->tr_logres;
203 tp->t_log_count = resp->tr_logcount;
217 tp->t_rtx_res += rtextents;
228 xfs_log_ticket_ungrant(mp->m_log, tp->t_ticket);
229 tp->t_ticket = NULL;
230 tp->t_log_res = 0;
231 tp->t_flags &= ~XFS_TRANS_PERM_LOG_RES;
237 tp->t_blk_res = 0;
251 struct xfs_trans *tp;
261 tp = kmem_cache_zalloc(xfs_trans_cache, GFP_KERNEL | __GFP_NOFAIL);
264 xfs_trans_set_context(tp);
275 tp->t_magic = XFS_TRANS_HEADER_MAGIC;
276 tp->t_flags = flags;
277 tp->t_mountp = mp;
278 INIT_LIST_HEAD(&tp->t_items);
279 INIT_LIST_HEAD(&tp->t_busy);
280 INIT_LIST_HEAD(&tp->t_dfops);
281 tp->t_highest_agno = NULLAGNUMBER;
283 error = xfs_trans_reserve(tp, resp, blocks, rtextents);
285 xfs_trans_cancel(tp);
300 xfs_trans_cancel(tp);
304 trace_xfs_trans_alloc(tp, _RET_IP_);
306 *tpp = tp;
354 xfs_trans_t *tp,
359 xfs_mount_t *mp = tp->t_mountp;
363 tp->t_icount_delta += delta;
368 tp->t_ifree_delta += delta;
379 tp->t_blk_res_used += (uint)-delta;
380 if (tp->t_blk_res_used > tp->t_blk_res)
382 } else if (delta > 0 && (tp->t_flags & XFS_TRANS_RES_FDBLKS)) {
393 UINT_MAX - tp->t_blk_res);
394 tp->t_blk_res += blkres_delta;
397 tp->t_fdblocks_delta += delta;
407 tp->t_res_fdblocks_delta += delta;
418 tp->t_rtx_res_used += (uint)-delta;
419 ASSERT(tp->t_rtx_res_used <= tp->t_rtx_res);
421 tp->t_frextents_delta += delta;
430 tp->t_res_frextents_delta += delta;
433 tp->t_dblocks_delta += delta;
437 tp->t_agcount_delta += delta;
440 tp->t_imaxpct_delta += delta;
443 tp->t_rextsize_delta += delta;
446 tp->t_rbmblocks_delta += delta;
449 tp->t_rblocks_delta += delta;
452 tp->t_rextents_delta += delta;
455 tp->t_rextslog_delta += delta;
462 tp->t_flags |= flags;
475 xfs_trans_t *tp)
481 bp = xfs_trans_getsb(tp);
487 if (!xfs_has_lazysbcount((tp->t_mountp))) {
488 if (tp->t_icount_delta)
489 be64_add_cpu(&sbp->sb_icount, tp->t_icount_delta);
490 if (tp->t_ifree_delta)
491 be64_add_cpu(&sbp->sb_ifree, tp->t_ifree_delta);
492 if (tp->t_fdblocks_delta)
493 be64_add_cpu(&sbp->sb_fdblocks, tp->t_fdblocks_delta);
494 if (tp->t_res_fdblocks_delta)
495 be64_add_cpu(&sbp->sb_fdblocks, tp->t_res_fdblocks_delta);
512 if (tp->t_frextents_delta || tp->t_res_frextents_delta) {
513 struct xfs_mount *mp = tp->t_mountp;
516 rtxdelta = tp->t_frextents_delta + tp->t_res_frextents_delta;
524 if (tp->t_dblocks_delta) {
525 be64_add_cpu(&sbp->sb_dblocks, tp->t_dblocks_delta);
528 if (tp->t_agcount_delta) {
529 be32_add_cpu(&sbp->sb_agcount, tp->t_agcount_delta);
532 if (tp->t_imaxpct_delta) {
533 sbp->sb_imax_pct += tp->t_imaxpct_delta;
536 if (tp->t_rextsize_delta) {
537 be32_add_cpu(&sbp->sb_rextsize, tp->t_rextsize_delta);
540 if (tp->t_rbmblocks_delta) {
541 be32_add_cpu(&sbp->sb_rbmblocks, tp->t_rbmblocks_delta);
544 if (tp->t_rblocks_delta) {
545 be64_add_cpu(&sbp->sb_rblocks, tp->t_rblocks_delta);
548 if (tp->t_rextents_delta) {
549 be64_add_cpu(&sbp->sb_rextents, tp->t_rextents_delta);
552 if (tp->t_rextslog_delta) {
553 sbp->sb_rextslog += tp->t_rextslog_delta;
557 xfs_trans_buf_set_type(tp, bp, XFS_BLFT_SB_BUF);
562 xfs_trans_log_buf(tp, bp, 0, sizeof(struct xfs_dsb) - 1);
568 xfs_trans_log_buf(tp, bp, offsetof(struct xfs_dsb, sb_icount),
592 struct xfs_trans *tp)
594 struct xfs_mount *mp = tp->t_mountp;
595 bool rsvd = (tp->t_flags & XFS_TRANS_RESERVE) != 0;
603 if (tp->t_blk_res > 0)
604 blkdelta = tp->t_blk_res;
605 if ((tp->t_fdblocks_delta != 0) &&
607 (tp->t_flags & XFS_TRANS_SB_DIRTY)))
608 blkdelta += tp->t_fdblocks_delta;
610 if (tp->t_rtx_res > 0)
611 rtxdelta = tp->t_rtx_res;
612 if ((tp->t_frextents_delta != 0) &&
613 (tp->t_flags & XFS_TRANS_SB_DIRTY))
614 rtxdelta += tp->t_frextents_delta;
617 (tp->t_flags & XFS_TRANS_SB_DIRTY)) {
618 idelta = tp->t_icount_delta;
619 ifreedelta = tp->t_ifree_delta;
640 if (!(tp->t_flags & XFS_TRANS_SB_DIRTY))
645 mp->m_sb.sb_fdblocks += tp->t_fdblocks_delta + tp->t_res_fdblocks_delta;
654 mp->m_sb.sb_dblocks += tp->t_dblocks_delta;
655 mp->m_sb.sb_agcount += tp->t_agcount_delta;
656 mp->m_sb.sb_imax_pct += tp->t_imaxpct_delta;
657 mp->m_sb.sb_rextsize += tp->t_rextsize_delta;
658 mp->m_sb.sb_rbmblocks += tp->t_rbmblocks_delta;
659 mp->m_sb.sb_rblocks += tp->t_rblocks_delta;
660 mp->m_sb.sb_rextents += tp->t_rextents_delta;
661 mp->m_sb.sb_rextslog += tp->t_rextslog_delta;
676 struct xfs_trans *tp,
679 ASSERT(lip->li_log == tp->t_mountp->m_log);
680 ASSERT(lip->li_ailp == tp->t_mountp->m_ail);
684 list_add_tail(&lip->li_trans, &tp->t_items);
685 trace_xfs_trans_add_item(tp, _RET_IP_);
704 struct xfs_trans *tp,
709 trace_xfs_trans_free_items(tp, _RET_IP_);
711 list_for_each_entry_safe(lip, next, &tp->t_items, li_trans) {
900 struct xfs_trans *tp)
902 struct xfs_mount *mp = tp->t_mountp;
911 list_sort(NULL, &tp->t_items, xfs_trans_precommit_sort);
919 list_for_each_entry_safe(lip, n, &tp->t_items, li_trans) {
923 error = lip->li_ops->iop_precommit(tp, lip);
947 struct xfs_trans *tp,
950 struct xfs_mount *mp = tp->t_mountp;
954 int sync = tp->t_flags & XFS_TRANS_SYNC;
956 trace_xfs_trans_commit(tp, _RET_IP_);
958 error = xfs_trans_run_precommits(tp);
960 if (tp->t_flags & XFS_TRANS_PERM_LOG_RES)
961 xfs_defer_cancel(tp);
969 WARN_ON_ONCE(!list_empty(&tp->t_dfops) &&
970 !(tp->t_flags & XFS_TRANS_PERM_LOG_RES));
971 if (!regrant && (tp->t_flags & XFS_TRANS_PERM_LOG_RES)) {
972 error = xfs_defer_finish_noroll(&tp);
977 error = xfs_trans_run_precommits(tp);
989 if (!(tp->t_flags & XFS_TRANS_DIRTY))
1003 ASSERT(tp->t_ticket != NULL);
1008 if (tp->t_flags & XFS_TRANS_SB_DIRTY)
1009 xfs_trans_apply_sb_deltas(tp);
1010 xfs_trans_apply_dquot_deltas(tp);
1012 xlog_cil_commit(log, tp, &commit_seq, regrant);
1014 xfs_trans_free(tp);
1030 xfs_trans_unreserve_and_mod_sb(tp);
1037 xfs_trans_unreserve_and_mod_dquots(tp);
1038 if (tp->t_ticket) {
1040 xfs_log_ticket_regrant(log, tp->t_ticket);
1042 xfs_log_ticket_ungrant(log, tp->t_ticket);
1043 tp->t_ticket = NULL;
1045 xfs_trans_free_items(tp, !!error);
1046 xfs_trans_free(tp);
1054 struct xfs_trans *tp)
1056 return __xfs_trans_commit(tp, false);
1077 struct xfs_trans *tp)
1079 struct xfs_mount *mp = tp->t_mountp;
1081 bool dirty = (tp->t_flags & XFS_TRANS_DIRTY);
1083 trace_xfs_trans_cancel(tp, _RET_IP_);
1091 if (!list_empty(&tp->t_dfops)) {
1092 ASSERT(tp->t_flags & XFS_TRANS_PERM_LOG_RES);
1094 xfs_defer_cancel(tp);
1112 list_for_each_entry(lip, &tp->t_items, li_trans)
1116 xfs_trans_unreserve_and_mod_sb(tp);
1117 xfs_trans_unreserve_and_mod_dquots(tp);
1119 if (tp->t_ticket) {
1120 xfs_log_ticket_ungrant(log, tp->t_ticket);
1121 tp->t_ticket = NULL;
1124 xfs_trans_free_items(tp, dirty);
1125 xfs_trans_free(tp);
1192 struct xfs_trans *tp;
1200 force ? XFS_TRANS_RESERVE : 0, &tp);
1205 xfs_trans_ijoin(tp, ip, 0);
1214 error = xfs_trans_reserve_quota_nblks(tp, ip, dblocks, rblocks, force);
1216 xfs_trans_cancel(tp);
1225 *tpp = tp;
1229 xfs_trans_cancel(tp);
1248 struct xfs_trans *tp;
1253 error = xfs_trans_alloc(mp, resv, dblocks, 0, 0, &tp);
1257 error = xfs_trans_reserve_quota_icreate(tp, udqp, gdqp, pdqp, dblocks);
1259 xfs_trans_cancel(tp);
1265 xfs_trans_cancel(tp);
1269 *tpp = tp;
1291 struct xfs_trans *tp;
1300 error = xfs_trans_alloc(mp, &M_RES(mp)->tr_ichange, 0, 0, 0, &tp);
1305 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
1335 error = xfs_trans_reserve_quota_bydquots(tp, mp, udqp, gdqp,
1339 xfs_trans_cancel(tp);
1348 *tpp = tp;
1352 xfs_trans_cancel(tp);
1376 struct xfs_trans *tp;
1385 error = xfs_trans_alloc(mp, resv, resblks, 0, 0, &tp);
1389 error = xfs_trans_alloc(mp, resv, resblks, 0, 0, &tp);
1396 xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL);
1397 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
1416 error = xfs_trans_reserve_quota_nblks(tp, dp, resblks, 0, false);
1419 xfs_trans_cancel(tp);
1433 *tpp = tp;
1438 xfs_trans_cancel(tp);