Home | History | Annotate | Download | only in zfs

Lines Matching refs:lwb

101 #define	LWB_EMPTY(lwb) ((BP_GET_LSIZE(&lwb->lwb_blk) - \
102 sizeof (zil_chain_t)) == (lwb->lwb_sz - lwb->lwb_nused))
460 lwb_t *lwb;
462 lwb = kmem_cache_alloc(zil_lwb_cache, KM_SLEEP);
463 lwb->lwb_zilog = zilog;
464 lwb->lwb_blk = *bp;
465 lwb->lwb_slog = slog;
466 lwb->lwb_buf = zio_buf_alloc(BP_GET_LSIZE(bp));
467 lwb->lwb_max_txg = txg;
468 lwb->lwb_zio = NULL;
469 lwb->lwb_tx = NULL;
471 lwb->lwb_nused = sizeof (zil_chain_t);
472 lwb->lwb_sz = BP_GET_LSIZE(bp);
474 lwb->lwb_nused = 0;
475 lwb->lwb_sz = BP_GET_LSIZE(bp) - sizeof (zil_chain_t);
479 list_insert_tail(&zilog->zl_lwb_list, lwb);
482 return (lwb);
544 lwb_t *lwb = NULL;
585 * Allocate a log write buffer (lwb) for the first log block.
588 lwb = zil_alloc_lwb(zilog, &blk, slog, txg);
602 return (lwb);
618 lwb_t *lwb;
646 while ((lwb = list_head(&zilog->zl_lwb_list)) != NULL) {
647 list_remove(&zilog->zl_lwb_list, lwb);
648 if (lwb->lwb_buf != NULL)
649 zio_buf_free(lwb->lwb_buf, lwb->lwb_sz);
650 zio_free_zil(zilog->zl_spa, txg, &lwb->lwb_blk);
651 kmem_cache_free(zil_lwb_cache, lwb);
880 lwb_t *lwb = zio->io_private;
881 zilog_t *zilog = lwb->lwb_zilog;
882 dmu_tx_t *tx = lwb->lwb_tx;
893 * Ensure the lwb buffer pointer is cleared before releasing
896 * to remove the lwb so that it's not picked up as the next new
898 * the lwb if lwb_buf is null.
900 zio_buf_free(lwb->lwb_buf, lwb->lwb_sz);
902 lwb->lwb_buf = NULL;
903 lwb->lwb_tx = NULL;
918 zil_lwb_write_init(zilog_t *zilog, lwb_t *lwb)
923 SET_BOOKMARK(&zb, lwb->lwb_blk.blk_cksum.zc_word[ZIL_ZC_OBJSET],
925 lwb->lwb_blk.blk_cksum.zc_word[ZIL_ZC_SEQ]);
931 if (lwb->lwb_zio == NULL) {
932 if (zilog->zl_cur_used <= zil_slog_limit || !lwb->lwb_slog)
936 lwb->lwb_zio = zio_rewrite(zilog->zl_root_zio, zilog->zl_spa,
937 0, &lwb->lwb_blk, lwb->lwb_buf, BP_GET_LSIZE(&lwb->lwb_blk),
938 zil_lwb_write_done, lwb, prio,
962 zil_lwb_write_start(zilog_t *zilog, lwb_t *lwb, boolean_t last)
974 if (BP_GET_CHECKSUM(&lwb->lwb_blk) == ZIO_CHECKSUM_ZILOG2) {
975 zilc = (zil_chain_t *)lwb->lwb_buf;
978 zilc = (zil_chain_t *)(lwb->lwb_buf + lwb->lwb_sz);
982 ASSERT(lwb->lwb_nused <= lwb->lwb_sz);
988 * the block that points at it (lwb), we'd leak it if we crashed.
998 lwb->lwb_tx = tx;
1029 error = zio_alloc_zil(spa, txg, bp, &lwb->lwb_blk, zil_blksz, &slog);
1032 bp->blk_cksum = lwb->lwb_blk.blk_cksum;
1036 * Allocate a new log write buffer (lwb).
1041 zil_add_block(zilog, &lwb->lwb_blk);
1044 if (BP_GET_CHECKSUM(&lwb->lwb_blk) == ZIO_CHECKSUM_ZILOG2) {
1046 wsz = P2ROUNDUP_TYPED(lwb->lwb_nused, ZIL_MIN_BLKSZ, uint64_t);
1047 ASSERT3U(wsz, <=, lwb->lwb_sz);
1048 zio_shrink(lwb->lwb_zio, wsz);
1051 wsz = lwb->lwb_sz;
1055 zilc->zc_nused = lwb->lwb_nused;
1056 zilc->zc_eck.zec_cksum = lwb->lwb_blk.blk_cksum;
1061 bzero(lwb->lwb_buf + lwb->lwb_nused, wsz - lwb->lwb_nused);
1064 lwb->lwb_zio->io_pipeline &= ~ZIO_STAGE_ISSUE_ASYNC;
1065 zio_nowait(lwb->lwb_zio); /* Kick off the write for the old log block */
1075 zil_lwb_commit(zilog_t *zilog, itx_t *itx, lwb_t *lwb)
1085 if (lwb == NULL)
1088 ASSERT(lwb->lwb_buf != NULL);
1096 zil_lwb_write_init(zilog, lwb);
1104 lwb_sp = lwb->lwb_sz - lwb->lwb_nused;
1108 lwb = zil_lwb_write_start(zilog, lwb, B_FALSE);
1109 if (lwb == NULL)
1111 zil_lwb_write_init(zilog, lwb);
1112 ASSERT(LWB_EMPTY(lwb));
1113 lwb_sp = lwb->lwb_sz - lwb->lwb_nused;
1118 lr_buf = lwb->lwb_buf + lwb->lwb_nused;
1145 itx->itx_private, lrwb, dbuf, lwb->lwb_zio);
1148 return (lwb);
1153 lwb);
1165 lwb->lwb_nused += reclen + dnow;
1166 lwb->lwb_max_txg = MAX(lwb->lwb_max_txg, txg);
1167 ASSERT3U(lwb->lwb_nused, <=, lwb->lwb_sz);
1168 ASSERT0(P2PHASE(lwb->lwb_nused, sizeof (uint64_t)));
1176 return (lwb);
1517 lwb_t *lwb;
1537 lwb = NULL;
1539 lwb = list_tail(&zilog->zl_lwb_list);
1540 if (lwb == NULL)
1541 lwb = zil_create(zilog);
1556 lwb = zil_lwb_commit(zilog, itx, lwb);
1564 if (lwb != NULL && lwb->lwb_zio != NULL)
1565 lwb = zil_lwb_write_start(zilog, lwb, B_TRUE);
1578 if (error || lwb == NULL)
1588 if (error == 0 && lwb != NULL)
1660 lwb_t *lwb;
1701 while ((lwb = list_head(&zilog->zl_lwb_list)) != NULL) {
1702 zh->zh_log = lwb->lwb_blk;
1703 if (lwb->lwb_buf != NULL || lwb->lwb_max_txg > txg)
1705 list_remove(&zilog->zl_lwb_list, lwb);
1706 zio_free_zil(spa, txg, &lwb->lwb_blk);
1707 kmem_cache_free(zil_lwb_cache, lwb);
1710 * If we don't have anything left in the lwb list then
1725 sizeof (struct lwb), 0, NULL, NULL, NULL, NULL, NULL, 0);
1853 lwb_t *lwb;
1859 * The lwb_max_txg for the stubby lwb will reflect the last activity
1865 lwb = list_tail(&zilog->zl_lwb_list);
1866 if (lwb != NULL)
1867 txg = lwb->lwb_max_txg;
1881 * We should have only one LWB left on the list; remove it now.
1884 lwb = list_head(&zilog->zl_lwb_list);
1885 if (lwb != NULL) {
1886 ASSERT(lwb == list_tail(&zilog->zl_lwb_list));
1887 list_remove(&zilog->zl_lwb_list, lwb);
1888 zio_buf_free(lwb->lwb_buf, lwb->lwb_sz);
1889 kmem_cache_free(zil_lwb_cache, lwb);