Loading drivers/md/dm-thin-metadata.c +5 −0 Original line number Diff line number Diff line Loading @@ -1809,3 +1809,8 @@ bool dm_pool_metadata_needs_check(struct dm_pool_metadata *pmd) return needs_check; } void dm_pool_issue_prefetches(struct dm_pool_metadata *pmd) { dm_tm_issue_prefetches(pmd->tm); } drivers/md/dm-thin-metadata.h +5 −0 Original line number Diff line number Diff line Loading @@ -213,6 +213,11 @@ int dm_pool_register_metadata_threshold(struct dm_pool_metadata *pmd, int dm_pool_metadata_set_needs_check(struct dm_pool_metadata *pmd); bool dm_pool_metadata_needs_check(struct dm_pool_metadata *pmd); /* * Issue any prefetches that may be useful. */ void dm_pool_issue_prefetches(struct dm_pool_metadata *pmd); /*----------------------------------------------------------------*/ #endif drivers/md/dm-thin.c +6 −4 Original line number Diff line number Diff line Loading @@ -1526,6 +1526,7 @@ static void process_thin_deferred_bios(struct thin_c *tc) struct bio *bio; struct bio_list bios; struct blk_plug plug; unsigned count = 0; if (tc->requeue_mode) { requeue_bio_list(tc, &tc->deferred_bio_list); Loading Loading @@ -1567,6 +1568,10 @@ static void process_thin_deferred_bios(struct thin_c *tc) pool->process_discard(tc, bio); else pool->process_bio(tc, bio); if ((count++ & 127) == 0) { dm_pool_issue_prefetches(pool->pmd); } } blk_finish_plug(&plug); } Loading Loading @@ -1652,6 +1657,7 @@ static void do_worker(struct work_struct *ws) { struct pool *pool = container_of(ws, struct pool, worker); dm_pool_issue_prefetches(pool->pmd); process_prepared(pool, &pool->prepared_mappings, &pool->process_prepared_mapping); process_prepared(pool, &pool->prepared_discards, &pool->process_prepared_discard); process_deferred_bios(pool); Loading Loading @@ -1996,10 +2002,6 @@ static int thin_bio_map(struct dm_target *ti, struct bio *bio) /* fall through */ case -EWOULDBLOCK: /* * In future, the failed dm_thin_find_block above could * provide the hint to load the metadata into cache. */ thin_defer_bio(tc, bio); cell_defer_no_holder_no_free(tc, &cell1); return DM_MAPIO_SUBMITTED; Loading Loading
drivers/md/dm-thin-metadata.c +5 −0 Original line number Diff line number Diff line Loading @@ -1809,3 +1809,8 @@ bool dm_pool_metadata_needs_check(struct dm_pool_metadata *pmd) return needs_check; } void dm_pool_issue_prefetches(struct dm_pool_metadata *pmd) { dm_tm_issue_prefetches(pmd->tm); }
drivers/md/dm-thin-metadata.h +5 −0 Original line number Diff line number Diff line Loading @@ -213,6 +213,11 @@ int dm_pool_register_metadata_threshold(struct dm_pool_metadata *pmd, int dm_pool_metadata_set_needs_check(struct dm_pool_metadata *pmd); bool dm_pool_metadata_needs_check(struct dm_pool_metadata *pmd); /* * Issue any prefetches that may be useful. */ void dm_pool_issue_prefetches(struct dm_pool_metadata *pmd); /*----------------------------------------------------------------*/ #endif
drivers/md/dm-thin.c +6 −4 Original line number Diff line number Diff line Loading @@ -1526,6 +1526,7 @@ static void process_thin_deferred_bios(struct thin_c *tc) struct bio *bio; struct bio_list bios; struct blk_plug plug; unsigned count = 0; if (tc->requeue_mode) { requeue_bio_list(tc, &tc->deferred_bio_list); Loading Loading @@ -1567,6 +1568,10 @@ static void process_thin_deferred_bios(struct thin_c *tc) pool->process_discard(tc, bio); else pool->process_bio(tc, bio); if ((count++ & 127) == 0) { dm_pool_issue_prefetches(pool->pmd); } } blk_finish_plug(&plug); } Loading Loading @@ -1652,6 +1657,7 @@ static void do_worker(struct work_struct *ws) { struct pool *pool = container_of(ws, struct pool, worker); dm_pool_issue_prefetches(pool->pmd); process_prepared(pool, &pool->prepared_mappings, &pool->process_prepared_mapping); process_prepared(pool, &pool->prepared_discards, &pool->process_prepared_discard); process_deferred_bios(pool); Loading Loading @@ -1996,10 +2002,6 @@ static int thin_bio_map(struct dm_target *ti, struct bio *bio) /* fall through */ case -EWOULDBLOCK: /* * In future, the failed dm_thin_find_block above could * provide the hint to load the metadata into cache. */ thin_defer_bio(tc, bio); cell_defer_no_holder_no_free(tc, &cell1); return DM_MAPIO_SUBMITTED; Loading