Lines Matching defs: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);
506 lwb_t *lwb = NULL;
546 * Allocate a log write buffer (lwb) for the first log block.
549 lwb = zil_alloc_lwb(zilog, &blk, txg);
563 return (lwb);
579 lwb_t *lwb;
607 while ((lwb = list_head(&zilog->zl_lwb_list)) != NULL) {
608 list_remove(&zilog->zl_lwb_list, lwb);
609 if (lwb->lwb_buf != NULL)
610 zio_buf_free(lwb->lwb_buf, lwb->lwb_sz);
611 zio_free_zil(zilog->zl_spa, txg, &lwb->lwb_blk);
612 kmem_cache_free(zil_lwb_cache, lwb);
839 lwb_t *lwb = zio->io_private;
840 zilog_t *zilog = lwb->lwb_zilog;
841 dmu_tx_t *tx = lwb->lwb_tx;
852 * Ensure the lwb buffer pointer is cleared before releasing
855 * to remove the lwb so that it's not picked up as the next new
857 * the lwb if lwb_buf is null.
859 zio_buf_free(lwb->lwb_buf, lwb->lwb_sz);
861 lwb->lwb_buf = NULL;
862 lwb->lwb_tx = NULL;
877 zil_lwb_write_init(zilog_t *zilog, lwb_t *lwb)
881 SET_BOOKMARK(&zb, lwb->lwb_blk.blk_cksum.zc_word[ZIL_ZC_OBJSET],
883 lwb->lwb_blk.blk_cksum.zc_word[ZIL_ZC_SEQ]);
889 if (lwb->lwb_zio == NULL) {
890 lwb->lwb_zio = zio_rewrite(zilog->zl_root_zio, zilog->zl_spa,
891 0, &lwb->lwb_blk, lwb->lwb_buf, BP_GET_LSIZE(&lwb->lwb_blk),
892 zil_lwb_write_done, lwb, ZIO_PRIORITY_SYNC_WRITE,
926 zil_lwb_write_start(zilog_t *zilog, lwb_t *lwb)
937 if (BP_GET_CHECKSUM(&lwb->lwb_blk) == ZIO_CHECKSUM_ZILOG2) {
938 zilc = (zil_chain_t *)lwb->lwb_buf;
941 zilc = (zil_chain_t *)(lwb->lwb_buf + lwb->lwb_sz);
945 ASSERT(lwb->lwb_nused <= lwb->lwb_sz);
951 * the block that points at it (lwb), we'd leak it if we crashed.
961 lwb->lwb_tx = tx;
992 error = zio_alloc_zil(spa, txg, bp, &lwb->lwb_blk, zil_blksz,
996 bp->blk_cksum = lwb->lwb_blk.blk_cksum;
1000 * Allocate a new log write buffer (lwb).
1005 zil_add_block(zilog, &lwb->lwb_blk);
1008 if (BP_GET_CHECKSUM(&lwb->lwb_blk) == ZIO_CHECKSUM_ZILOG2) {
1010 wsz = P2ROUNDUP_TYPED(lwb->lwb_nused, ZIL_MIN_BLKSZ, uint64_t);
1011 ASSERT3U(wsz, <=, lwb->lwb_sz);
1012 zio_shrink(lwb->lwb_zio, wsz);
1015 wsz = lwb->lwb_sz;
1019 zilc->zc_nused = lwb->lwb_nused;
1020 zilc->zc_eck.zec_cksum = lwb->lwb_blk.blk_cksum;
1025 bzero(lwb->lwb_buf + lwb->lwb_nused, wsz - lwb->lwb_nused);
1027 zio_nowait(lwb->lwb_zio); /* Kick off the write for the old log block */
1037 zil_lwb_commit(zilog_t *zilog, itx_t *itx, lwb_t *lwb)
1046 if (lwb == NULL)
1049 ASSERT(lwb->lwb_buf != NULL);
1059 zil_lwb_write_init(zilog, lwb);
1064 if (lwb->lwb_nused + reclen + dlen > lwb->lwb_sz) {
1065 lwb = zil_lwb_write_start(zilog, lwb);
1066 if (lwb == NULL)
1068 zil_lwb_write_init(zilog, lwb);
1069 ASSERT(LWB_EMPTY(lwb));
1070 if (lwb->lwb_nused + reclen + dlen > lwb->lwb_sz) {
1072 return (lwb);
1076 lr_buf = lwb->lwb_buf + lwb->lwb_nused;
1100 itx->itx_private, lrw, dbuf, lwb->lwb_zio);
1103 return (lwb);
1108 return (lwb);
1120 lwb->lwb_nused += reclen + dlen;
1121 lwb->lwb_max_txg = MAX(lwb->lwb_max_txg, txg);
1122 ASSERT3U(lwb->lwb_nused, <=, lwb->lwb_sz);
1123 ASSERT0(P2PHASE(lwb->lwb_nused, sizeof (uint64_t)));
1125 return (lwb);
1459 lwb_t *lwb;
1479 lwb = NULL;
1481 lwb = list_tail(&zilog->zl_lwb_list);
1482 if (lwb == NULL)
1483 lwb = zil_create(zilog);
1492 lwb = zil_lwb_commit(zilog, itx, lwb);
1500 if (lwb != NULL && lwb->lwb_zio != NULL)
1501 lwb = zil_lwb_write_start(zilog, lwb);
1514 if (error || lwb == NULL)
1524 if (error == 0 && lwb != NULL)
1596 lwb_t *lwb;
1637 while ((lwb = list_head(&zilog->zl_lwb_list)) != NULL) {
1638 zh->zh_log = lwb->lwb_blk;
1639 if (lwb->lwb_buf != NULL || lwb->lwb_max_txg > txg)
1641 list_remove(&zilog->zl_lwb_list, lwb);
1642 zio_free_zil(spa, txg, &lwb->lwb_blk);
1643 kmem_cache_free(zil_lwb_cache, lwb);
1646 * If we don't have anything left in the lwb list then
1661 sizeof (struct lwb), 0, NULL, NULL, NULL, NULL, NULL, 0);
1789 lwb_t *lwb;
1795 * The lwb_max_txg for the stubby lwb will reflect the last activity
1801 lwb = list_tail(&zilog->zl_lwb_list);
1802 if (lwb != NULL)
1803 txg = lwb->lwb_max_txg;
1817 lwb = list_head(&zilog->zl_lwb_list);
1818 if (lwb != NULL) {
1819 ASSERT(lwb == list_tail(&zilog->zl_lwb_list));
1820 list_remove(&zilog->zl_lwb_list, lwb);
1821 zio_buf_free(lwb->lwb_buf, lwb->lwb_sz);
1822 kmem_cache_free(zil_lwb_cache, lwb);