OpenZFS 7531 - Assign correct flags to prefetched buffers
Reviewed by: Matthew Ahrens <mahrens@delphix.com> Reviewed by: Prakash Surya <prakash.surya@delphix.com> Authored by: abraunegg <alex.braunegg@gmail.com> Approved by: Dan McDonald <danmcd@joyent.com> Ported-by: Brian Behlendorf <behlendorf1@llnl.gov> OpenZFS-issue: https://www.illumos.org/issues/7531 OpenZFS-commit: https://github.com/openzfs/openzfs/commit/468008cb
This commit is contained in:
parent
a5c8119eba
commit
59511072b4
|
@ -348,6 +348,12 @@ boolean_t dbuf_is_metadata(dmu_buf_impl_t *db);
|
||||||
(dbuf_is_metadata(_db) && \
|
(dbuf_is_metadata(_db) && \
|
||||||
((_db)->db_objset->os_secondary_cache == ZFS_CACHE_METADATA)))
|
((_db)->db_objset->os_secondary_cache == ZFS_CACHE_METADATA)))
|
||||||
|
|
||||||
|
#define DNODE_LEVEL_IS_L2CACHEABLE(_dn, _level) \
|
||||||
|
((_dn)->dn_objset->os_secondary_cache == ZFS_CACHE_ALL || \
|
||||||
|
(((_level) > 0 || \
|
||||||
|
DMU_OT_IS_METADATA((_dn)->dn_handle->dnh_dnode->dn_type)) && \
|
||||||
|
((_dn)->dn_objset->os_secondary_cache == ZFS_CACHE_METADATA)))
|
||||||
|
|
||||||
#ifdef ZFS_DEBUG
|
#ifdef ZFS_DEBUG
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -2483,6 +2483,10 @@ dbuf_prefetch_indirect_done(zio_t *zio, arc_buf_t *abuf, void *private)
|
||||||
arc_flags_t iter_aflags = ARC_FLAG_NOWAIT;
|
arc_flags_t iter_aflags = ARC_FLAG_NOWAIT;
|
||||||
zbookmark_phys_t zb;
|
zbookmark_phys_t zb;
|
||||||
|
|
||||||
|
/* flag if L2ARC eligible, l2arc_noprefetch then decides */
|
||||||
|
if (dpa->dpa_aflags & ARC_FLAG_L2CACHE)
|
||||||
|
iter_aflags |= ARC_FLAG_L2CACHE;
|
||||||
|
|
||||||
ASSERT3U(dpa->dpa_curlevel, ==, BP_GET_LEVEL(bp));
|
ASSERT3U(dpa->dpa_curlevel, ==, BP_GET_LEVEL(bp));
|
||||||
|
|
||||||
SET_BOOKMARK(&zb, dpa->dpa_zb.zb_objset,
|
SET_BOOKMARK(&zb, dpa->dpa_zb.zb_objset,
|
||||||
|
@ -2596,6 +2600,10 @@ dbuf_prefetch(dnode_t *dn, int64_t level, uint64_t blkid, zio_priority_t prio,
|
||||||
dpa->dpa_epbs = epbs;
|
dpa->dpa_epbs = epbs;
|
||||||
dpa->dpa_zio = pio;
|
dpa->dpa_zio = pio;
|
||||||
|
|
||||||
|
/* flag if L2ARC eligible, l2arc_noprefetch then decides */
|
||||||
|
if (DNODE_LEVEL_IS_L2CACHEABLE(dn, level))
|
||||||
|
dpa->dpa_aflags |= ARC_FLAG_L2CACHE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we have the indirect just above us, no need to do the asynchronous
|
* If we have the indirect just above us, no need to do the asynchronous
|
||||||
* prefetch chain; we'll just run the last step ourselves. If we're at
|
* prefetch chain; we'll just run the last step ourselves. If we're at
|
||||||
|
@ -2611,6 +2619,10 @@ dbuf_prefetch(dnode_t *dn, int64_t level, uint64_t blkid, zio_priority_t prio,
|
||||||
arc_flags_t iter_aflags = ARC_FLAG_NOWAIT;
|
arc_flags_t iter_aflags = ARC_FLAG_NOWAIT;
|
||||||
zbookmark_phys_t zb;
|
zbookmark_phys_t zb;
|
||||||
|
|
||||||
|
/* flag if L2ARC eligible, l2arc_noprefetch then decides */
|
||||||
|
if (DNODE_LEVEL_IS_L2CACHEABLE(dn, level))
|
||||||
|
iter_aflags |= ARC_FLAG_L2CACHE;
|
||||||
|
|
||||||
SET_BOOKMARK(&zb, ds != NULL ? ds->ds_object : DMU_META_OBJSET,
|
SET_BOOKMARK(&zb, ds != NULL ? ds->ds_object : DMU_META_OBJSET,
|
||||||
dn->dn_object, curlevel, curblkid);
|
dn->dn_object, curlevel, curblkid);
|
||||||
(void) arc_read(dpa->dpa_zio, dpa->dpa_spa,
|
(void) arc_read(dpa->dpa_zio, dpa->dpa_spa,
|
||||||
|
|
Loading…
Reference in New Issue