MCPcopy Create free account
hub / github.com/F-Stack/f-stack / dbuf_issue_final_prefetch

Function dbuf_issue_final_prefetch

freebsd/contrib/openzfs/module/zfs/dbuf.c:3095–3122  ·  view source on GitHub ↗

* Actually issue the prefetch read for the block given. */

Source from the content-addressed store, hash-verified

3093 * Actually issue the prefetch read for the block given.
3094 */
3095static void
3096dbuf_issue_final_prefetch(dbuf_prefetch_arg_t *dpa, blkptr_t *bp)
3097{
3098 ASSERT(!BP_IS_REDACTED(bp) ||
3099 dsl_dataset_feature_is_active(
3100 dpa->dpa_dnode->dn_objset->os_dsl_dataset,
3101 SPA_FEATURE_REDACTED_DATASETS));
3102
3103 if (BP_IS_HOLE(bp) || BP_IS_EMBEDDED(bp) || BP_IS_REDACTED(bp))
3104 return (dbuf_prefetch_fini(dpa, B_FALSE));
3105
3106 int zio_flags = ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE;
3107 arc_flags_t aflags =
3108 dpa->dpa_aflags | ARC_FLAG_NOWAIT | ARC_FLAG_PREFETCH |
3109 ARC_FLAG_NO_BUF;
3110
3111 /* dnodes are always read as raw and then converted later */
3112 if (BP_GET_TYPE(bp) == DMU_OT_DNODE && BP_IS_PROTECTED(bp) &&
3113 dpa->dpa_curlevel == 0)
3114 zio_flags |= ZIO_FLAG_RAW;
3115
3116 ASSERT3U(dpa->dpa_curlevel, ==, BP_GET_LEVEL(bp));
3117 ASSERT3U(dpa->dpa_curlevel, ==, dpa->dpa_zb.zb_level);
3118 ASSERT(dpa->dpa_zio != NULL);
3119 (void) arc_read(dpa->dpa_zio, dpa->dpa_spa, bp,
3120 dbuf_issue_final_prefetch_done, dpa,
3121 dpa->dpa_prio, zio_flags, &aflags, &dpa->dpa_zb);
3122}
3123
3124/*
3125 * Called when an indirect block above our prefetch target is read in. This

Callers 2

dbuf_prefetch_implFunction · 0.85

Calls 3

dbuf_prefetch_finiFunction · 0.85
arc_readFunction · 0.85

Tested by

no test coverage detected