View | Details | Raw Unified | Return to bug 203473 | Differences between
and this patch

Collapse All | Expand All

(-)b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c (-10 / +21 lines)
Lines 1134-1139 static boolean_t l2arc_transform_buf(arc_buf_hdr_t *, boolean_t); Link Here
1134
static void l2arc_decompress_zio(zio_t *, arc_buf_hdr_t *, enum zio_compress);
1134
static void l2arc_decompress_zio(zio_t *, arc_buf_hdr_t *, enum zio_compress);
1135
static void l2arc_release_cdata_buf(arc_buf_hdr_t *);
1135
static void l2arc_release_cdata_buf(arc_buf_hdr_t *);
1136
1136
1137
static void
1138
l2arc_trim(const arc_buf_hdr_t *hdr)
1139
{
1140
	l2arc_dev_t *dev = hdr->b_l2hdr.b_dev;
1141
1142
	ASSERT(HDR_HAS_L2HDR(hdr));
1143
	ASSERT(MUTEX_HELD(&dev->l2ad_mtx));
1144
1145
	if (hdr->b_l2hdr.b_daddr == L2ARC_ADDR_UNSET)
1146
		return;
1147
	if (hdr->b_l2hdr.b_asize != 0) {
1148
		trim_map_free(dev->l2ad_vdev, hdr->b_l2hdr.b_daddr,
1149
		    hdr->b_l2hdr.b_asize, 0);
1150
	} else {
1151
		ASSERT3U(hdr->b_l2hdr.b_compress, ==, ZIO_COMPRESS_EMPTY);
1152
	}
1153
}
1154
1137
static uint64_t
1155
static uint64_t
1138
buf_hash(uint64_t spa, const dva_t *dva, uint64_t birth)
1156
buf_hash(uint64_t spa, const dva_t *dva, uint64_t birth)
1139
{
1157
{
Lines 2449-2458 arc_hdr_destroy(arc_buf_hdr_t *hdr) Link Here
2449
		 * want to re-destroy the header's L2 portion.
2467
		 * want to re-destroy the header's L2 portion.
2450
		 */
2468
		 */
2451
		if (HDR_HAS_L2HDR(hdr)) {
2469
		if (HDR_HAS_L2HDR(hdr)) {
2452
			if (hdr->b_l2hdr.b_daddr != L2ARC_ADDR_UNSET)
2470
			l2arc_trim(hdr);
2453
				trim_map_free(dev->l2ad_vdev,
2454
				    hdr->b_l2hdr.b_daddr,
2455
				    hdr->b_l2hdr.b_asize, 0);
2456
			arc_hdr_l2hdr_destroy(hdr);
2471
			arc_hdr_l2hdr_destroy(hdr);
2457
		}
2472
		}
2458
2473
Lines 4831-4840 arc_release(arc_buf_t *buf, void *tag) Link Here
4831
		 * to acquire the l2ad_mtx.
4846
		 * to acquire the l2ad_mtx.
4832
		 */
4847
		 */
4833
		if (HDR_HAS_L2HDR(hdr)) {
4848
		if (HDR_HAS_L2HDR(hdr)) {
4834
			if (hdr->b_l2hdr.b_daddr != L2ARC_ADDR_UNSET)
4849
			l2arc_trim(hdr);
4835
				trim_map_free(hdr->b_l2hdr.b_dev->l2ad_vdev,
4836
				    hdr->b_l2hdr.b_daddr,
4837
				    hdr->b_l2hdr.b_asize, 0);
4838
			arc_hdr_l2hdr_destroy(hdr);
4850
			arc_hdr_l2hdr_destroy(hdr);
4839
		}
4851
		}
4840
4852
Lines 5996-6003 top: Link Here
5996
			 * Error - drop L2ARC entry.
6008
			 * Error - drop L2ARC entry.
5997
			 */
6009
			 */
5998
			list_remove(buflist, hdr);
6010
			list_remove(buflist, hdr);
5999
			trim_map_free(hdr->b_l2hdr.b_dev->l2ad_vdev,
6011
			l2arc_trim(hdr);
6000
			    hdr->b_l2hdr.b_daddr, hdr->b_l2hdr.b_asize, 0);
6001
			hdr->b_flags &= ~ARC_FLAG_HAS_L2HDR;
6012
			hdr->b_flags &= ~ARC_FLAG_HAS_L2HDR;
6002
6013
6003
			ARCSTAT_INCR(arcstat_l2_asize, -hdr->b_l2hdr.b_asize);
6014
			ARCSTAT_INCR(arcstat_l2_asize, -hdr->b_l2hdr.b_asize);

Return to bug 203473