Lines Matching defs:cc_ent

370 static int _sd_doread(_sd_buf_handle_t *handle, _sd_cctl_t *cc_ent,
378 static int _sd_remote_store(_sd_cctl_t *cc_ent, nsc_off_t fba_pos,
394 static int sdbc_doread_prefetch(_sd_cctl_t *cc_ent, nsc_off_t fba_pos,
396 static _sd_bitmap_t update_dirty(_sd_cctl_t *cc_ent, sdbc_cblk_fba_t st_off,
1659 _sd_cctl_t *cc_ent, *cc_list;
1670 cc_ent = cc_list = cdi->cd_fail_head;
1671 while (cc_ent) {
1677 cc_ent->cc_write->sc_res, cc_ent->cc_data,
1684 CENTRY_SET_FTPOS(cc_ent);
1685 cc_ent->cc_write->sc_flag = cc_ent->cc_flag;
1687 cc_ent->cc_write->sc_dirty = CENTRY_DIRTY(cc_ent);
1689 SSOP_SETCENTRY(sdbc_safestore, cc_ent->cc_write);
1691 cc_ent = cc_ent->cc_dirty_next;
1692 if (!cc_ent)
1693 cc_ent = cc_list = cc_list->cc_dirty_link;
2022 _sd_cctl_t *cc_list, *cc_ent;
2046 cc_ent = cc_list = cdi->cd_fail_head;
2047 while (cc_ent) {
2048 if (CENTRY_PINNED(cc_ent))
2050 BLK_TO_FBA_NUM(CENTRY_BLK(cc_ent)), BLK_FBAS);
2051 cc_ent = cc_ent->cc_dirty_next;
2052 if (!cc_ent)
2053 cc_ent = cc_list = cc_list->cc_dirty_link;
3771 _sd_cctl_t *cc_ent;
3777 * Note: this code expects the cc_ent to
3782 cc_ent = qhead;
3784 cc_ent = cc_ent->cc_next;
3786 if (SET_CENTRY_INUSE(cc_ent)) {
3789 (void *)cc_ent);
3792 if (SET_CENTRY_PAGEIO(cc_ent)) {
3795 (void *)cc_ent);
3801 cc_dmchain->cc_prev->cc_next = cc_ent->cc_next;
3802 cc_ent->cc_next->cc_prev = cc_dmchain->cc_prev;
3804 cc_ent->cc_next = NULL;
3880 sdbc_dmchain_avail(_sd_cctl_t *cc_ent)
3883 _sd_cctl_t *anchor = cc_ent;
3885 while (cc_ent) {
3887 ASSERT(_sd_cctl_valid(cc_ent));
3889 if (cc_ent->cc_aging_dm & BAD_CHAIN_DM) {
3894 if (CENTRY_DIRTY(cc_ent)) {
3898 if (SET_CENTRY_INUSE(cc_ent)) {
3903 if ((SET_CENTRY_PAGEIO(cc_ent))) {
3905 CLEAR_CENTRY_INUSE(cc_ent);
3910 if (CENTRY_DIRTY(cc_ent)) {
3912 CLEAR_CENTRY_PAGEIO(cc_ent);
3913 CLEAR_CENTRY_INUSE(cc_ent);
3918 cc_ent->cc_flag = 0;
3919 cc_ent->cc_toflush = 0;
3921 cc_ent = cc_ent->cc_next_dm;
3925 sdbc_clear_dmchain(anchor, cc_ent);
3927 cc_ent = anchor;
3934 while (cc_ent) {
3935 (void) _sd_hash_delete((struct _sd_hash_hd *)cc_ent,
3938 mutex_enter(&cc_ent->cc_lock);
3939 if (cc_ent->cc_await_use) {
3940 cv_broadcast(&cc_ent->cc_blkcv);
3942 mutex_exit(&cc_ent->cc_lock);
3944 cc_ent->cc_creat = nsc_lbolt();
3945 cc_ent->cc_hits = 0;
3947 cc_ent = cc_ent->cc_next_dm;
3957 _sd_cctl_t *cc_ent = cc_ent_start;
3960 ASSERT(_sd_cctl_valid(cc_ent));
3962 while (cc_ent != cc_ent_end) {
3964 ASSERT(_sd_cctl_valid(cc_ent));
3966 prev_ent = cc_ent;
3967 cc_ent = cc_ent->cc_next_dm;
3979 sdbc_ins_dmqueue_front(_sd_queue_t *q, _sd_cctl_t *cc_ent)
3983 ASSERT(_sd_cctl_valid(cc_ent));
3986 cc_ent->cc_next = qhead->cc_next;
3987 cc_ent->cc_prev = qhead;
3988 qhead->cc_next->cc_prev = cc_ent;
3989 qhead->cc_next = cc_ent;
3991 cc_ent->cc_cblocks = q->sq_dmchain_cblocks;
4003 sdbc_ins_dmqueue_back(_sd_queue_t *q, _sd_cctl_t *cc_ent)
4007 ASSERT(_sd_cctl_valid(cc_ent));
4010 cc_ent->cc_next = qhead;
4011 cc_ent->cc_prev = qhead->cc_prev;
4012 qhead->cc_prev->cc_next = cc_ent;
4013 qhead->cc_prev = cc_ent;
4014 cc_ent->cc_seq = q->sq_seq++;
4016 cc_ent->cc_cblocks = q->sq_dmchain_cblocks;
4028 sdbc_remq_dmchain(_sd_queue_t *q, _sd_cctl_t *cc_ent)
4031 ASSERT(_sd_cctl_valid(cc_ent));
4034 cc_ent->cc_prev->cc_next = cc_ent->cc_next;
4035 cc_ent->cc_next->cc_prev = cc_ent->cc_prev;
4036 cc_ent->cc_next = cc_ent->cc_prev = NULL; /* defensive programming */
4037 cc_ent->cc_cblocks = -1; /* indicate not on any queue */
4052 sdbc_requeue_dmchain(_sd_queue_t *q, _sd_cctl_t *cc_ent, int mru,
4058 ASSERT(_sd_cctl_valid(cc_ent));
4064 cc_ent->cc_prev->cc_next = cc_ent->cc_next;
4065 cc_ent->cc_next->cc_prev = cc_ent->cc_prev;
4069 cc_ent->cc_next = qhead;
4070 cc_ent->cc_prev = qhead->cc_prev;
4071 qhead->cc_prev->cc_next = cc_ent;
4072 qhead->cc_prev = cc_ent;
4073 cc_ent->cc_seq = q->sq_seq++;
4077 cc_ent->cc_next = qhead->cc_next;
4078 cc_ent->cc_prev = qhead;
4079 qhead->cc_next->cc_prev = cc_ent;
4080 qhead->cc_next = cc_ent;
4081 cc_ent->cc_seq = q->sq_seq++;
4089 for (tcent = cc_ent; tcent; tcent = tcent->cc_next_dm)
4100 * sdbc_dmchain_dirty(cc_ent)
4101 * return first dirty cc_ent in dmchain, NULL if chain is not dirty
4104 sdbc_dmchain_dirty(_sd_cctl_t *cc_ent)
4106 for (/* CSTYLED */; cc_ent; cc_ent = cc_ent->cc_next_dm)
4107 if (CENTRY_DIRTY(cc_ent))
4110 return (cc_ent);
4118 sdbc_requeue_head_dm_try(_sd_cctl_t *cc_ent)
4123 if (!sdbc_dmchain_dirty(cc_ent)) {
4124 qidx = cc_ent->cc_cblocks;
4126 sdbc_requeue_dmchain(q, cc_ent, 0, 1); /* requeue head */
4315 _sd_cctl_t *cc_ent, *old_ent;
4325 cc_ent = dmc->sab_dmchain;
4327 ASSERT(_sd_cctl_valid(cc_ent));
4329 cc_ent->cc_valid = 0;
4331 if (cc_ent->cc_data)
4336 CENTRY_BLK(cc_ent) = cblk;
4338 _sd_hash_insert(cd, cblk, (struct _sd_hash_hd *)cc_ent,
4339 _sd_htable)) != cc_ent) {
4345 cc_ent = NULL;
4368 cmn_err(CE_WARN, "!cc_ent %p cd %d cblk %" NSC_SZFMT
4376 cc_ent = NULL;
4386 /* _sd_centry_release(cc_ent); */
4387 cc_ent = old_ent;
4395 cc_ent = NULL;
4405 * cc_ent from the dmchain
4408 if (cc_ent->cc_data)
4417 mutex_enter(&cc_ent->cc_lock);
4418 if (cc_ent->cc_await_use) {
4419 cv_broadcast(&cc_ent->cc_blkcv);
4421 mutex_exit(&cc_ent->cc_lock);
4423 sdbc_centry_init_dm(cc_ent);
4425 cc_ent->cc_aging_dm |= categorize_centry;
4431 return (cc_ent);
4527 _sd_cctl_t *cc_ent, *old_ent, *ccnext;
4546 for (cc_ent = (qhead->cc_next); cc_ent != qhead; cc_ent = ccnext) {
4549 cc_ent = NULL;
4554 ccnext = cc_ent->cc_next;
4556 if (cc_ent->cc_aging_dm & BAD_CHAIN_DM)
4559 if (CENTRY_DIRTY(cc_ent))
4561 if (SET_CENTRY_INUSE(cc_ent))
4564 if (CENTRY_DIRTY(cc_ent)) {
4567 CLEAR_CENTRY_INUSE(cc_ent);
4570 cc_ent->cc_flag = 0; /* CC_INUSE */
4571 cc_ent->cc_toflush = 0;
4581 cp = cc_ent->cc_prev;
4582 cn = cc_ent->cc_next;
4584 if (!_sd_cctl_valid(cc_ent) ||
4590 cc_ent, cp, cn, qp);
4593 cc_ent->cc_prev->cc_next = cc_ent->cc_next;
4594 cc_ent->cc_next->cc_prev = cc_ent->cc_prev;
4595 cc_ent->cc_next = qhead;
4596 cc_ent->cc_prev = qhead->cc_prev;
4597 qhead->cc_prev->cc_next = cc_ent;
4598 qhead->cc_prev = cc_ent;
4599 cc_ent->cc_seq = q->sq_seq++;
4607 if (_sd_hash_delete(cc_ent, _sd_htable) == 0)
4609 CENTRY_CD(cc_ent), cc_ent->cc_hits,
4610 BLK_TO_FBA_NUM(CENTRY_BLK(cc_ent)),
4611 nsc_lbolt(), cc_ent->cc_creat);
4612 cc_ent->cc_creat = nsc_lbolt();
4613 cc_ent->cc_hits = 0;
4616 if (_sd_hash_delete(cc_ent, _sd_htable) == 0) {
4618 CENTRY_CD(cc_ent),
4619 cc_ent->cc_valid,
4620 BLK_TO_FBA_NUM(CENTRY_BLK(cc_ent)),
4622 if (cc_ent->cc_await_use ||
4623 ((cd == CENTRY_CD(cc_ent)) &&
4624 (cblk == CENTRY_BLK(cc_ent))))
4625 DATA_LOG(SDF_REPLACE|ST_DL, cc_ent, 0,
4629 (void) _sd_hash_delete((struct _sd_hash_hd *)cc_ent,
4633 cc_ent->cc_creat = nsc_lbolt();
4634 cc_ent->cc_hits = 0;
4636 cc_ent->cc_valid = 0;
4638 if (cc_ent->cc_data)
4643 CENTRY_BLK(cc_ent) = cblk;
4645 _sd_hash_insert(cd, cblk, (struct _sd_hash_hd *)cc_ent,
4646 _sd_htable)) != cc_ent) {
4652 _sd_centry_release(cc_ent);
4653 cc_ent = NULL;
4676 cmn_err(CE_WARN, "!cc_ent %p cd %d cblk %"
4685 _sd_centry_release(cc_ent);
4686 cc_ent = NULL;
4696 _sd_centry_release(cc_ent);
4697 cc_ent = old_ent;
4705 _sd_centry_release(cc_ent);
4706 cc_ent = NULL;
4717 if (cc_ent->cc_await_use) {
4718 mutex_enter(&cc_ent->cc_lock);
4719 cv_broadcast(&cc_ent->cc_blkcv);
4720 mutex_exit(&cc_ent->cc_lock);
4723 sdbc_centry_init_dm(cc_ent);
4725 cc_ent->cc_aging_dm |= categorize_centry;
4728 return (cc_ent);
5070 _sd_cctl_t *cc_ent = NULL;
5106 cc_ent = handle->bh_centry;
5107 while (CENTRY_BLK(cc_ent) != FBA_TO_BLK_NUM(fba_pos))
5108 cc_ent = cc_ent->cc_chain;
5110 if (!SDBC_VALID_BITS(st_cblk_off, st_cblk_len, cc_ent))
5112 DATA_LOG(SDF_RD, cc_ent, st_cblk_off, st_cblk_len);
5115 (uint64_t)(BLK_TO_FBA_NUM(CENTRY_BLK(cc_ent)) + st_cblk_off),
5117 *(int64_t *)(cc_ent->cc_data + FBA_SIZE(st_cblk_off)),
5118 char *, *(int64_t *)(cc_ent->cc_data +
5123 cc_ent = cc_ent->cc_chain;
5126 if (!FULLY_VALID(cc_ent))
5128 DATA_LOG(SDF_RD, cc_ent, 0, BLK_FBAS);
5131 (uint64_t)BLK_TO_FBA_NUM(CENTRY_BLK(cc_ent)),
5133 char *, *(int64_t *)(cc_ent->cc_data),
5134 char *, *(int64_t *)(cc_ent->cc_data +
5139 cc_ent = cc_ent->cc_chain;
5142 if (!SDBC_VALID_BITS(0, end_cblk_len, cc_ent))
5144 DATA_LOG(SDF_RD, cc_ent, 0, end_cblk_len);
5147 (uint64_t)BLK_TO_FBA_NUM(CENTRY_BLK(cc_ent)),
5149 char *, *(int64_t *)(cc_ent->cc_data),
5150 char *, *(int64_t *)(cc_ent->cc_data +
5164 ret = _sd_doread(handle, cc_ent, fba_pos, fba_len, flag);
5177 * cc_ent - cache entry
5186 * on the cc_chain of cc_ent
5189 sdbc_doread_prefetch(_sd_cctl_t *cc_ent, nsc_off_t fba_pos, nsc_size_t fba_len)
5196 int cd = CENTRY_CD(cc_ent);
5222 cc_ent->cc_chain = cc_ra;
5270 _sd_doread(_sd_buf_handle_t *handle, _sd_cctl_t *cc_ent, nsc_off_t fba_pos,
5321 fba_len += sdbc_doread_prefetch(cc_ent, fba_pos, fba_len);
5333 cc_temp = cc_ent;
5347 if (want_bits & CENTRY_DIRTY(cc_ent))
5348 _sd_ccent_rd(cc_ent, want_bits, bp);
5350 sd_add_fba(bp, &cc_ent->cc_addr, st_cblk_off, st_cblk_len);
5353 cc_ent = cc_ent->cc_chain;
5357 if (CENTRY_DIRTY(cc_ent))
5358 _sd_ccent_rd(cc_ent, (uint_t)BLK_FBA_BITS, bp);
5360 sd_add_fba(bp, &cc_ent->cc_addr, 0, BLK_FBAS);
5363 cc_ent = cc_ent->cc_chain;
5369 if (want_bits & CENTRY_DIRTY(cc_ent))
5370 _sd_ccent_rd(cc_ent, want_bits, bp);
5372 sd_add_fba(bp, &cc_ent->cc_addr, 0, end_cblk_len);
5598 update_dirty(_sd_cctl_t *cc_ent, sdbc_cblk_fba_t st_off, sdbc_cblk_fba_t st_len)
5603 mutex_enter(&cc_ent->cc_lock);
5604 old = CENTRY_DIRTY(cc_ent);
5611 CACHE_WRITE_CANCELLATION(CENTRY_CD(cc_ent));
5615 SDBC_SET_DIRTY(st_off, st_len, cc_ent);
5617 if (CENTRY_IO_INPROGRESS(cc_ent))
5618 cc_ent->cc_flag |= CC_PEND_DIRTY;
5621 mutex_exit(&cc_ent->cc_lock);
5669 _sd_cctl_t *cc_ent = NULL;
5725 cc_ent = handle->bh_centry;
5727 while (CENTRY_BLK(cc_ent) != FBA_TO_BLK_NUM(fba_pos))
5728 cc_ent = cc_ent->cc_chain;
5731 (!queue_only && _sd_remote_store(cc_ent, fba_pos, fba_len))) {
5750 if (CENTRY_DIRTY(cc_ent) && update_dirty(cc_ent, st_cblk_off,
5754 SDBC_SET_TOFLUSH(st_cblk_off, st_cblk_len, cc_ent);
5757 SDBC_SET_DIRTY(st_cblk_off, st_cblk_len, cc_ent);
5758 cur_chain = dirty_next = cc_ent;
5762 DATA_LOG(SDF_WR, cc_ent, st_cblk_off, st_cblk_len);
5765 (BLK_TO_FBA_NUM(CENTRY_BLK(cc_ent)) + st_cblk_off),
5767 *(int64_t *)(cc_ent->cc_data + FBA_SIZE(st_cblk_off)),
5768 char *, *(int64_t *)(cc_ent->cc_data +
5772 cc_ent = cc_ent->cc_chain;
5775 if (CENTRY_DIRTY(cc_ent) && update_dirty(cc_ent, 0, BLK_FBAS)) {
5784 SDBC_SET_TOFLUSH(0, BLK_FBAS, cc_ent);
5787 SDBC_SET_DIRTY(0, BLK_FBAS, cc_ent);
5789 dirty_next->cc_dirty_next = cc_ent;
5790 dirty_next = cc_ent;
5793 cur_chain = dirty_next = cc_ent;
5797 DATA_LOG(SDF_WR, cc_ent, 0, BLK_FBAS);
5800 (uint64_t)(BLK_TO_FBA_NUM(CENTRY_BLK(cc_ent))),
5801 int, BLK_FBAS, char *, *(int64_t *)(cc_ent->cc_data),
5802 char *, *(int64_t *)(cc_ent->cc_data +
5805 cc_ent = cc_ent->cc_chain;
5816 if (CENTRY_DIRTY(cc_ent) && update_dirty(cc_ent, 0,
5826 SDBC_SET_TOFLUSH(0, end_cblk_len, cc_ent);
5829 SDBC_SET_DIRTY(0, end_cblk_len, cc_ent);
5831 dirty_next->cc_dirty_next = cc_ent;
5832 dirty_next = cc_ent;
5835 cur_chain = dirty_next = cc_ent;
5841 DATA_LOG(SDF_WR, cc_ent, 0, end_cblk_len);
5844 (uint64_t)(BLK_TO_FBA_NUM(CENTRY_BLK(cc_ent))),
5845 int, end_cblk_len, char *, *(int64_t *)(cc_ent->cc_data),
5846 char *, *(int64_t *)(cc_ent->cc_data +
5889 _sd_cctl_t *cc_ent;
5894 cc_ent = handle->bh_centry;
5896 fba_pos = BLK_TO_FBA_NUM(CENTRY_BLK(cc_ent)); /* 1st block */
5898 dirty = cc_ent->cc_toflush;
5899 cc_ent->cc_toflush = 0;
5931 cc_ent = cc_ent->cc_chain;
5948 _sd_remote_store(_sd_cctl_t *cc_ent, nsc_off_t fba_pos, nsc_size_t fba_len)
5968 ss_res = cc_ent->cc_write->sc_res;
5970 cc_ent->cc_data + FBA_SIZE(st_cblk_off), FBA_SIZE(st_cblk_len),
5975 SDTRACE(SDF_REFLECT, CENTRY_CD(cc_ent), fba_len,
5980 cc_ent = cc_ent->cc_chain;
5984 if (SSOP_WRITE_CBLOCK(sdbc_safestore, ss_res, cc_ent->cc_data,
5989 SDTRACE(SDF_REFLECT, CENTRY_CD(cc_ent), fba_len,
5994 cc_ent = cc_ent->cc_chain;
5999 cc_ent->cc_data, FBA_SIZE(end_cblk_len), 0)) {
6003 SDTRACE(SDF_REFLECT, CENTRY_CD(cc_ent), fba_len,
6219 _sd_cctl_t *cc_ent;
6251 cc_ent = handle->bh_centry;
6252 while (CENTRY_BLK(cc_ent) != FBA_TO_BLK_NUM(fba_pos))
6253 cc_ent = cc_ent->cc_chain;
6265 bzero(cc_ent->cc_data + FBA_SIZE(st_cblk_off), FBA_SIZE(st_cblk_len));
6267 cc_ent = cc_ent->cc_chain;
6270 bzero(cc_ent->cc_data, CACHE_BLOCK_SIZE);
6271 cc_ent = cc_ent->cc_chain;
6274 bzero(cc_ent->cc_data, FBA_SIZE(cur_fba_len));
6828 _sd_cctl_t *cc_ent, **cc_lst, **cc_tmp, *nxt;
6842 if (cc_ent =
6844 if (!CENTRY_PINNED(cc_ent))
6848 * remove cc_ent from failed links
6856 while (*cc_tmp != cc_ent) {
6866 nxt = cc_ent->cc_dirty_next;
6876 BLK_TO_FBA_NUM(CENTRY_BLK(cc_ent)),
6883 mutex_enter(&cc_ent->cc_lock);
6884 cc_ent->cc_valid = cc_ent->cc_dirty = 0;
6885 cc_ent->cc_flag &= ~(CC_QHEAD|CC_PEND_DIRTY|CC_PINNED);
6886 cc_ent->cc_dirty_link = NULL;
6887 wctl = cc_ent->cc_write;
6888 cc_ent->cc_write = NULL;
6890 mutex_exit(&cc_ent->cc_lock);
6902 _sd_requeue_head(cc_ent);