Lines Matching refs:lwb

85 #define	LWB_EMPTY(lwb) ((BP_GET_LSIZE(&lwb->lwb_blk) - \
86 sizeof (zil_chain_t)) == (lwb->lwb_sz - lwb->lwb_nused))
444 lwb_t *lwb;
446 lwb = kmem_cache_alloc(zil_lwb_cache, KM_SLEEP);
447 lwb->lwb_zilog = zilog;
448 lwb->lwb_blk = *bp;
449 lwb->lwb_buf = zio_buf_alloc(BP_GET_LSIZE(bp));
450 lwb->lwb_max_txg = txg;
451 lwb->lwb_zio = NULL;
452 lwb->lwb_tx = NULL;
454 lwb->lwb_nused = sizeof (zil_chain_t);
455 lwb->lwb_sz = BP_GET_LSIZE(bp);
457 lwb->lwb_nused = 0;
458 lwb->lwb_sz = BP_GET_LSIZE(bp) - sizeof (zil_chain_t);
462 list_insert_tail(&zilog->zl_lwb_list, lwb);
465 return (lwb);
527 lwb_t *lwb = NULL;
567 * Allocate a log write buffer (lwb) for the first log block.
570 lwb = zil_alloc_lwb(zilog, &blk, txg);
584 return (lwb);
600 lwb_t *lwb;
628 while ((lwb = list_head(&zilog->zl_lwb_list)) != NULL) {
629 list_remove(&zilog->zl_lwb_list, lwb);
630 if (lwb->lwb_buf != NULL)
631 zio_buf_free(lwb->lwb_buf, lwb->lwb_sz);
632 zio_free_zil(zilog->zl_spa, txg, &lwb->lwb_blk);
633 kmem_cache_free(zil_lwb_cache, lwb);
860 lwb_t *lwb = zio->io_private;
861 zilog_t *zilog = lwb->lwb_zilog;
862 dmu_tx_t *tx = lwb->lwb_tx;
873 * Ensure the lwb buffer pointer is cleared before releasing
876 * to remove the lwb so that it's not picked up as the next new
878 * the lwb if lwb_buf is null.
880 zio_buf_free(lwb->lwb_buf, lwb->lwb_sz);
882 lwb->lwb_buf = NULL;
883 lwb->lwb_tx = NULL;
898 zil_lwb_write_init(zilog_t *zilog, lwb_t *lwb)
902 SET_BOOKMARK(&zb, lwb->lwb_blk.blk_cksum.zc_word[ZIL_ZC_OBJSET],
904 lwb->lwb_blk.blk_cksum.zc_word[ZIL_ZC_SEQ]);
910 if (lwb->lwb_zio == NULL) {
911 lwb->lwb_zio = zio_rewrite(zilog->zl_root_zio, zilog->zl_spa,
912 0, &lwb->lwb_blk, lwb->lwb_buf, BP_GET_LSIZE(&lwb->lwb_blk),
913 zil_lwb_write_done, lwb, ZIO_PRIORITY_SYNC_WRITE,
947 zil_lwb_write_start(zilog_t *zilog, lwb_t *lwb)
958 if (BP_GET_CHECKSUM(&lwb->lwb_blk) == ZIO_CHECKSUM_ZILOG2) {
959 zilc = (zil_chain_t *)lwb->lwb_buf;
962 zilc = (zil_chain_t *)(lwb->lwb_buf + lwb->lwb_sz);
966 ASSERT(lwb->lwb_nused <= lwb->lwb_sz);
972 * the block that points at it (lwb), we'd leak it if we crashed.
982 lwb->lwb_tx = tx;
1013 error = zio_alloc_zil(spa, txg, bp, &lwb->lwb_blk, zil_blksz,
1017 bp->blk_cksum = lwb->lwb_blk.blk_cksum;
1021 * Allocate a new log write buffer (lwb).
1026 zil_add_block(zilog, &lwb->lwb_blk);
1029 if (BP_GET_CHECKSUM(&lwb->lwb_blk) == ZIO_CHECKSUM_ZILOG2) {
1031 wsz = P2ROUNDUP_TYPED(lwb->lwb_nused, ZIL_MIN_BLKSZ, uint64_t);
1032 ASSERT3U(wsz, <=, lwb->lwb_sz);
1033 zio_shrink(lwb->lwb_zio, wsz);
1036 wsz = lwb->lwb_sz;
1040 zilc->zc_nused = lwb->lwb_nused;
1041 zilc->zc_eck.zec_cksum = lwb->lwb_blk.blk_cksum;
1046 bzero(lwb->lwb_buf + lwb->lwb_nused, wsz - lwb->lwb_nused);
1048 zio_nowait(lwb->lwb_zio); /* Kick off the write for the old log block */
1058 zil_lwb_commit(zilog_t *zilog, itx_t *itx, lwb_t *lwb)
1067 if (lwb == NULL)
1070 ASSERT(lwb->lwb_buf != NULL);
1078 zil_lwb_write_init(zilog, lwb);
1083 if (lwb->lwb_nused + reclen + dlen > lwb->lwb_sz) {
1084 lwb = zil_lwb_write_start(zilog, lwb);
1085 if (lwb == NULL)
1087 zil_lwb_write_init(zilog, lwb);
1088 ASSERT(LWB_EMPTY(lwb));
1089 if (lwb->lwb_nused + reclen + dlen > lwb->lwb_sz) {
1091 return (lwb);
1095 lr_buf = lwb->lwb_buf + lwb->lwb_nused;
1119 itx->itx_private, lrw, dbuf, lwb->lwb_zio);
1122 return (lwb);
1127 return (lwb);
1139 lwb->lwb_nused += reclen + dlen;
1140 lwb->lwb_max_txg = MAX(lwb->lwb_max_txg, txg);
1141 ASSERT3U(lwb->lwb_nused, <=, lwb->lwb_sz);
1142 ASSERT0(P2PHASE(lwb->lwb_nused, sizeof (uint64_t)));
1144 return (lwb);
1499 lwb_t *lwb;
1519 lwb = NULL;
1521 lwb = list_tail(&zilog->zl_lwb_list);
1522 if (lwb == NULL)
1523 lwb = zil_create(zilog);
1538 lwb = zil_lwb_commit(zilog, itx, lwb);
1546 if (lwb != NULL && lwb->lwb_zio != NULL)
1547 lwb = zil_lwb_write_start(zilog, lwb);
1560 if (error || lwb == NULL)
1570 if (error == 0 && lwb != NULL)
1642 lwb_t *lwb;
1683 while ((lwb = list_head(&zilog->zl_lwb_list)) != NULL) {
1684 zh->zh_log = lwb->lwb_blk;
1685 if (lwb->lwb_buf != NULL || lwb->lwb_max_txg > txg)
1687 list_remove(&zilog->zl_lwb_list, lwb);
1688 zio_free_zil(spa, txg, &lwb->lwb_blk);
1689 kmem_cache_free(zil_lwb_cache, lwb);
1692 * If we don't have anything left in the lwb list then
1707 sizeof (struct lwb), 0, NULL, NULL, NULL, NULL, NULL, 0);
1835 lwb_t *lwb;
1841 * The lwb_max_txg for the stubby lwb will reflect the last activity
1847 lwb = list_tail(&zilog->zl_lwb_list);
1848 if (lwb != NULL)
1849 txg = lwb->lwb_max_txg;
1866 lwb = list_head(&zilog->zl_lwb_list);
1867 if (lwb != NULL) {
1868 ASSERT(lwb == list_tail(&zilog->zl_lwb_list));
1869 list_remove(&zilog->zl_lwb_list, lwb);
1870 zio_buf_free(lwb->lwb_buf, lwb->lwb_sz);
1871 kmem_cache_free(zil_lwb_cache, lwb);