brintos

brintos / linux-shallow public Read only

0
0
Text · 90.1 KiB · 3a34274 Raw
3158 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright (C) 2011, 2012 STRATO.  All rights reserved.4 */5 6#include <linux/blkdev.h>7#include <linux/ratelimit.h>8#include <linux/sched/mm.h>9#include <crypto/hash.h>10#include "ctree.h"11#include "discard.h"12#include "volumes.h"13#include "disk-io.h"14#include "ordered-data.h"15#include "transaction.h"16#include "backref.h"17#include "extent_io.h"18#include "dev-replace.h"19#include "raid56.h"20#include "block-group.h"21#include "zoned.h"22#include "fs.h"23#include "accessors.h"24#include "file-item.h"25#include "scrub.h"26#include "raid-stripe-tree.h"27 28/*29 * This is only the first step towards a full-features scrub. It reads all30 * extent and super block and verifies the checksums. In case a bad checksum31 * is found or the extent cannot be read, good data will be written back if32 * any can be found.33 *34 * Future enhancements:35 *  - In case an unrepairable extent is encountered, track which files are36 *    affected and report them37 *  - track and record media errors, throw out bad devices38 *  - add a mode to also read unallocated space39 */40 41struct scrub_ctx;42 43/*44 * The following value only influences the performance.45 *46 * This determines how many stripes would be submitted in one go,47 * which is 512KiB (BTRFS_STRIPE_LEN * SCRUB_STRIPES_PER_GROUP).48 */49#define SCRUB_STRIPES_PER_GROUP		850 51/*52 * How many groups we have for each sctx.53 *54 * This would be 8M per device, the same value as the old scrub in-flight bios55 * size limit.56 */57#define SCRUB_GROUPS_PER_SCTX		1658 59#define SCRUB_TOTAL_STRIPES		(SCRUB_GROUPS_PER_SCTX * SCRUB_STRIPES_PER_GROUP)60 61/*62 * The following value times PAGE_SIZE needs to be large enough to match the63 * largest node/leaf/sector size that shall be supported.64 */65#define SCRUB_MAX_SECTORS_PER_BLOCK	(BTRFS_MAX_METADATA_BLOCKSIZE / SZ_4K)66 67/* Represent one sector and its needed info to verify the content. */68struct scrub_sector_verification {69	bool is_metadata;70 71	union {72		/*73		 * Csum pointer for data csum verification.  Should point to a74		 * sector csum inside scrub_stripe::csums.75		 *76		 * NULL if this data sector has no csum.77		 */78		u8 *csum;79 80		/*81		 * Extra info for metadata verification.  All sectors inside a82		 * tree block share the same generation.83		 */84		u64 generation;85	};86};87 88enum scrub_stripe_flags {89	/* Set when @mirror_num, @dev, @physical and @logical are set. */90	SCRUB_STRIPE_FLAG_INITIALIZED,91 92	/* Set when the read-repair is finished. */93	SCRUB_STRIPE_FLAG_REPAIR_DONE,94 95	/*96	 * Set for data stripes if it's triggered from P/Q stripe.97	 * During such scrub, we should not report errors in data stripes, nor98	 * update the accounting.99	 */100	SCRUB_STRIPE_FLAG_NO_REPORT,101};102 103#define SCRUB_STRIPE_PAGES		(BTRFS_STRIPE_LEN / PAGE_SIZE)104 105/*106 * Represent one contiguous range with a length of BTRFS_STRIPE_LEN.107 */108struct scrub_stripe {109	struct scrub_ctx *sctx;110	struct btrfs_block_group *bg;111 112	struct page *pages[SCRUB_STRIPE_PAGES];113	struct scrub_sector_verification *sectors;114 115	struct btrfs_device *dev;116	u64 logical;117	u64 physical;118 119	u16 mirror_num;120 121	/* Should be BTRFS_STRIPE_LEN / sectorsize. */122	u16 nr_sectors;123 124	/*125	 * How many data/meta extents are in this stripe.  Only for scrub status126	 * reporting purposes.127	 */128	u16 nr_data_extents;129	u16 nr_meta_extents;130 131	atomic_t pending_io;132	wait_queue_head_t io_wait;133	wait_queue_head_t repair_wait;134 135	/*136	 * Indicate the states of the stripe.  Bits are defined in137	 * scrub_stripe_flags enum.138	 */139	unsigned long state;140 141	/* Indicate which sectors are covered by extent items. */142	unsigned long extent_sector_bitmap;143 144	/*145	 * The errors hit during the initial read of the stripe.146	 *147	 * Would be utilized for error reporting and repair.148	 *149	 * The remaining init_nr_* records the number of errors hit, only used150	 * by error reporting.151	 */152	unsigned long init_error_bitmap;153	unsigned int init_nr_io_errors;154	unsigned int init_nr_csum_errors;155	unsigned int init_nr_meta_errors;156 157	/*158	 * The following error bitmaps are all for the current status.159	 * Every time we submit a new read, these bitmaps may be updated.160	 *161	 * error_bitmap = io_error_bitmap | csum_error_bitmap | meta_error_bitmap;162	 *163	 * IO and csum errors can happen for both metadata and data.164	 */165	unsigned long error_bitmap;166	unsigned long io_error_bitmap;167	unsigned long csum_error_bitmap;168	unsigned long meta_error_bitmap;169 170	/* For writeback (repair or replace) error reporting. */171	unsigned long write_error_bitmap;172 173	/* Writeback can be concurrent, thus we need to protect the bitmap. */174	spinlock_t write_error_lock;175 176	/*177	 * Checksum for the whole stripe if this stripe is inside a data block178	 * group.179	 */180	u8 *csums;181 182	struct work_struct work;183};184 185struct scrub_ctx {186	struct scrub_stripe	stripes[SCRUB_TOTAL_STRIPES];187	struct scrub_stripe	*raid56_data_stripes;188	struct btrfs_fs_info	*fs_info;189	struct btrfs_path	extent_path;190	struct btrfs_path	csum_path;191	int			first_free;192	int			cur_stripe;193	atomic_t		cancel_req;194	int			readonly;195 196	/* State of IO submission throttling affecting the associated device */197	ktime_t			throttle_deadline;198	u64			throttle_sent;199 200	int			is_dev_replace;201	u64			write_pointer;202 203	struct mutex            wr_lock;204	struct btrfs_device     *wr_tgtdev;205 206	/*207	 * statistics208	 */209	struct btrfs_scrub_progress stat;210	spinlock_t		stat_lock;211 212	/*213	 * Use a ref counter to avoid use-after-free issues. Scrub workers214	 * decrement bios_in_flight and workers_pending and then do a wakeup215	 * on the list_wait wait queue. We must ensure the main scrub task216	 * doesn't free the scrub context before or while the workers are217	 * doing the wakeup() call.218	 */219	refcount_t              refs;220};221 222struct scrub_warning {223	struct btrfs_path	*path;224	u64			extent_item_size;225	const char		*errstr;226	u64			physical;227	u64			logical;228	struct btrfs_device	*dev;229};230 231static void release_scrub_stripe(struct scrub_stripe *stripe)232{233	if (!stripe)234		return;235 236	for (int i = 0; i < SCRUB_STRIPE_PAGES; i++) {237		if (stripe->pages[i])238			__free_page(stripe->pages[i]);239		stripe->pages[i] = NULL;240	}241	kfree(stripe->sectors);242	kfree(stripe->csums);243	stripe->sectors = NULL;244	stripe->csums = NULL;245	stripe->sctx = NULL;246	stripe->state = 0;247}248 249static int init_scrub_stripe(struct btrfs_fs_info *fs_info,250			     struct scrub_stripe *stripe)251{252	int ret;253 254	memset(stripe, 0, sizeof(*stripe));255 256	stripe->nr_sectors = BTRFS_STRIPE_LEN >> fs_info->sectorsize_bits;257	stripe->state = 0;258 259	init_waitqueue_head(&stripe->io_wait);260	init_waitqueue_head(&stripe->repair_wait);261	atomic_set(&stripe->pending_io, 0);262	spin_lock_init(&stripe->write_error_lock);263 264	ret = btrfs_alloc_page_array(SCRUB_STRIPE_PAGES, stripe->pages, false);265	if (ret < 0)266		goto error;267 268	stripe->sectors = kcalloc(stripe->nr_sectors,269				  sizeof(struct scrub_sector_verification),270				  GFP_KERNEL);271	if (!stripe->sectors)272		goto error;273 274	stripe->csums = kcalloc(BTRFS_STRIPE_LEN >> fs_info->sectorsize_bits,275				fs_info->csum_size, GFP_KERNEL);276	if (!stripe->csums)277		goto error;278	return 0;279error:280	release_scrub_stripe(stripe);281	return -ENOMEM;282}283 284static void wait_scrub_stripe_io(struct scrub_stripe *stripe)285{286	wait_event(stripe->io_wait, atomic_read(&stripe->pending_io) == 0);287}288 289static void scrub_put_ctx(struct scrub_ctx *sctx);290 291static void __scrub_blocked_if_needed(struct btrfs_fs_info *fs_info)292{293	while (atomic_read(&fs_info->scrub_pause_req)) {294		mutex_unlock(&fs_info->scrub_lock);295		wait_event(fs_info->scrub_pause_wait,296		   atomic_read(&fs_info->scrub_pause_req) == 0);297		mutex_lock(&fs_info->scrub_lock);298	}299}300 301static void scrub_pause_on(struct btrfs_fs_info *fs_info)302{303	atomic_inc(&fs_info->scrubs_paused);304	wake_up(&fs_info->scrub_pause_wait);305}306 307static void scrub_pause_off(struct btrfs_fs_info *fs_info)308{309	mutex_lock(&fs_info->scrub_lock);310	__scrub_blocked_if_needed(fs_info);311	atomic_dec(&fs_info->scrubs_paused);312	mutex_unlock(&fs_info->scrub_lock);313 314	wake_up(&fs_info->scrub_pause_wait);315}316 317static void scrub_blocked_if_needed(struct btrfs_fs_info *fs_info)318{319	scrub_pause_on(fs_info);320	scrub_pause_off(fs_info);321}322 323static noinline_for_stack void scrub_free_ctx(struct scrub_ctx *sctx)324{325	int i;326 327	if (!sctx)328		return;329 330	for (i = 0; i < SCRUB_TOTAL_STRIPES; i++)331		release_scrub_stripe(&sctx->stripes[i]);332 333	kvfree(sctx);334}335 336static void scrub_put_ctx(struct scrub_ctx *sctx)337{338	if (refcount_dec_and_test(&sctx->refs))339		scrub_free_ctx(sctx);340}341 342static noinline_for_stack struct scrub_ctx *scrub_setup_ctx(343		struct btrfs_fs_info *fs_info, int is_dev_replace)344{345	struct scrub_ctx *sctx;346	int		i;347 348	/* Since sctx has inline 128 stripes, it can go beyond 64K easily.  Use349	 * kvzalloc().350	 */351	sctx = kvzalloc(sizeof(*sctx), GFP_KERNEL);352	if (!sctx)353		goto nomem;354	refcount_set(&sctx->refs, 1);355	sctx->is_dev_replace = is_dev_replace;356	sctx->fs_info = fs_info;357	sctx->extent_path.search_commit_root = 1;358	sctx->extent_path.skip_locking = 1;359	sctx->csum_path.search_commit_root = 1;360	sctx->csum_path.skip_locking = 1;361	for (i = 0; i < SCRUB_TOTAL_STRIPES; i++) {362		int ret;363 364		ret = init_scrub_stripe(fs_info, &sctx->stripes[i]);365		if (ret < 0)366			goto nomem;367		sctx->stripes[i].sctx = sctx;368	}369	sctx->first_free = 0;370	atomic_set(&sctx->cancel_req, 0);371 372	spin_lock_init(&sctx->stat_lock);373	sctx->throttle_deadline = 0;374 375	mutex_init(&sctx->wr_lock);376	if (is_dev_replace) {377		WARN_ON(!fs_info->dev_replace.tgtdev);378		sctx->wr_tgtdev = fs_info->dev_replace.tgtdev;379	}380 381	return sctx;382 383nomem:384	scrub_free_ctx(sctx);385	return ERR_PTR(-ENOMEM);386}387 388static int scrub_print_warning_inode(u64 inum, u64 offset, u64 num_bytes,389				     u64 root, void *warn_ctx)390{391	u32 nlink;392	int ret;393	int i;394	unsigned nofs_flag;395	struct extent_buffer *eb;396	struct btrfs_inode_item *inode_item;397	struct scrub_warning *swarn = warn_ctx;398	struct btrfs_fs_info *fs_info = swarn->dev->fs_info;399	struct inode_fs_paths *ipath = NULL;400	struct btrfs_root *local_root;401	struct btrfs_key key;402 403	local_root = btrfs_get_fs_root(fs_info, root, true);404	if (IS_ERR(local_root)) {405		ret = PTR_ERR(local_root);406		goto err;407	}408 409	/*410	 * this makes the path point to (inum INODE_ITEM ioff)411	 */412	key.objectid = inum;413	key.type = BTRFS_INODE_ITEM_KEY;414	key.offset = 0;415 416	ret = btrfs_search_slot(NULL, local_root, &key, swarn->path, 0, 0);417	if (ret) {418		btrfs_put_root(local_root);419		btrfs_release_path(swarn->path);420		goto err;421	}422 423	eb = swarn->path->nodes[0];424	inode_item = btrfs_item_ptr(eb, swarn->path->slots[0],425					struct btrfs_inode_item);426	nlink = btrfs_inode_nlink(eb, inode_item);427	btrfs_release_path(swarn->path);428 429	/*430	 * init_path might indirectly call vmalloc, or use GFP_KERNEL. Scrub431	 * uses GFP_NOFS in this context, so we keep it consistent but it does432	 * not seem to be strictly necessary.433	 */434	nofs_flag = memalloc_nofs_save();435	ipath = init_ipath(4096, local_root, swarn->path);436	memalloc_nofs_restore(nofs_flag);437	if (IS_ERR(ipath)) {438		btrfs_put_root(local_root);439		ret = PTR_ERR(ipath);440		ipath = NULL;441		goto err;442	}443	ret = paths_from_inode(inum, ipath);444 445	if (ret < 0)446		goto err;447 448	/*449	 * we deliberately ignore the bit ipath might have been too small to450	 * hold all of the paths here451	 */452	for (i = 0; i < ipath->fspath->elem_cnt; ++i)453		btrfs_warn_in_rcu(fs_info,454"%s at logical %llu on dev %s, physical %llu, root %llu, inode %llu, offset %llu, length %u, links %u (path: %s)",455				  swarn->errstr, swarn->logical,456				  btrfs_dev_name(swarn->dev),457				  swarn->physical,458				  root, inum, offset,459				  fs_info->sectorsize, nlink,460				  (char *)(unsigned long)ipath->fspath->val[i]);461 462	btrfs_put_root(local_root);463	free_ipath(ipath);464	return 0;465 466err:467	btrfs_warn_in_rcu(fs_info,468			  "%s at logical %llu on dev %s, physical %llu, root %llu, inode %llu, offset %llu: path resolving failed with ret=%d",469			  swarn->errstr, swarn->logical,470			  btrfs_dev_name(swarn->dev),471			  swarn->physical,472			  root, inum, offset, ret);473 474	free_ipath(ipath);475	return 0;476}477 478static void scrub_print_common_warning(const char *errstr, struct btrfs_device *dev,479				       bool is_super, u64 logical, u64 physical)480{481	struct btrfs_fs_info *fs_info = dev->fs_info;482	struct btrfs_path *path;483	struct btrfs_key found_key;484	struct extent_buffer *eb;485	struct btrfs_extent_item *ei;486	struct scrub_warning swarn;487	u64 flags = 0;488	u32 item_size;489	int ret;490 491	/* Super block error, no need to search extent tree. */492	if (is_super) {493		btrfs_warn_in_rcu(fs_info, "%s on device %s, physical %llu",494				  errstr, btrfs_dev_name(dev), physical);495		return;496	}497	path = btrfs_alloc_path();498	if (!path)499		return;500 501	swarn.physical = physical;502	swarn.logical = logical;503	swarn.errstr = errstr;504	swarn.dev = NULL;505 506	ret = extent_from_logical(fs_info, swarn.logical, path, &found_key,507				  &flags);508	if (ret < 0)509		goto out;510 511	swarn.extent_item_size = found_key.offset;512 513	eb = path->nodes[0];514	ei = btrfs_item_ptr(eb, path->slots[0], struct btrfs_extent_item);515	item_size = btrfs_item_size(eb, path->slots[0]);516 517	if (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK) {518		unsigned long ptr = 0;519		u8 ref_level;520		u64 ref_root;521 522		while (true) {523			ret = tree_backref_for_extent(&ptr, eb, &found_key, ei,524						      item_size, &ref_root,525						      &ref_level);526			if (ret < 0) {527				btrfs_warn(fs_info,528				"failed to resolve tree backref for logical %llu: %d",529						  swarn.logical, ret);530				break;531			}532			if (ret > 0)533				break;534			btrfs_warn_in_rcu(fs_info,535"%s at logical %llu on dev %s, physical %llu: metadata %s (level %d) in tree %llu",536				errstr, swarn.logical, btrfs_dev_name(dev),537				swarn.physical, (ref_level ? "node" : "leaf"),538				ref_level, ref_root);539		}540		btrfs_release_path(path);541	} else {542		struct btrfs_backref_walk_ctx ctx = { 0 };543 544		btrfs_release_path(path);545 546		ctx.bytenr = found_key.objectid;547		ctx.extent_item_pos = swarn.logical - found_key.objectid;548		ctx.fs_info = fs_info;549 550		swarn.path = path;551		swarn.dev = dev;552 553		iterate_extent_inodes(&ctx, true, scrub_print_warning_inode, &swarn);554	}555 556out:557	btrfs_free_path(path);558}559 560static int fill_writer_pointer_gap(struct scrub_ctx *sctx, u64 physical)561{562	int ret = 0;563	u64 length;564 565	if (!btrfs_is_zoned(sctx->fs_info))566		return 0;567 568	if (!btrfs_dev_is_sequential(sctx->wr_tgtdev, physical))569		return 0;570 571	if (sctx->write_pointer < physical) {572		length = physical - sctx->write_pointer;573 574		ret = btrfs_zoned_issue_zeroout(sctx->wr_tgtdev,575						sctx->write_pointer, length);576		if (!ret)577			sctx->write_pointer = physical;578	}579	return ret;580}581 582static struct page *scrub_stripe_get_page(struct scrub_stripe *stripe, int sector_nr)583{584	struct btrfs_fs_info *fs_info = stripe->bg->fs_info;585	int page_index = (sector_nr << fs_info->sectorsize_bits) >> PAGE_SHIFT;586 587	return stripe->pages[page_index];588}589 590static unsigned int scrub_stripe_get_page_offset(struct scrub_stripe *stripe,591						 int sector_nr)592{593	struct btrfs_fs_info *fs_info = stripe->bg->fs_info;594 595	return offset_in_page(sector_nr << fs_info->sectorsize_bits);596}597 598static void scrub_verify_one_metadata(struct scrub_stripe *stripe, int sector_nr)599{600	struct btrfs_fs_info *fs_info = stripe->bg->fs_info;601	const u32 sectors_per_tree = fs_info->nodesize >> fs_info->sectorsize_bits;602	const u64 logical = stripe->logical + (sector_nr << fs_info->sectorsize_bits);603	const struct page *first_page = scrub_stripe_get_page(stripe, sector_nr);604	const unsigned int first_off = scrub_stripe_get_page_offset(stripe, sector_nr);605	SHASH_DESC_ON_STACK(shash, fs_info->csum_shash);606	u8 on_disk_csum[BTRFS_CSUM_SIZE];607	u8 calculated_csum[BTRFS_CSUM_SIZE];608	struct btrfs_header *header;609 610	/*611	 * Here we don't have a good way to attach the pages (and subpages)612	 * to a dummy extent buffer, thus we have to directly grab the members613	 * from pages.614	 */615	header = (struct btrfs_header *)(page_address(first_page) + first_off);616	memcpy(on_disk_csum, header->csum, fs_info->csum_size);617 618	if (logical != btrfs_stack_header_bytenr(header)) {619		bitmap_set(&stripe->csum_error_bitmap, sector_nr, sectors_per_tree);620		bitmap_set(&stripe->error_bitmap, sector_nr, sectors_per_tree);621		btrfs_warn_rl(fs_info,622		"tree block %llu mirror %u has bad bytenr, has %llu want %llu",623			      logical, stripe->mirror_num,624			      btrfs_stack_header_bytenr(header), logical);625		return;626	}627	if (memcmp(header->fsid, fs_info->fs_devices->metadata_uuid,628		   BTRFS_FSID_SIZE) != 0) {629		bitmap_set(&stripe->meta_error_bitmap, sector_nr, sectors_per_tree);630		bitmap_set(&stripe->error_bitmap, sector_nr, sectors_per_tree);631		btrfs_warn_rl(fs_info,632		"tree block %llu mirror %u has bad fsid, has %pU want %pU",633			      logical, stripe->mirror_num,634			      header->fsid, fs_info->fs_devices->fsid);635		return;636	}637	if (memcmp(header->chunk_tree_uuid, fs_info->chunk_tree_uuid,638		   BTRFS_UUID_SIZE) != 0) {639		bitmap_set(&stripe->meta_error_bitmap, sector_nr, sectors_per_tree);640		bitmap_set(&stripe->error_bitmap, sector_nr, sectors_per_tree);641		btrfs_warn_rl(fs_info,642		"tree block %llu mirror %u has bad chunk tree uuid, has %pU want %pU",643			      logical, stripe->mirror_num,644			      header->chunk_tree_uuid, fs_info->chunk_tree_uuid);645		return;646	}647 648	/* Now check tree block csum. */649	shash->tfm = fs_info->csum_shash;650	crypto_shash_init(shash);651	crypto_shash_update(shash, page_address(first_page) + first_off +652			    BTRFS_CSUM_SIZE, fs_info->sectorsize - BTRFS_CSUM_SIZE);653 654	for (int i = sector_nr + 1; i < sector_nr + sectors_per_tree; i++) {655		struct page *page = scrub_stripe_get_page(stripe, i);656		unsigned int page_off = scrub_stripe_get_page_offset(stripe, i);657 658		crypto_shash_update(shash, page_address(page) + page_off,659				    fs_info->sectorsize);660	}661 662	crypto_shash_final(shash, calculated_csum);663	if (memcmp(calculated_csum, on_disk_csum, fs_info->csum_size) != 0) {664		bitmap_set(&stripe->meta_error_bitmap, sector_nr, sectors_per_tree);665		bitmap_set(&stripe->error_bitmap, sector_nr, sectors_per_tree);666		btrfs_warn_rl(fs_info,667		"tree block %llu mirror %u has bad csum, has " CSUM_FMT " want " CSUM_FMT,668			      logical, stripe->mirror_num,669			      CSUM_FMT_VALUE(fs_info->csum_size, on_disk_csum),670			      CSUM_FMT_VALUE(fs_info->csum_size, calculated_csum));671		return;672	}673	if (stripe->sectors[sector_nr].generation !=674	    btrfs_stack_header_generation(header)) {675		bitmap_set(&stripe->meta_error_bitmap, sector_nr, sectors_per_tree);676		bitmap_set(&stripe->error_bitmap, sector_nr, sectors_per_tree);677		btrfs_warn_rl(fs_info,678		"tree block %llu mirror %u has bad generation, has %llu want %llu",679			      logical, stripe->mirror_num,680			      btrfs_stack_header_generation(header),681			      stripe->sectors[sector_nr].generation);682		return;683	}684	bitmap_clear(&stripe->error_bitmap, sector_nr, sectors_per_tree);685	bitmap_clear(&stripe->csum_error_bitmap, sector_nr, sectors_per_tree);686	bitmap_clear(&stripe->meta_error_bitmap, sector_nr, sectors_per_tree);687}688 689static void scrub_verify_one_sector(struct scrub_stripe *stripe, int sector_nr)690{691	struct btrfs_fs_info *fs_info = stripe->bg->fs_info;692	struct scrub_sector_verification *sector = &stripe->sectors[sector_nr];693	const u32 sectors_per_tree = fs_info->nodesize >> fs_info->sectorsize_bits;694	struct page *page = scrub_stripe_get_page(stripe, sector_nr);695	unsigned int pgoff = scrub_stripe_get_page_offset(stripe, sector_nr);696	u8 csum_buf[BTRFS_CSUM_SIZE];697	int ret;698 699	ASSERT(sector_nr >= 0 && sector_nr < stripe->nr_sectors);700 701	/* Sector not utilized, skip it. */702	if (!test_bit(sector_nr, &stripe->extent_sector_bitmap))703		return;704 705	/* IO error, no need to check. */706	if (test_bit(sector_nr, &stripe->io_error_bitmap))707		return;708 709	/* Metadata, verify the full tree block. */710	if (sector->is_metadata) {711		/*712		 * Check if the tree block crosses the stripe boundary.  If713		 * crossed the boundary, we cannot verify it but only give a714		 * warning.715		 *716		 * This can only happen on a very old filesystem where chunks717		 * are not ensured to be stripe aligned.718		 */719		if (unlikely(sector_nr + sectors_per_tree > stripe->nr_sectors)) {720			btrfs_warn_rl(fs_info,721			"tree block at %llu crosses stripe boundary %llu",722				      stripe->logical +723				      (sector_nr << fs_info->sectorsize_bits),724				      stripe->logical);725			return;726		}727		scrub_verify_one_metadata(stripe, sector_nr);728		return;729	}730 731	/*732	 * Data is easier, we just verify the data csum (if we have it).  For733	 * cases without csum, we have no other choice but to trust it.734	 */735	if (!sector->csum) {736		clear_bit(sector_nr, &stripe->error_bitmap);737		return;738	}739 740	ret = btrfs_check_sector_csum(fs_info, page, pgoff, csum_buf, sector->csum);741	if (ret < 0) {742		set_bit(sector_nr, &stripe->csum_error_bitmap);743		set_bit(sector_nr, &stripe->error_bitmap);744	} else {745		clear_bit(sector_nr, &stripe->csum_error_bitmap);746		clear_bit(sector_nr, &stripe->error_bitmap);747	}748}749 750/* Verify specified sectors of a stripe. */751static void scrub_verify_one_stripe(struct scrub_stripe *stripe, unsigned long bitmap)752{753	struct btrfs_fs_info *fs_info = stripe->bg->fs_info;754	const u32 sectors_per_tree = fs_info->nodesize >> fs_info->sectorsize_bits;755	int sector_nr;756 757	for_each_set_bit(sector_nr, &bitmap, stripe->nr_sectors) {758		scrub_verify_one_sector(stripe, sector_nr);759		if (stripe->sectors[sector_nr].is_metadata)760			sector_nr += sectors_per_tree - 1;761	}762}763 764static int calc_sector_number(struct scrub_stripe *stripe, struct bio_vec *first_bvec)765{766	int i;767 768	for (i = 0; i < stripe->nr_sectors; i++) {769		if (scrub_stripe_get_page(stripe, i) == first_bvec->bv_page &&770		    scrub_stripe_get_page_offset(stripe, i) == first_bvec->bv_offset)771			break;772	}773	ASSERT(i < stripe->nr_sectors);774	return i;775}776 777/*778 * Repair read is different to the regular read:779 *780 * - Only reads the failed sectors781 * - May have extra blocksize limits782 */783static void scrub_repair_read_endio(struct btrfs_bio *bbio)784{785	struct scrub_stripe *stripe = bbio->private;786	struct btrfs_fs_info *fs_info = stripe->bg->fs_info;787	struct bio_vec *bvec;788	int sector_nr = calc_sector_number(stripe, bio_first_bvec_all(&bbio->bio));789	u32 bio_size = 0;790	int i;791 792	ASSERT(sector_nr < stripe->nr_sectors);793 794	bio_for_each_bvec_all(bvec, &bbio->bio, i)795		bio_size += bvec->bv_len;796 797	if (bbio->bio.bi_status) {798		bitmap_set(&stripe->io_error_bitmap, sector_nr,799			   bio_size >> fs_info->sectorsize_bits);800		bitmap_set(&stripe->error_bitmap, sector_nr,801			   bio_size >> fs_info->sectorsize_bits);802	} else {803		bitmap_clear(&stripe->io_error_bitmap, sector_nr,804			     bio_size >> fs_info->sectorsize_bits);805	}806	bio_put(&bbio->bio);807	if (atomic_dec_and_test(&stripe->pending_io))808		wake_up(&stripe->io_wait);809}810 811static int calc_next_mirror(int mirror, int num_copies)812{813	ASSERT(mirror <= num_copies);814	return (mirror + 1 > num_copies) ? 1 : mirror + 1;815}816 817static void scrub_stripe_submit_repair_read(struct scrub_stripe *stripe,818					    int mirror, int blocksize, bool wait)819{820	struct btrfs_fs_info *fs_info = stripe->bg->fs_info;821	struct btrfs_bio *bbio = NULL;822	const unsigned long old_error_bitmap = stripe->error_bitmap;823	int i;824 825	ASSERT(stripe->mirror_num >= 1);826	ASSERT(atomic_read(&stripe->pending_io) == 0);827 828	for_each_set_bit(i, &old_error_bitmap, stripe->nr_sectors) {829		struct page *page;830		int pgoff;831		int ret;832 833		page = scrub_stripe_get_page(stripe, i);834		pgoff = scrub_stripe_get_page_offset(stripe, i);835 836		/* The current sector cannot be merged, submit the bio. */837		if (bbio && ((i > 0 && !test_bit(i - 1, &stripe->error_bitmap)) ||838			     bbio->bio.bi_iter.bi_size >= blocksize)) {839			ASSERT(bbio->bio.bi_iter.bi_size);840			atomic_inc(&stripe->pending_io);841			btrfs_submit_bbio(bbio, mirror);842			if (wait)843				wait_scrub_stripe_io(stripe);844			bbio = NULL;845		}846 847		if (!bbio) {848			bbio = btrfs_bio_alloc(stripe->nr_sectors, REQ_OP_READ,849				fs_info, scrub_repair_read_endio, stripe);850			bbio->bio.bi_iter.bi_sector = (stripe->logical +851				(i << fs_info->sectorsize_bits)) >> SECTOR_SHIFT;852		}853 854		ret = bio_add_page(&bbio->bio, page, fs_info->sectorsize, pgoff);855		ASSERT(ret == fs_info->sectorsize);856	}857	if (bbio) {858		ASSERT(bbio->bio.bi_iter.bi_size);859		atomic_inc(&stripe->pending_io);860		btrfs_submit_bbio(bbio, mirror);861		if (wait)862			wait_scrub_stripe_io(stripe);863	}864}865 866static void scrub_stripe_report_errors(struct scrub_ctx *sctx,867				       struct scrub_stripe *stripe)868{869	static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL,870				      DEFAULT_RATELIMIT_BURST);871	struct btrfs_fs_info *fs_info = sctx->fs_info;872	struct btrfs_device *dev = NULL;873	u64 physical = 0;874	int nr_data_sectors = 0;875	int nr_meta_sectors = 0;876	int nr_nodatacsum_sectors = 0;877	int nr_repaired_sectors = 0;878	int sector_nr;879 880	if (test_bit(SCRUB_STRIPE_FLAG_NO_REPORT, &stripe->state))881		return;882 883	/*884	 * Init needed infos for error reporting.885	 *886	 * Although our scrub_stripe infrastructure is mostly based on btrfs_submit_bio()887	 * thus no need for dev/physical, error reporting still needs dev and physical.888	 */889	if (!bitmap_empty(&stripe->init_error_bitmap, stripe->nr_sectors)) {890		u64 mapped_len = fs_info->sectorsize;891		struct btrfs_io_context *bioc = NULL;892		int stripe_index = stripe->mirror_num - 1;893		int ret;894 895		/* For scrub, our mirror_num should always start at 1. */896		ASSERT(stripe->mirror_num >= 1);897		ret = btrfs_map_block(fs_info, BTRFS_MAP_GET_READ_MIRRORS,898				      stripe->logical, &mapped_len, &bioc,899				      NULL, NULL);900		/*901		 * If we failed, dev will be NULL, and later detailed reports902		 * will just be skipped.903		 */904		if (ret < 0)905			goto skip;906		physical = bioc->stripes[stripe_index].physical;907		dev = bioc->stripes[stripe_index].dev;908		btrfs_put_bioc(bioc);909	}910 911skip:912	for_each_set_bit(sector_nr, &stripe->extent_sector_bitmap, stripe->nr_sectors) {913		bool repaired = false;914 915		if (stripe->sectors[sector_nr].is_metadata) {916			nr_meta_sectors++;917		} else {918			nr_data_sectors++;919			if (!stripe->sectors[sector_nr].csum)920				nr_nodatacsum_sectors++;921		}922 923		if (test_bit(sector_nr, &stripe->init_error_bitmap) &&924		    !test_bit(sector_nr, &stripe->error_bitmap)) {925			nr_repaired_sectors++;926			repaired = true;927		}928 929		/* Good sector from the beginning, nothing need to be done. */930		if (!test_bit(sector_nr, &stripe->init_error_bitmap))931			continue;932 933		/*934		 * Report error for the corrupted sectors.  If repaired, just935		 * output the message of repaired message.936		 */937		if (repaired) {938			if (dev) {939				btrfs_err_rl_in_rcu(fs_info,940			"fixed up error at logical %llu on dev %s physical %llu",941					    stripe->logical, btrfs_dev_name(dev),942					    physical);943			} else {944				btrfs_err_rl_in_rcu(fs_info,945			"fixed up error at logical %llu on mirror %u",946					    stripe->logical, stripe->mirror_num);947			}948			continue;949		}950 951		/* The remaining are all for unrepaired. */952		if (dev) {953			btrfs_err_rl_in_rcu(fs_info,954	"unable to fixup (regular) error at logical %llu on dev %s physical %llu",955					    stripe->logical, btrfs_dev_name(dev),956					    physical);957		} else {958			btrfs_err_rl_in_rcu(fs_info,959	"unable to fixup (regular) error at logical %llu on mirror %u",960					    stripe->logical, stripe->mirror_num);961		}962 963		if (test_bit(sector_nr, &stripe->io_error_bitmap))964			if (__ratelimit(&rs) && dev)965				scrub_print_common_warning("i/o error", dev, false,966						     stripe->logical, physical);967		if (test_bit(sector_nr, &stripe->csum_error_bitmap))968			if (__ratelimit(&rs) && dev)969				scrub_print_common_warning("checksum error", dev, false,970						     stripe->logical, physical);971		if (test_bit(sector_nr, &stripe->meta_error_bitmap))972			if (__ratelimit(&rs) && dev)973				scrub_print_common_warning("header error", dev, false,974						     stripe->logical, physical);975	}976 977	spin_lock(&sctx->stat_lock);978	sctx->stat.data_extents_scrubbed += stripe->nr_data_extents;979	sctx->stat.tree_extents_scrubbed += stripe->nr_meta_extents;980	sctx->stat.data_bytes_scrubbed += nr_data_sectors << fs_info->sectorsize_bits;981	sctx->stat.tree_bytes_scrubbed += nr_meta_sectors << fs_info->sectorsize_bits;982	sctx->stat.no_csum += nr_nodatacsum_sectors;983	sctx->stat.read_errors += stripe->init_nr_io_errors;984	sctx->stat.csum_errors += stripe->init_nr_csum_errors;985	sctx->stat.verify_errors += stripe->init_nr_meta_errors;986	sctx->stat.uncorrectable_errors +=987		bitmap_weight(&stripe->error_bitmap, stripe->nr_sectors);988	sctx->stat.corrected_errors += nr_repaired_sectors;989	spin_unlock(&sctx->stat_lock);990}991 992static void scrub_write_sectors(struct scrub_ctx *sctx, struct scrub_stripe *stripe,993				unsigned long write_bitmap, bool dev_replace);994 995/*996 * The main entrance for all read related scrub work, including:997 *998 * - Wait for the initial read to finish999 * - Verify and locate any bad sectors1000 * - Go through the remaining mirrors and try to read as large blocksize as1001 *   possible1002 * - Go through all mirrors (including the failed mirror) sector-by-sector1003 * - Submit writeback for repaired sectors1004 *1005 * Writeback for dev-replace does not happen here, it needs extra1006 * synchronization for zoned devices.1007 */1008static void scrub_stripe_read_repair_worker(struct work_struct *work)1009{1010	struct scrub_stripe *stripe = container_of(work, struct scrub_stripe, work);1011	struct scrub_ctx *sctx = stripe->sctx;1012	struct btrfs_fs_info *fs_info = sctx->fs_info;1013	int num_copies = btrfs_num_copies(fs_info, stripe->bg->start,1014					  stripe->bg->length);1015	unsigned long repaired;1016	int mirror;1017	int i;1018 1019	ASSERT(stripe->mirror_num > 0);1020 1021	wait_scrub_stripe_io(stripe);1022	scrub_verify_one_stripe(stripe, stripe->extent_sector_bitmap);1023	/* Save the initial failed bitmap for later repair and report usage. */1024	stripe->init_error_bitmap = stripe->error_bitmap;1025	stripe->init_nr_io_errors = bitmap_weight(&stripe->io_error_bitmap,1026						  stripe->nr_sectors);1027	stripe->init_nr_csum_errors = bitmap_weight(&stripe->csum_error_bitmap,1028						    stripe->nr_sectors);1029	stripe->init_nr_meta_errors = bitmap_weight(&stripe->meta_error_bitmap,1030						    stripe->nr_sectors);1031 1032	if (bitmap_empty(&stripe->init_error_bitmap, stripe->nr_sectors))1033		goto out;1034 1035	/*1036	 * Try all remaining mirrors.1037	 *1038	 * Here we still try to read as large block as possible, as this is1039	 * faster and we have extra safety nets to rely on.1040	 */1041	for (mirror = calc_next_mirror(stripe->mirror_num, num_copies);1042	     mirror != stripe->mirror_num;1043	     mirror = calc_next_mirror(mirror, num_copies)) {1044		const unsigned long old_error_bitmap = stripe->error_bitmap;1045 1046		scrub_stripe_submit_repair_read(stripe, mirror,1047						BTRFS_STRIPE_LEN, false);1048		wait_scrub_stripe_io(stripe);1049		scrub_verify_one_stripe(stripe, old_error_bitmap);1050		if (bitmap_empty(&stripe->error_bitmap, stripe->nr_sectors))1051			goto out;1052	}1053 1054	/*1055	 * Last safety net, try re-checking all mirrors, including the failed1056	 * one, sector-by-sector.1057	 *1058	 * As if one sector failed the drive's internal csum, the whole read1059	 * containing the offending sector would be marked as error.1060	 * Thus here we do sector-by-sector read.1061	 *1062	 * This can be slow, thus we only try it as the last resort.1063	 */1064 1065	for (i = 0, mirror = stripe->mirror_num;1066	     i < num_copies;1067	     i++, mirror = calc_next_mirror(mirror, num_copies)) {1068		const unsigned long old_error_bitmap = stripe->error_bitmap;1069 1070		scrub_stripe_submit_repair_read(stripe, mirror,1071						fs_info->sectorsize, true);1072		wait_scrub_stripe_io(stripe);1073		scrub_verify_one_stripe(stripe, old_error_bitmap);1074		if (bitmap_empty(&stripe->error_bitmap, stripe->nr_sectors))1075			goto out;1076	}1077out:1078	/*1079	 * Submit the repaired sectors.  For zoned case, we cannot do repair1080	 * in-place, but queue the bg to be relocated.1081	 */1082	bitmap_andnot(&repaired, &stripe->init_error_bitmap, &stripe->error_bitmap,1083		      stripe->nr_sectors);1084	if (!sctx->readonly && !bitmap_empty(&repaired, stripe->nr_sectors)) {1085		if (btrfs_is_zoned(fs_info)) {1086			btrfs_repair_one_zone(fs_info, sctx->stripes[0].bg->start);1087		} else {1088			scrub_write_sectors(sctx, stripe, repaired, false);1089			wait_scrub_stripe_io(stripe);1090		}1091	}1092 1093	scrub_stripe_report_errors(sctx, stripe);1094	set_bit(SCRUB_STRIPE_FLAG_REPAIR_DONE, &stripe->state);1095	wake_up(&stripe->repair_wait);1096}1097 1098static void scrub_read_endio(struct btrfs_bio *bbio)1099{1100	struct scrub_stripe *stripe = bbio->private;1101	struct bio_vec *bvec;1102	int sector_nr = calc_sector_number(stripe, bio_first_bvec_all(&bbio->bio));1103	int num_sectors;1104	u32 bio_size = 0;1105	int i;1106 1107	ASSERT(sector_nr < stripe->nr_sectors);1108	bio_for_each_bvec_all(bvec, &bbio->bio, i)1109		bio_size += bvec->bv_len;1110	num_sectors = bio_size >> stripe->bg->fs_info->sectorsize_bits;1111 1112	if (bbio->bio.bi_status) {1113		bitmap_set(&stripe->io_error_bitmap, sector_nr, num_sectors);1114		bitmap_set(&stripe->error_bitmap, sector_nr, num_sectors);1115	} else {1116		bitmap_clear(&stripe->io_error_bitmap, sector_nr, num_sectors);1117	}1118	bio_put(&bbio->bio);1119	if (atomic_dec_and_test(&stripe->pending_io)) {1120		wake_up(&stripe->io_wait);1121		INIT_WORK(&stripe->work, scrub_stripe_read_repair_worker);1122		queue_work(stripe->bg->fs_info->scrub_workers, &stripe->work);1123	}1124}1125 1126static void scrub_write_endio(struct btrfs_bio *bbio)1127{1128	struct scrub_stripe *stripe = bbio->private;1129	struct btrfs_fs_info *fs_info = stripe->bg->fs_info;1130	struct bio_vec *bvec;1131	int sector_nr = calc_sector_number(stripe, bio_first_bvec_all(&bbio->bio));1132	u32 bio_size = 0;1133	int i;1134 1135	bio_for_each_bvec_all(bvec, &bbio->bio, i)1136		bio_size += bvec->bv_len;1137 1138	if (bbio->bio.bi_status) {1139		unsigned long flags;1140 1141		spin_lock_irqsave(&stripe->write_error_lock, flags);1142		bitmap_set(&stripe->write_error_bitmap, sector_nr,1143			   bio_size >> fs_info->sectorsize_bits);1144		spin_unlock_irqrestore(&stripe->write_error_lock, flags);1145	}1146	bio_put(&bbio->bio);1147 1148	if (atomic_dec_and_test(&stripe->pending_io))1149		wake_up(&stripe->io_wait);1150}1151 1152static void scrub_submit_write_bio(struct scrub_ctx *sctx,1153				   struct scrub_stripe *stripe,1154				   struct btrfs_bio *bbio, bool dev_replace)1155{1156	struct btrfs_fs_info *fs_info = sctx->fs_info;1157	u32 bio_len = bbio->bio.bi_iter.bi_size;1158	u32 bio_off = (bbio->bio.bi_iter.bi_sector << SECTOR_SHIFT) -1159		      stripe->logical;1160 1161	fill_writer_pointer_gap(sctx, stripe->physical + bio_off);1162	atomic_inc(&stripe->pending_io);1163	btrfs_submit_repair_write(bbio, stripe->mirror_num, dev_replace);1164	if (!btrfs_is_zoned(fs_info))1165		return;1166	/*1167	 * For zoned writeback, queue depth must be 1, thus we must wait for1168	 * the write to finish before the next write.1169	 */1170	wait_scrub_stripe_io(stripe);1171 1172	/*1173	 * And also need to update the write pointer if write finished1174	 * successfully.1175	 */1176	if (!test_bit(bio_off >> fs_info->sectorsize_bits,1177		      &stripe->write_error_bitmap))1178		sctx->write_pointer += bio_len;1179}1180 1181/*1182 * Submit the write bio(s) for the sectors specified by @write_bitmap.1183 *1184 * Here we utilize btrfs_submit_repair_write(), which has some extra benefits:1185 *1186 * - Only needs logical bytenr and mirror_num1187 *   Just like the scrub read path1188 *1189 * - Would only result in writes to the specified mirror1190 *   Unlike the regular writeback path, which would write back to all stripes1191 *1192 * - Handle dev-replace and read-repair writeback differently1193 */1194static void scrub_write_sectors(struct scrub_ctx *sctx, struct scrub_stripe *stripe,1195				unsigned long write_bitmap, bool dev_replace)1196{1197	struct btrfs_fs_info *fs_info = stripe->bg->fs_info;1198	struct btrfs_bio *bbio = NULL;1199	int sector_nr;1200 1201	for_each_set_bit(sector_nr, &write_bitmap, stripe->nr_sectors) {1202		struct page *page = scrub_stripe_get_page(stripe, sector_nr);1203		unsigned int pgoff = scrub_stripe_get_page_offset(stripe, sector_nr);1204		int ret;1205 1206		/* We should only writeback sectors covered by an extent. */1207		ASSERT(test_bit(sector_nr, &stripe->extent_sector_bitmap));1208 1209		/* Cannot merge with previous sector, submit the current one. */1210		if (bbio && sector_nr && !test_bit(sector_nr - 1, &write_bitmap)) {1211			scrub_submit_write_bio(sctx, stripe, bbio, dev_replace);1212			bbio = NULL;1213		}1214		if (!bbio) {1215			bbio = btrfs_bio_alloc(stripe->nr_sectors, REQ_OP_WRITE,1216					       fs_info, scrub_write_endio, stripe);1217			bbio->bio.bi_iter.bi_sector = (stripe->logical +1218				(sector_nr << fs_info->sectorsize_bits)) >>1219				SECTOR_SHIFT;1220		}1221		ret = bio_add_page(&bbio->bio, page, fs_info->sectorsize, pgoff);1222		ASSERT(ret == fs_info->sectorsize);1223	}1224	if (bbio)1225		scrub_submit_write_bio(sctx, stripe, bbio, dev_replace);1226}1227 1228/*1229 * Throttling of IO submission, bandwidth-limit based, the timeslice is 11230 * second.  Limit can be set via /sys/fs/UUID/devinfo/devid/scrub_speed_max.1231 */1232static void scrub_throttle_dev_io(struct scrub_ctx *sctx, struct btrfs_device *device,1233				  unsigned int bio_size)1234{1235	const int time_slice = 1000;1236	s64 delta;1237	ktime_t now;1238	u32 div;1239	u64 bwlimit;1240 1241	bwlimit = READ_ONCE(device->scrub_speed_max);1242	if (bwlimit == 0)1243		return;1244 1245	/*1246	 * Slice is divided into intervals when the IO is submitted, adjust by1247	 * bwlimit and maximum of 64 intervals.1248	 */1249	div = max_t(u32, 1, (u32)(bwlimit / (16 * 1024 * 1024)));1250	div = min_t(u32, 64, div);1251 1252	/* Start new epoch, set deadline */1253	now = ktime_get();1254	if (sctx->throttle_deadline == 0) {1255		sctx->throttle_deadline = ktime_add_ms(now, time_slice / div);1256		sctx->throttle_sent = 0;1257	}1258 1259	/* Still in the time to send? */1260	if (ktime_before(now, sctx->throttle_deadline)) {1261		/* If current bio is within the limit, send it */1262		sctx->throttle_sent += bio_size;1263		if (sctx->throttle_sent <= div_u64(bwlimit, div))1264			return;1265 1266		/* We're over the limit, sleep until the rest of the slice */1267		delta = ktime_ms_delta(sctx->throttle_deadline, now);1268	} else {1269		/* New request after deadline, start new epoch */1270		delta = 0;1271	}1272 1273	if (delta) {1274		long timeout;1275 1276		timeout = div_u64(delta * HZ, 1000);1277		schedule_timeout_interruptible(timeout);1278	}1279 1280	/* Next call will start the deadline period */1281	sctx->throttle_deadline = 0;1282}1283 1284/*1285 * Given a physical address, this will calculate it's1286 * logical offset. if this is a parity stripe, it will return1287 * the most left data stripe's logical offset.1288 *1289 * return 0 if it is a data stripe, 1 means parity stripe.1290 */1291static int get_raid56_logic_offset(u64 physical, int num,1292				   struct btrfs_chunk_map *map, u64 *offset,1293				   u64 *stripe_start)1294{1295	int i;1296	int j = 0;1297	u64 last_offset;1298	const int data_stripes = nr_data_stripes(map);1299 1300	last_offset = (physical - map->stripes[num].physical) * data_stripes;1301	if (stripe_start)1302		*stripe_start = last_offset;1303 1304	*offset = last_offset;1305	for (i = 0; i < data_stripes; i++) {1306		u32 stripe_nr;1307		u32 stripe_index;1308		u32 rot;1309 1310		*offset = last_offset + btrfs_stripe_nr_to_offset(i);1311 1312		stripe_nr = (u32)(*offset >> BTRFS_STRIPE_LEN_SHIFT) / data_stripes;1313 1314		/* Work out the disk rotation on this stripe-set */1315		rot = stripe_nr % map->num_stripes;1316		/* calculate which stripe this data locates */1317		rot += i;1318		stripe_index = rot % map->num_stripes;1319		if (stripe_index == num)1320			return 0;1321		if (stripe_index < num)1322			j++;1323	}1324	*offset = last_offset + btrfs_stripe_nr_to_offset(j);1325	return 1;1326}1327 1328/*1329 * Return 0 if the extent item range covers any byte of the range.1330 * Return <0 if the extent item is before @search_start.1331 * Return >0 if the extent item is after @start_start + @search_len.1332 */1333static int compare_extent_item_range(struct btrfs_path *path,1334				     u64 search_start, u64 search_len)1335{1336	struct btrfs_fs_info *fs_info = path->nodes[0]->fs_info;1337	u64 len;1338	struct btrfs_key key;1339 1340	btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);1341	ASSERT(key.type == BTRFS_EXTENT_ITEM_KEY ||1342	       key.type == BTRFS_METADATA_ITEM_KEY);1343	if (key.type == BTRFS_METADATA_ITEM_KEY)1344		len = fs_info->nodesize;1345	else1346		len = key.offset;1347 1348	if (key.objectid + len <= search_start)1349		return -1;1350	if (key.objectid >= search_start + search_len)1351		return 1;1352	return 0;1353}1354 1355/*1356 * Locate one extent item which covers any byte in range1357 * [@search_start, @search_start + @search_length)1358 *1359 * If the path is not initialized, we will initialize the search by doing1360 * a btrfs_search_slot().1361 * If the path is already initialized, we will use the path as the initial1362 * slot, to avoid duplicated btrfs_search_slot() calls.1363 *1364 * NOTE: If an extent item starts before @search_start, we will still1365 * return the extent item. This is for data extent crossing stripe boundary.1366 *1367 * Return 0 if we found such extent item, and @path will point to the extent item.1368 * Return >0 if no such extent item can be found, and @path will be released.1369 * Return <0 if hit fatal error, and @path will be released.1370 */1371static int find_first_extent_item(struct btrfs_root *extent_root,1372				  struct btrfs_path *path,1373				  u64 search_start, u64 search_len)1374{1375	struct btrfs_fs_info *fs_info = extent_root->fs_info;1376	struct btrfs_key key;1377	int ret;1378 1379	/* Continue using the existing path */1380	if (path->nodes[0])1381		goto search_forward;1382 1383	if (btrfs_fs_incompat(fs_info, SKINNY_METADATA))1384		key.type = BTRFS_METADATA_ITEM_KEY;1385	else1386		key.type = BTRFS_EXTENT_ITEM_KEY;1387	key.objectid = search_start;1388	key.offset = (u64)-1;1389 1390	ret = btrfs_search_slot(NULL, extent_root, &key, path, 0, 0);1391	if (ret < 0)1392		return ret;1393	if (ret == 0) {1394		/*1395		 * Key with offset -1 found, there would have to exist an extent1396		 * item with such offset, but this is out of the valid range.1397		 */1398		btrfs_release_path(path);1399		return -EUCLEAN;1400	}1401 1402	/*1403	 * Here we intentionally pass 0 as @min_objectid, as there could be1404	 * an extent item starting before @search_start.1405	 */1406	ret = btrfs_previous_extent_item(extent_root, path, 0);1407	if (ret < 0)1408		return ret;1409	/*1410	 * No matter whether we have found an extent item, the next loop will1411	 * properly do every check on the key.1412	 */1413search_forward:1414	while (true) {1415		btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);1416		if (key.objectid >= search_start + search_len)1417			break;1418		if (key.type != BTRFS_METADATA_ITEM_KEY &&1419		    key.type != BTRFS_EXTENT_ITEM_KEY)1420			goto next;1421 1422		ret = compare_extent_item_range(path, search_start, search_len);1423		if (ret == 0)1424			return ret;1425		if (ret > 0)1426			break;1427next:1428		ret = btrfs_next_item(extent_root, path);1429		if (ret) {1430			/* Either no more items or a fatal error. */1431			btrfs_release_path(path);1432			return ret;1433		}1434	}1435	btrfs_release_path(path);1436	return 1;1437}1438 1439static void get_extent_info(struct btrfs_path *path, u64 *extent_start_ret,1440			    u64 *size_ret, u64 *flags_ret, u64 *generation_ret)1441{1442	struct btrfs_key key;1443	struct btrfs_extent_item *ei;1444 1445	btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);1446	ASSERT(key.type == BTRFS_METADATA_ITEM_KEY ||1447	       key.type == BTRFS_EXTENT_ITEM_KEY);1448	*extent_start_ret = key.objectid;1449	if (key.type == BTRFS_METADATA_ITEM_KEY)1450		*size_ret = path->nodes[0]->fs_info->nodesize;1451	else1452		*size_ret = key.offset;1453	ei = btrfs_item_ptr(path->nodes[0], path->slots[0], struct btrfs_extent_item);1454	*flags_ret = btrfs_extent_flags(path->nodes[0], ei);1455	*generation_ret = btrfs_extent_generation(path->nodes[0], ei);1456}1457 1458static int sync_write_pointer_for_zoned(struct scrub_ctx *sctx, u64 logical,1459					u64 physical, u64 physical_end)1460{1461	struct btrfs_fs_info *fs_info = sctx->fs_info;1462	int ret = 0;1463 1464	if (!btrfs_is_zoned(fs_info))1465		return 0;1466 1467	mutex_lock(&sctx->wr_lock);1468	if (sctx->write_pointer < physical_end) {1469		ret = btrfs_sync_zone_write_pointer(sctx->wr_tgtdev, logical,1470						    physical,1471						    sctx->write_pointer);1472		if (ret)1473			btrfs_err(fs_info,1474				  "zoned: failed to recover write pointer");1475	}1476	mutex_unlock(&sctx->wr_lock);1477	btrfs_dev_clear_zone_empty(sctx->wr_tgtdev, physical);1478 1479	return ret;1480}1481 1482static void fill_one_extent_info(struct btrfs_fs_info *fs_info,1483				 struct scrub_stripe *stripe,1484				 u64 extent_start, u64 extent_len,1485				 u64 extent_flags, u64 extent_gen)1486{1487	for (u64 cur_logical = max(stripe->logical, extent_start);1488	     cur_logical < min(stripe->logical + BTRFS_STRIPE_LEN,1489			       extent_start + extent_len);1490	     cur_logical += fs_info->sectorsize) {1491		const int nr_sector = (cur_logical - stripe->logical) >>1492				      fs_info->sectorsize_bits;1493		struct scrub_sector_verification *sector =1494						&stripe->sectors[nr_sector];1495 1496		set_bit(nr_sector, &stripe->extent_sector_bitmap);1497		if (extent_flags & BTRFS_EXTENT_FLAG_TREE_BLOCK) {1498			sector->is_metadata = true;1499			sector->generation = extent_gen;1500		}1501	}1502}1503 1504static void scrub_stripe_reset_bitmaps(struct scrub_stripe *stripe)1505{1506	stripe->extent_sector_bitmap = 0;1507	stripe->init_error_bitmap = 0;1508	stripe->init_nr_io_errors = 0;1509	stripe->init_nr_csum_errors = 0;1510	stripe->init_nr_meta_errors = 0;1511	stripe->error_bitmap = 0;1512	stripe->io_error_bitmap = 0;1513	stripe->csum_error_bitmap = 0;1514	stripe->meta_error_bitmap = 0;1515}1516 1517/*1518 * Locate one stripe which has at least one extent in its range.1519 *1520 * Return 0 if found such stripe, and store its info into @stripe.1521 * Return >0 if there is no such stripe in the specified range.1522 * Return <0 for error.1523 */1524static int scrub_find_fill_first_stripe(struct btrfs_block_group *bg,1525					struct btrfs_path *extent_path,1526					struct btrfs_path *csum_path,1527					struct btrfs_device *dev, u64 physical,1528					int mirror_num, u64 logical_start,1529					u32 logical_len,1530					struct scrub_stripe *stripe)1531{1532	struct btrfs_fs_info *fs_info = bg->fs_info;1533	struct btrfs_root *extent_root = btrfs_extent_root(fs_info, bg->start);1534	struct btrfs_root *csum_root = btrfs_csum_root(fs_info, bg->start);1535	const u64 logical_end = logical_start + logical_len;1536	u64 cur_logical = logical_start;1537	u64 stripe_end;1538	u64 extent_start;1539	u64 extent_len;1540	u64 extent_flags;1541	u64 extent_gen;1542	int ret;1543 1544	memset(stripe->sectors, 0, sizeof(struct scrub_sector_verification) *1545				   stripe->nr_sectors);1546	scrub_stripe_reset_bitmaps(stripe);1547 1548	/* The range must be inside the bg. */1549	ASSERT(logical_start >= bg->start && logical_end <= bg->start + bg->length);1550 1551	ret = find_first_extent_item(extent_root, extent_path, logical_start,1552				     logical_len);1553	/* Either error or not found. */1554	if (ret)1555		goto out;1556	get_extent_info(extent_path, &extent_start, &extent_len, &extent_flags,1557			&extent_gen);1558	if (extent_flags & BTRFS_EXTENT_FLAG_TREE_BLOCK)1559		stripe->nr_meta_extents++;1560	if (extent_flags & BTRFS_EXTENT_FLAG_DATA)1561		stripe->nr_data_extents++;1562	cur_logical = max(extent_start, cur_logical);1563 1564	/*1565	 * Round down to stripe boundary.1566	 *1567	 * The extra calculation against bg->start is to handle block groups1568	 * whose logical bytenr is not BTRFS_STRIPE_LEN aligned.1569	 */1570	stripe->logical = round_down(cur_logical - bg->start, BTRFS_STRIPE_LEN) +1571			  bg->start;1572	stripe->physical = physical + stripe->logical - logical_start;1573	stripe->dev = dev;1574	stripe->bg = bg;1575	stripe->mirror_num = mirror_num;1576	stripe_end = stripe->logical + BTRFS_STRIPE_LEN - 1;1577 1578	/* Fill the first extent info into stripe->sectors[] array. */1579	fill_one_extent_info(fs_info, stripe, extent_start, extent_len,1580			     extent_flags, extent_gen);1581	cur_logical = extent_start + extent_len;1582 1583	/* Fill the extent info for the remaining sectors. */1584	while (cur_logical <= stripe_end) {1585		ret = find_first_extent_item(extent_root, extent_path, cur_logical,1586					     stripe_end - cur_logical + 1);1587		if (ret < 0)1588			goto out;1589		if (ret > 0) {1590			ret = 0;1591			break;1592		}1593		get_extent_info(extent_path, &extent_start, &extent_len,1594				&extent_flags, &extent_gen);1595		if (extent_flags & BTRFS_EXTENT_FLAG_TREE_BLOCK)1596			stripe->nr_meta_extents++;1597		if (extent_flags & BTRFS_EXTENT_FLAG_DATA)1598			stripe->nr_data_extents++;1599		fill_one_extent_info(fs_info, stripe, extent_start, extent_len,1600				     extent_flags, extent_gen);1601		cur_logical = extent_start + extent_len;1602	}1603 1604	/* Now fill the data csum. */1605	if (bg->flags & BTRFS_BLOCK_GROUP_DATA) {1606		int sector_nr;1607		unsigned long csum_bitmap = 0;1608 1609		/* Csum space should have already been allocated. */1610		ASSERT(stripe->csums);1611 1612		/*1613		 * Our csum bitmap should be large enough, as BTRFS_STRIPE_LEN1614		 * should contain at most 16 sectors.1615		 */1616		ASSERT(BITS_PER_LONG >= BTRFS_STRIPE_LEN >> fs_info->sectorsize_bits);1617 1618		ret = btrfs_lookup_csums_bitmap(csum_root, csum_path,1619						stripe->logical, stripe_end,1620						stripe->csums, &csum_bitmap);1621		if (ret < 0)1622			goto out;1623		if (ret > 0)1624			ret = 0;1625 1626		for_each_set_bit(sector_nr, &csum_bitmap, stripe->nr_sectors) {1627			stripe->sectors[sector_nr].csum = stripe->csums +1628				sector_nr * fs_info->csum_size;1629		}1630	}1631	set_bit(SCRUB_STRIPE_FLAG_INITIALIZED, &stripe->state);1632out:1633	return ret;1634}1635 1636static void scrub_reset_stripe(struct scrub_stripe *stripe)1637{1638	scrub_stripe_reset_bitmaps(stripe);1639 1640	stripe->nr_meta_extents = 0;1641	stripe->nr_data_extents = 0;1642	stripe->state = 0;1643 1644	for (int i = 0; i < stripe->nr_sectors; i++) {1645		stripe->sectors[i].is_metadata = false;1646		stripe->sectors[i].csum = NULL;1647		stripe->sectors[i].generation = 0;1648	}1649}1650 1651static u32 stripe_length(const struct scrub_stripe *stripe)1652{1653	ASSERT(stripe->bg);1654 1655	return min(BTRFS_STRIPE_LEN,1656		   stripe->bg->start + stripe->bg->length - stripe->logical);1657}1658 1659static void scrub_submit_extent_sector_read(struct scrub_ctx *sctx,1660					    struct scrub_stripe *stripe)1661{1662	struct btrfs_fs_info *fs_info = stripe->bg->fs_info;1663	struct btrfs_bio *bbio = NULL;1664	unsigned int nr_sectors = stripe_length(stripe) >> fs_info->sectorsize_bits;1665	u64 stripe_len = BTRFS_STRIPE_LEN;1666	int mirror = stripe->mirror_num;1667	int i;1668 1669	atomic_inc(&stripe->pending_io);1670 1671	for_each_set_bit(i, &stripe->extent_sector_bitmap, stripe->nr_sectors) {1672		struct page *page = scrub_stripe_get_page(stripe, i);1673		unsigned int pgoff = scrub_stripe_get_page_offset(stripe, i);1674 1675		/* We're beyond the chunk boundary, no need to read anymore. */1676		if (i >= nr_sectors)1677			break;1678 1679		/* The current sector cannot be merged, submit the bio. */1680		if (bbio &&1681		    ((i > 0 &&1682		      !test_bit(i - 1, &stripe->extent_sector_bitmap)) ||1683		     bbio->bio.bi_iter.bi_size >= stripe_len)) {1684			ASSERT(bbio->bio.bi_iter.bi_size);1685			atomic_inc(&stripe->pending_io);1686			btrfs_submit_bbio(bbio, mirror);1687			bbio = NULL;1688		}1689 1690		if (!bbio) {1691			struct btrfs_io_stripe io_stripe = {};1692			struct btrfs_io_context *bioc = NULL;1693			const u64 logical = stripe->logical +1694					    (i << fs_info->sectorsize_bits);1695			int err;1696 1697			io_stripe.rst_search_commit_root = true;1698			stripe_len = (nr_sectors - i) << fs_info->sectorsize_bits;1699			/*1700			 * For RST cases, we need to manually split the bbio to1701			 * follow the RST boundary.1702			 */1703			err = btrfs_map_block(fs_info, BTRFS_MAP_READ, logical,1704					      &stripe_len, &bioc, &io_stripe, &mirror);1705			btrfs_put_bioc(bioc);1706			if (err < 0) {1707				set_bit(i, &stripe->io_error_bitmap);1708				set_bit(i, &stripe->error_bitmap);1709				continue;1710			}1711 1712			bbio = btrfs_bio_alloc(stripe->nr_sectors, REQ_OP_READ,1713					       fs_info, scrub_read_endio, stripe);1714			bbio->bio.bi_iter.bi_sector = logical >> SECTOR_SHIFT;1715		}1716 1717		__bio_add_page(&bbio->bio, page, fs_info->sectorsize, pgoff);1718	}1719 1720	if (bbio) {1721		ASSERT(bbio->bio.bi_iter.bi_size);1722		atomic_inc(&stripe->pending_io);1723		btrfs_submit_bbio(bbio, mirror);1724	}1725 1726	if (atomic_dec_and_test(&stripe->pending_io)) {1727		wake_up(&stripe->io_wait);1728		INIT_WORK(&stripe->work, scrub_stripe_read_repair_worker);1729		queue_work(stripe->bg->fs_info->scrub_workers, &stripe->work);1730	}1731}1732 1733static void scrub_submit_initial_read(struct scrub_ctx *sctx,1734				      struct scrub_stripe *stripe)1735{1736	struct btrfs_fs_info *fs_info = sctx->fs_info;1737	struct btrfs_bio *bbio;1738	unsigned int nr_sectors = stripe_length(stripe) >> fs_info->sectorsize_bits;1739	int mirror = stripe->mirror_num;1740 1741	ASSERT(stripe->bg);1742	ASSERT(stripe->mirror_num > 0);1743	ASSERT(test_bit(SCRUB_STRIPE_FLAG_INITIALIZED, &stripe->state));1744 1745	if (btrfs_need_stripe_tree_update(fs_info, stripe->bg->flags)) {1746		scrub_submit_extent_sector_read(sctx, stripe);1747		return;1748	}1749 1750	bbio = btrfs_bio_alloc(SCRUB_STRIPE_PAGES, REQ_OP_READ, fs_info,1751			       scrub_read_endio, stripe);1752 1753	bbio->bio.bi_iter.bi_sector = stripe->logical >> SECTOR_SHIFT;1754	/* Read the whole range inside the chunk boundary. */1755	for (unsigned int cur = 0; cur < nr_sectors; cur++) {1756		struct page *page = scrub_stripe_get_page(stripe, cur);1757		unsigned int pgoff = scrub_stripe_get_page_offset(stripe, cur);1758		int ret;1759 1760		ret = bio_add_page(&bbio->bio, page, fs_info->sectorsize, pgoff);1761		/* We should have allocated enough bio vectors. */1762		ASSERT(ret == fs_info->sectorsize);1763	}1764	atomic_inc(&stripe->pending_io);1765 1766	/*1767	 * For dev-replace, either user asks to avoid the source dev, or1768	 * the device is missing, we try the next mirror instead.1769	 */1770	if (sctx->is_dev_replace &&1771	    (fs_info->dev_replace.cont_reading_from_srcdev_mode ==1772	     BTRFS_DEV_REPLACE_ITEM_CONT_READING_FROM_SRCDEV_MODE_AVOID ||1773	     !stripe->dev->bdev)) {1774		int num_copies = btrfs_num_copies(fs_info, stripe->bg->start,1775						  stripe->bg->length);1776 1777		mirror = calc_next_mirror(mirror, num_copies);1778	}1779	btrfs_submit_bbio(bbio, mirror);1780}1781 1782static bool stripe_has_metadata_error(struct scrub_stripe *stripe)1783{1784	int i;1785 1786	for_each_set_bit(i, &stripe->error_bitmap, stripe->nr_sectors) {1787		if (stripe->sectors[i].is_metadata) {1788			struct btrfs_fs_info *fs_info = stripe->bg->fs_info;1789 1790			btrfs_err(fs_info,1791			"stripe %llu has unrepaired metadata sector at %llu",1792				  stripe->logical,1793				  stripe->logical + (i << fs_info->sectorsize_bits));1794			return true;1795		}1796	}1797	return false;1798}1799 1800static void submit_initial_group_read(struct scrub_ctx *sctx,1801				      unsigned int first_slot,1802				      unsigned int nr_stripes)1803{1804	struct blk_plug plug;1805 1806	ASSERT(first_slot < SCRUB_TOTAL_STRIPES);1807	ASSERT(first_slot + nr_stripes <= SCRUB_TOTAL_STRIPES);1808 1809	scrub_throttle_dev_io(sctx, sctx->stripes[0].dev,1810			      btrfs_stripe_nr_to_offset(nr_stripes));1811	blk_start_plug(&plug);1812	for (int i = 0; i < nr_stripes; i++) {1813		struct scrub_stripe *stripe = &sctx->stripes[first_slot + i];1814 1815		/* Those stripes should be initialized. */1816		ASSERT(test_bit(SCRUB_STRIPE_FLAG_INITIALIZED, &stripe->state));1817		scrub_submit_initial_read(sctx, stripe);1818	}1819	blk_finish_plug(&plug);1820}1821 1822static int flush_scrub_stripes(struct scrub_ctx *sctx)1823{1824	struct btrfs_fs_info *fs_info = sctx->fs_info;1825	struct scrub_stripe *stripe;1826	const int nr_stripes = sctx->cur_stripe;1827	int ret = 0;1828 1829	if (!nr_stripes)1830		return 0;1831 1832	ASSERT(test_bit(SCRUB_STRIPE_FLAG_INITIALIZED, &sctx->stripes[0].state));1833 1834	/* Submit the stripes which are populated but not submitted. */1835	if (nr_stripes % SCRUB_STRIPES_PER_GROUP) {1836		const int first_slot = round_down(nr_stripes, SCRUB_STRIPES_PER_GROUP);1837 1838		submit_initial_group_read(sctx, first_slot, nr_stripes - first_slot);1839	}1840 1841	for (int i = 0; i < nr_stripes; i++) {1842		stripe = &sctx->stripes[i];1843 1844		wait_event(stripe->repair_wait,1845			   test_bit(SCRUB_STRIPE_FLAG_REPAIR_DONE, &stripe->state));1846	}1847 1848	/* Submit for dev-replace. */1849	if (sctx->is_dev_replace) {1850		/*1851		 * For dev-replace, if we know there is something wrong with1852		 * metadata, we should immediately abort.1853		 */1854		for (int i = 0; i < nr_stripes; i++) {1855			if (stripe_has_metadata_error(&sctx->stripes[i])) {1856				ret = -EIO;1857				goto out;1858			}1859		}1860		for (int i = 0; i < nr_stripes; i++) {1861			unsigned long good;1862 1863			stripe = &sctx->stripes[i];1864 1865			ASSERT(stripe->dev == fs_info->dev_replace.srcdev);1866 1867			bitmap_andnot(&good, &stripe->extent_sector_bitmap,1868				      &stripe->error_bitmap, stripe->nr_sectors);1869			scrub_write_sectors(sctx, stripe, good, true);1870		}1871	}1872 1873	/* Wait for the above writebacks to finish. */1874	for (int i = 0; i < nr_stripes; i++) {1875		stripe = &sctx->stripes[i];1876 1877		wait_scrub_stripe_io(stripe);1878		spin_lock(&sctx->stat_lock);1879		sctx->stat.last_physical = stripe->physical + stripe_length(stripe);1880		spin_unlock(&sctx->stat_lock);1881		scrub_reset_stripe(stripe);1882	}1883out:1884	sctx->cur_stripe = 0;1885	return ret;1886}1887 1888static void raid56_scrub_wait_endio(struct bio *bio)1889{1890	complete(bio->bi_private);1891}1892 1893static int queue_scrub_stripe(struct scrub_ctx *sctx, struct btrfs_block_group *bg,1894			      struct btrfs_device *dev, int mirror_num,1895			      u64 logical, u32 length, u64 physical,1896			      u64 *found_logical_ret)1897{1898	struct scrub_stripe *stripe;1899	int ret;1900 1901	/*1902	 * There should always be one slot left, as caller filling the last1903	 * slot should flush them all.1904	 */1905	ASSERT(sctx->cur_stripe < SCRUB_TOTAL_STRIPES);1906 1907	/* @found_logical_ret must be specified. */1908	ASSERT(found_logical_ret);1909 1910	stripe = &sctx->stripes[sctx->cur_stripe];1911	scrub_reset_stripe(stripe);1912	ret = scrub_find_fill_first_stripe(bg, &sctx->extent_path,1913					   &sctx->csum_path, dev, physical,1914					   mirror_num, logical, length, stripe);1915	/* Either >0 as no more extents or <0 for error. */1916	if (ret)1917		return ret;1918	*found_logical_ret = stripe->logical;1919	sctx->cur_stripe++;1920 1921	/* We filled one group, submit it. */1922	if (sctx->cur_stripe % SCRUB_STRIPES_PER_GROUP == 0) {1923		const int first_slot = sctx->cur_stripe - SCRUB_STRIPES_PER_GROUP;1924 1925		submit_initial_group_read(sctx, first_slot, SCRUB_STRIPES_PER_GROUP);1926	}1927 1928	/* Last slot used, flush them all. */1929	if (sctx->cur_stripe == SCRUB_TOTAL_STRIPES)1930		return flush_scrub_stripes(sctx);1931	return 0;1932}1933 1934static int scrub_raid56_parity_stripe(struct scrub_ctx *sctx,1935				      struct btrfs_device *scrub_dev,1936				      struct btrfs_block_group *bg,1937				      struct btrfs_chunk_map *map,1938				      u64 full_stripe_start)1939{1940	DECLARE_COMPLETION_ONSTACK(io_done);1941	struct btrfs_fs_info *fs_info = sctx->fs_info;1942	struct btrfs_raid_bio *rbio;1943	struct btrfs_io_context *bioc = NULL;1944	struct btrfs_path extent_path = { 0 };1945	struct btrfs_path csum_path = { 0 };1946	struct bio *bio;1947	struct scrub_stripe *stripe;1948	bool all_empty = true;1949	const int data_stripes = nr_data_stripes(map);1950	unsigned long extent_bitmap = 0;1951	u64 length = btrfs_stripe_nr_to_offset(data_stripes);1952	int ret;1953 1954	ASSERT(sctx->raid56_data_stripes);1955 1956	/*1957	 * For data stripe search, we cannot re-use the same extent/csum paths,1958	 * as the data stripe bytenr may be smaller than previous extent.  Thus1959	 * we have to use our own extent/csum paths.1960	 */1961	extent_path.search_commit_root = 1;1962	extent_path.skip_locking = 1;1963	csum_path.search_commit_root = 1;1964	csum_path.skip_locking = 1;1965 1966	for (int i = 0; i < data_stripes; i++) {1967		int stripe_index;1968		int rot;1969		u64 physical;1970 1971		stripe = &sctx->raid56_data_stripes[i];1972		rot = div_u64(full_stripe_start - bg->start,1973			      data_stripes) >> BTRFS_STRIPE_LEN_SHIFT;1974		stripe_index = (i + rot) % map->num_stripes;1975		physical = map->stripes[stripe_index].physical +1976			   btrfs_stripe_nr_to_offset(rot);1977 1978		scrub_reset_stripe(stripe);1979		set_bit(SCRUB_STRIPE_FLAG_NO_REPORT, &stripe->state);1980		ret = scrub_find_fill_first_stripe(bg, &extent_path, &csum_path,1981				map->stripes[stripe_index].dev, physical, 1,1982				full_stripe_start + btrfs_stripe_nr_to_offset(i),1983				BTRFS_STRIPE_LEN, stripe);1984		if (ret < 0)1985			goto out;1986		/*1987		 * No extent in this data stripe, need to manually mark them1988		 * initialized to make later read submission happy.1989		 */1990		if (ret > 0) {1991			stripe->logical = full_stripe_start +1992					  btrfs_stripe_nr_to_offset(i);1993			stripe->dev = map->stripes[stripe_index].dev;1994			stripe->mirror_num = 1;1995			set_bit(SCRUB_STRIPE_FLAG_INITIALIZED, &stripe->state);1996		}1997	}1998 1999	/* Check if all data stripes are empty. */2000	for (int i = 0; i < data_stripes; i++) {2001		stripe = &sctx->raid56_data_stripes[i];2002		if (!bitmap_empty(&stripe->extent_sector_bitmap, stripe->nr_sectors)) {2003			all_empty = false;2004			break;2005		}2006	}2007	if (all_empty) {2008		ret = 0;2009		goto out;2010	}2011 2012	for (int i = 0; i < data_stripes; i++) {2013		stripe = &sctx->raid56_data_stripes[i];2014		scrub_submit_initial_read(sctx, stripe);2015	}2016	for (int i = 0; i < data_stripes; i++) {2017		stripe = &sctx->raid56_data_stripes[i];2018 2019		wait_event(stripe->repair_wait,2020			   test_bit(SCRUB_STRIPE_FLAG_REPAIR_DONE, &stripe->state));2021	}2022	/* For now, no zoned support for RAID56. */2023	ASSERT(!btrfs_is_zoned(sctx->fs_info));2024 2025	/*2026	 * Now all data stripes are properly verified. Check if we have any2027	 * unrepaired, if so abort immediately or we could further corrupt the2028	 * P/Q stripes.2029	 *2030	 * During the loop, also populate extent_bitmap.2031	 */2032	for (int i = 0; i < data_stripes; i++) {2033		unsigned long error;2034 2035		stripe = &sctx->raid56_data_stripes[i];2036 2037		/*2038		 * We should only check the errors where there is an extent.2039		 * As we may hit an empty data stripe while it's missing.2040		 */2041		bitmap_and(&error, &stripe->error_bitmap,2042			   &stripe->extent_sector_bitmap, stripe->nr_sectors);2043		if (!bitmap_empty(&error, stripe->nr_sectors)) {2044			btrfs_err(fs_info,2045"unrepaired sectors detected, full stripe %llu data stripe %u errors %*pbl",2046				  full_stripe_start, i, stripe->nr_sectors,2047				  &error);2048			ret = -EIO;2049			goto out;2050		}2051		bitmap_or(&extent_bitmap, &extent_bitmap,2052			  &stripe->extent_sector_bitmap, stripe->nr_sectors);2053	}2054 2055	/* Now we can check and regenerate the P/Q stripe. */2056	bio = bio_alloc(NULL, 1, REQ_OP_READ, GFP_NOFS);2057	bio->bi_iter.bi_sector = full_stripe_start >> SECTOR_SHIFT;2058	bio->bi_private = &io_done;2059	bio->bi_end_io = raid56_scrub_wait_endio;2060 2061	btrfs_bio_counter_inc_blocked(fs_info);2062	ret = btrfs_map_block(fs_info, BTRFS_MAP_WRITE, full_stripe_start,2063			      &length, &bioc, NULL, NULL);2064	if (ret < 0) {2065		btrfs_put_bioc(bioc);2066		btrfs_bio_counter_dec(fs_info);2067		goto out;2068	}2069	rbio = raid56_parity_alloc_scrub_rbio(bio, bioc, scrub_dev, &extent_bitmap,2070				BTRFS_STRIPE_LEN >> fs_info->sectorsize_bits);2071	btrfs_put_bioc(bioc);2072	if (!rbio) {2073		ret = -ENOMEM;2074		btrfs_bio_counter_dec(fs_info);2075		goto out;2076	}2077	/* Use the recovered stripes as cache to avoid read them from disk again. */2078	for (int i = 0; i < data_stripes; i++) {2079		stripe = &sctx->raid56_data_stripes[i];2080 2081		raid56_parity_cache_data_pages(rbio, stripe->pages,2082				full_stripe_start + (i << BTRFS_STRIPE_LEN_SHIFT));2083	}2084	raid56_parity_submit_scrub_rbio(rbio);2085	wait_for_completion_io(&io_done);2086	ret = blk_status_to_errno(bio->bi_status);2087	bio_put(bio);2088	btrfs_bio_counter_dec(fs_info);2089 2090	btrfs_release_path(&extent_path);2091	btrfs_release_path(&csum_path);2092out:2093	return ret;2094}2095 2096/*2097 * Scrub one range which can only has simple mirror based profile.2098 * (Including all range in SINGLE/DUP/RAID1/RAID1C*, and each stripe in2099 *  RAID0/RAID10).2100 *2101 * Since we may need to handle a subset of block group, we need @logical_start2102 * and @logical_length parameter.2103 */2104static int scrub_simple_mirror(struct scrub_ctx *sctx,2105			       struct btrfs_block_group *bg,2106			       struct btrfs_chunk_map *map,2107			       u64 logical_start, u64 logical_length,2108			       struct btrfs_device *device,2109			       u64 physical, int mirror_num)2110{2111	struct btrfs_fs_info *fs_info = sctx->fs_info;2112	const u64 logical_end = logical_start + logical_length;2113	u64 cur_logical = logical_start;2114	int ret = 0;2115 2116	/* The range must be inside the bg */2117	ASSERT(logical_start >= bg->start && logical_end <= bg->start + bg->length);2118 2119	/* Go through each extent items inside the logical range */2120	while (cur_logical < logical_end) {2121		u64 found_logical = U64_MAX;2122		u64 cur_physical = physical + cur_logical - logical_start;2123 2124		/* Canceled? */2125		if (atomic_read(&fs_info->scrub_cancel_req) ||2126		    atomic_read(&sctx->cancel_req)) {2127			ret = -ECANCELED;2128			break;2129		}2130		/* Paused? */2131		if (atomic_read(&fs_info->scrub_pause_req)) {2132			/* Push queued extents */2133			scrub_blocked_if_needed(fs_info);2134		}2135		/* Block group removed? */2136		spin_lock(&bg->lock);2137		if (test_bit(BLOCK_GROUP_FLAG_REMOVED, &bg->runtime_flags)) {2138			spin_unlock(&bg->lock);2139			ret = 0;2140			break;2141		}2142		spin_unlock(&bg->lock);2143 2144		ret = queue_scrub_stripe(sctx, bg, device, mirror_num,2145					 cur_logical, logical_end - cur_logical,2146					 cur_physical, &found_logical);2147		if (ret > 0) {2148			/* No more extent, just update the accounting */2149			spin_lock(&sctx->stat_lock);2150			sctx->stat.last_physical = physical + logical_length;2151			spin_unlock(&sctx->stat_lock);2152			ret = 0;2153			break;2154		}2155		if (ret < 0)2156			break;2157 2158		/* queue_scrub_stripe() returned 0, @found_logical must be updated. */2159		ASSERT(found_logical != U64_MAX);2160		cur_logical = found_logical + BTRFS_STRIPE_LEN;2161 2162		/* Don't hold CPU for too long time */2163		cond_resched();2164	}2165	return ret;2166}2167 2168/* Calculate the full stripe length for simple stripe based profiles */2169static u64 simple_stripe_full_stripe_len(const struct btrfs_chunk_map *map)2170{2171	ASSERT(map->type & (BTRFS_BLOCK_GROUP_RAID0 |2172			    BTRFS_BLOCK_GROUP_RAID10));2173 2174	return btrfs_stripe_nr_to_offset(map->num_stripes / map->sub_stripes);2175}2176 2177/* Get the logical bytenr for the stripe */2178static u64 simple_stripe_get_logical(struct btrfs_chunk_map *map,2179				     struct btrfs_block_group *bg,2180				     int stripe_index)2181{2182	ASSERT(map->type & (BTRFS_BLOCK_GROUP_RAID0 |2183			    BTRFS_BLOCK_GROUP_RAID10));2184	ASSERT(stripe_index < map->num_stripes);2185 2186	/*2187	 * (stripe_index / sub_stripes) gives how many data stripes we need to2188	 * skip.2189	 */2190	return btrfs_stripe_nr_to_offset(stripe_index / map->sub_stripes) +2191	       bg->start;2192}2193 2194/* Get the mirror number for the stripe */2195static int simple_stripe_mirror_num(struct btrfs_chunk_map *map, int stripe_index)2196{2197	ASSERT(map->type & (BTRFS_BLOCK_GROUP_RAID0 |2198			    BTRFS_BLOCK_GROUP_RAID10));2199	ASSERT(stripe_index < map->num_stripes);2200 2201	/* For RAID0, it's fixed to 1, for RAID10 it's 0,1,0,1... */2202	return stripe_index % map->sub_stripes + 1;2203}2204 2205static int scrub_simple_stripe(struct scrub_ctx *sctx,2206			       struct btrfs_block_group *bg,2207			       struct btrfs_chunk_map *map,2208			       struct btrfs_device *device,2209			       int stripe_index)2210{2211	const u64 logical_increment = simple_stripe_full_stripe_len(map);2212	const u64 orig_logical = simple_stripe_get_logical(map, bg, stripe_index);2213	const u64 orig_physical = map->stripes[stripe_index].physical;2214	const int mirror_num = simple_stripe_mirror_num(map, stripe_index);2215	u64 cur_logical = orig_logical;2216	u64 cur_physical = orig_physical;2217	int ret = 0;2218 2219	while (cur_logical < bg->start + bg->length) {2220		/*2221		 * Inside each stripe, RAID0 is just SINGLE, and RAID10 is2222		 * just RAID1, so we can reuse scrub_simple_mirror() to scrub2223		 * this stripe.2224		 */2225		ret = scrub_simple_mirror(sctx, bg, map, cur_logical,2226					  BTRFS_STRIPE_LEN, device, cur_physical,2227					  mirror_num);2228		if (ret)2229			return ret;2230		/* Skip to next stripe which belongs to the target device */2231		cur_logical += logical_increment;2232		/* For physical offset, we just go to next stripe */2233		cur_physical += BTRFS_STRIPE_LEN;2234	}2235	return ret;2236}2237 2238static noinline_for_stack int scrub_stripe(struct scrub_ctx *sctx,2239					   struct btrfs_block_group *bg,2240					   struct btrfs_chunk_map *map,2241					   struct btrfs_device *scrub_dev,2242					   int stripe_index)2243{2244	struct btrfs_fs_info *fs_info = sctx->fs_info;2245	const u64 profile = map->type & BTRFS_BLOCK_GROUP_PROFILE_MASK;2246	const u64 chunk_logical = bg->start;2247	int ret;2248	int ret2;2249	u64 physical = map->stripes[stripe_index].physical;2250	const u64 dev_stripe_len = btrfs_calc_stripe_length(map);2251	const u64 physical_end = physical + dev_stripe_len;2252	u64 logical;2253	u64 logic_end;2254	/* The logical increment after finishing one stripe */2255	u64 increment;2256	/* Offset inside the chunk */2257	u64 offset;2258	u64 stripe_logical;2259	int stop_loop = 0;2260 2261	/* Extent_path should be released by now. */2262	ASSERT(sctx->extent_path.nodes[0] == NULL);2263 2264	scrub_blocked_if_needed(fs_info);2265 2266	if (sctx->is_dev_replace &&2267	    btrfs_dev_is_sequential(sctx->wr_tgtdev, physical)) {2268		mutex_lock(&sctx->wr_lock);2269		sctx->write_pointer = physical;2270		mutex_unlock(&sctx->wr_lock);2271	}2272 2273	/* Prepare the extra data stripes used by RAID56. */2274	if (profile & BTRFS_BLOCK_GROUP_RAID56_MASK) {2275		ASSERT(sctx->raid56_data_stripes == NULL);2276 2277		sctx->raid56_data_stripes = kcalloc(nr_data_stripes(map),2278						    sizeof(struct scrub_stripe),2279						    GFP_KERNEL);2280		if (!sctx->raid56_data_stripes) {2281			ret = -ENOMEM;2282			goto out;2283		}2284		for (int i = 0; i < nr_data_stripes(map); i++) {2285			ret = init_scrub_stripe(fs_info,2286						&sctx->raid56_data_stripes[i]);2287			if (ret < 0)2288				goto out;2289			sctx->raid56_data_stripes[i].bg = bg;2290			sctx->raid56_data_stripes[i].sctx = sctx;2291		}2292	}2293	/*2294	 * There used to be a big double loop to handle all profiles using the2295	 * same routine, which grows larger and more gross over time.2296	 *2297	 * So here we handle each profile differently, so simpler profiles2298	 * have simpler scrubbing function.2299	 */2300	if (!(profile & (BTRFS_BLOCK_GROUP_RAID0 | BTRFS_BLOCK_GROUP_RAID10 |2301			 BTRFS_BLOCK_GROUP_RAID56_MASK))) {2302		/*2303		 * Above check rules out all complex profile, the remaining2304		 * profiles are SINGLE|DUP|RAID1|RAID1C*, which is simple2305		 * mirrored duplication without stripe.2306		 *2307		 * Only @physical and @mirror_num needs to calculated using2308		 * @stripe_index.2309		 */2310		ret = scrub_simple_mirror(sctx, bg, map, bg->start, bg->length,2311				scrub_dev, map->stripes[stripe_index].physical,2312				stripe_index + 1);2313		offset = 0;2314		goto out;2315	}2316	if (profile & (BTRFS_BLOCK_GROUP_RAID0 | BTRFS_BLOCK_GROUP_RAID10)) {2317		ret = scrub_simple_stripe(sctx, bg, map, scrub_dev, stripe_index);2318		offset = btrfs_stripe_nr_to_offset(stripe_index / map->sub_stripes);2319		goto out;2320	}2321 2322	/* Only RAID56 goes through the old code */2323	ASSERT(map->type & BTRFS_BLOCK_GROUP_RAID56_MASK);2324	ret = 0;2325 2326	/* Calculate the logical end of the stripe */2327	get_raid56_logic_offset(physical_end, stripe_index,2328				map, &logic_end, NULL);2329	logic_end += chunk_logical;2330 2331	/* Initialize @offset in case we need to go to out: label */2332	get_raid56_logic_offset(physical, stripe_index, map, &offset, NULL);2333	increment = btrfs_stripe_nr_to_offset(nr_data_stripes(map));2334 2335	/*2336	 * Due to the rotation, for RAID56 it's better to iterate each stripe2337	 * using their physical offset.2338	 */2339	while (physical < physical_end) {2340		ret = get_raid56_logic_offset(physical, stripe_index, map,2341					      &logical, &stripe_logical);2342		logical += chunk_logical;2343		if (ret) {2344			/* it is parity strip */2345			stripe_logical += chunk_logical;2346			ret = scrub_raid56_parity_stripe(sctx, scrub_dev, bg,2347							 map, stripe_logical);2348			spin_lock(&sctx->stat_lock);2349			sctx->stat.last_physical = min(physical + BTRFS_STRIPE_LEN,2350						       physical_end);2351			spin_unlock(&sctx->stat_lock);2352			if (ret)2353				goto out;2354			goto next;2355		}2356 2357		/*2358		 * Now we're at a data stripe, scrub each extents in the range.2359		 *2360		 * At this stage, if we ignore the repair part, inside each data2361		 * stripe it is no different than SINGLE profile.2362		 * We can reuse scrub_simple_mirror() here, as the repair part2363		 * is still based on @mirror_num.2364		 */2365		ret = scrub_simple_mirror(sctx, bg, map, logical, BTRFS_STRIPE_LEN,2366					  scrub_dev, physical, 1);2367		if (ret < 0)2368			goto out;2369next:2370		logical += increment;2371		physical += BTRFS_STRIPE_LEN;2372		spin_lock(&sctx->stat_lock);2373		if (stop_loop)2374			sctx->stat.last_physical =2375				map->stripes[stripe_index].physical + dev_stripe_len;2376		else2377			sctx->stat.last_physical = physical;2378		spin_unlock(&sctx->stat_lock);2379		if (stop_loop)2380			break;2381	}2382out:2383	ret2 = flush_scrub_stripes(sctx);2384	if (!ret)2385		ret = ret2;2386	btrfs_release_path(&sctx->extent_path);2387	btrfs_release_path(&sctx->csum_path);2388 2389	if (sctx->raid56_data_stripes) {2390		for (int i = 0; i < nr_data_stripes(map); i++)2391			release_scrub_stripe(&sctx->raid56_data_stripes[i]);2392		kfree(sctx->raid56_data_stripes);2393		sctx->raid56_data_stripes = NULL;2394	}2395 2396	if (sctx->is_dev_replace && ret >= 0) {2397		int ret2;2398 2399		ret2 = sync_write_pointer_for_zoned(sctx,2400				chunk_logical + offset,2401				map->stripes[stripe_index].physical,2402				physical_end);2403		if (ret2)2404			ret = ret2;2405	}2406 2407	return ret < 0 ? ret : 0;2408}2409 2410static noinline_for_stack int scrub_chunk(struct scrub_ctx *sctx,2411					  struct btrfs_block_group *bg,2412					  struct btrfs_device *scrub_dev,2413					  u64 dev_offset,2414					  u64 dev_extent_len)2415{2416	struct btrfs_fs_info *fs_info = sctx->fs_info;2417	struct btrfs_chunk_map *map;2418	int i;2419	int ret = 0;2420 2421	map = btrfs_find_chunk_map(fs_info, bg->start, bg->length);2422	if (!map) {2423		/*2424		 * Might have been an unused block group deleted by the cleaner2425		 * kthread or relocation.2426		 */2427		spin_lock(&bg->lock);2428		if (!test_bit(BLOCK_GROUP_FLAG_REMOVED, &bg->runtime_flags))2429			ret = -EINVAL;2430		spin_unlock(&bg->lock);2431 2432		return ret;2433	}2434	if (map->start != bg->start)2435		goto out;2436	if (map->chunk_len < dev_extent_len)2437		goto out;2438 2439	for (i = 0; i < map->num_stripes; ++i) {2440		if (map->stripes[i].dev->bdev == scrub_dev->bdev &&2441		    map->stripes[i].physical == dev_offset) {2442			ret = scrub_stripe(sctx, bg, map, scrub_dev, i);2443			if (ret)2444				goto out;2445		}2446	}2447out:2448	btrfs_free_chunk_map(map);2449 2450	return ret;2451}2452 2453static int finish_extent_writes_for_zoned(struct btrfs_root *root,2454					  struct btrfs_block_group *cache)2455{2456	struct btrfs_fs_info *fs_info = cache->fs_info;2457 2458	if (!btrfs_is_zoned(fs_info))2459		return 0;2460 2461	btrfs_wait_block_group_reservations(cache);2462	btrfs_wait_nocow_writers(cache);2463	btrfs_wait_ordered_roots(fs_info, U64_MAX, cache);2464 2465	return btrfs_commit_current_transaction(root);2466}2467 2468static noinline_for_stack2469int scrub_enumerate_chunks(struct scrub_ctx *sctx,2470			   struct btrfs_device *scrub_dev, u64 start, u64 end)2471{2472	struct btrfs_dev_extent *dev_extent = NULL;2473	struct btrfs_path *path;2474	struct btrfs_fs_info *fs_info = sctx->fs_info;2475	struct btrfs_root *root = fs_info->dev_root;2476	u64 chunk_offset;2477	int ret = 0;2478	int ro_set;2479	int slot;2480	struct extent_buffer *l;2481	struct btrfs_key key;2482	struct btrfs_key found_key;2483	struct btrfs_block_group *cache;2484	struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;2485 2486	path = btrfs_alloc_path();2487	if (!path)2488		return -ENOMEM;2489 2490	path->reada = READA_FORWARD;2491	path->search_commit_root = 1;2492	path->skip_locking = 1;2493 2494	key.objectid = scrub_dev->devid;2495	key.offset = 0ull;2496	key.type = BTRFS_DEV_EXTENT_KEY;2497 2498	while (1) {2499		u64 dev_extent_len;2500 2501		ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);2502		if (ret < 0)2503			break;2504		if (ret > 0) {2505			if (path->slots[0] >=2506			    btrfs_header_nritems(path->nodes[0])) {2507				ret = btrfs_next_leaf(root, path);2508				if (ret < 0)2509					break;2510				if (ret > 0) {2511					ret = 0;2512					break;2513				}2514			} else {2515				ret = 0;2516			}2517		}2518 2519		l = path->nodes[0];2520		slot = path->slots[0];2521 2522		btrfs_item_key_to_cpu(l, &found_key, slot);2523 2524		if (found_key.objectid != scrub_dev->devid)2525			break;2526 2527		if (found_key.type != BTRFS_DEV_EXTENT_KEY)2528			break;2529 2530		if (found_key.offset >= end)2531			break;2532 2533		if (found_key.offset < key.offset)2534			break;2535 2536		dev_extent = btrfs_item_ptr(l, slot, struct btrfs_dev_extent);2537		dev_extent_len = btrfs_dev_extent_length(l, dev_extent);2538 2539		if (found_key.offset + dev_extent_len <= start)2540			goto skip;2541 2542		chunk_offset = btrfs_dev_extent_chunk_offset(l, dev_extent);2543 2544		/*2545		 * get a reference on the corresponding block group to prevent2546		 * the chunk from going away while we scrub it2547		 */2548		cache = btrfs_lookup_block_group(fs_info, chunk_offset);2549 2550		/* some chunks are removed but not committed to disk yet,2551		 * continue scrubbing */2552		if (!cache)2553			goto skip;2554 2555		ASSERT(cache->start <= chunk_offset);2556		/*2557		 * We are using the commit root to search for device extents, so2558		 * that means we could have found a device extent item from a2559		 * block group that was deleted in the current transaction. The2560		 * logical start offset of the deleted block group, stored at2561		 * @chunk_offset, might be part of the logical address range of2562		 * a new block group (which uses different physical extents).2563		 * In this case btrfs_lookup_block_group() has returned the new2564		 * block group, and its start address is less than @chunk_offset.2565		 *2566		 * We skip such new block groups, because it's pointless to2567		 * process them, as we won't find their extents because we search2568		 * for them using the commit root of the extent tree. For a device2569		 * replace it's also fine to skip it, we won't miss copying them2570		 * to the target device because we have the write duplication2571		 * setup through the regular write path (by btrfs_map_block()),2572		 * and we have committed a transaction when we started the device2573		 * replace, right after setting up the device replace state.2574		 */2575		if (cache->start < chunk_offset) {2576			btrfs_put_block_group(cache);2577			goto skip;2578		}2579 2580		if (sctx->is_dev_replace && btrfs_is_zoned(fs_info)) {2581			if (!test_bit(BLOCK_GROUP_FLAG_TO_COPY, &cache->runtime_flags)) {2582				btrfs_put_block_group(cache);2583				goto skip;2584			}2585		}2586 2587		/*2588		 * Make sure that while we are scrubbing the corresponding block2589		 * group doesn't get its logical address and its device extents2590		 * reused for another block group, which can possibly be of a2591		 * different type and different profile. We do this to prevent2592		 * false error detections and crashes due to bogus attempts to2593		 * repair extents.2594		 */2595		spin_lock(&cache->lock);2596		if (test_bit(BLOCK_GROUP_FLAG_REMOVED, &cache->runtime_flags)) {2597			spin_unlock(&cache->lock);2598			btrfs_put_block_group(cache);2599			goto skip;2600		}2601		btrfs_freeze_block_group(cache);2602		spin_unlock(&cache->lock);2603 2604		/*2605		 * we need call btrfs_inc_block_group_ro() with scrubs_paused,2606		 * to avoid deadlock caused by:2607		 * btrfs_inc_block_group_ro()2608		 * -> btrfs_wait_for_commit()2609		 * -> btrfs_commit_transaction()2610		 * -> btrfs_scrub_pause()2611		 */2612		scrub_pause_on(fs_info);2613 2614		/*2615		 * Don't do chunk preallocation for scrub.2616		 *2617		 * This is especially important for SYSTEM bgs, or we can hit2618		 * -EFBIG from btrfs_finish_chunk_alloc() like:2619		 * 1. The only SYSTEM bg is marked RO.2620		 *    Since SYSTEM bg is small, that's pretty common.2621		 * 2. New SYSTEM bg will be allocated2622		 *    Due to regular version will allocate new chunk.2623		 * 3. New SYSTEM bg is empty and will get cleaned up2624		 *    Before cleanup really happens, it's marked RO again.2625		 * 4. Empty SYSTEM bg get scrubbed2626		 *    We go back to 2.2627		 *2628		 * This can easily boost the amount of SYSTEM chunks if cleaner2629		 * thread can't be triggered fast enough, and use up all space2630		 * of btrfs_super_block::sys_chunk_array2631		 *2632		 * While for dev replace, we need to try our best to mark block2633		 * group RO, to prevent race between:2634		 * - Write duplication2635		 *   Contains latest data2636		 * - Scrub copy2637		 *   Contains data from commit tree2638		 *2639		 * If target block group is not marked RO, nocow writes can2640		 * be overwritten by scrub copy, causing data corruption.2641		 * So for dev-replace, it's not allowed to continue if a block2642		 * group is not RO.2643		 */2644		ret = btrfs_inc_block_group_ro(cache, sctx->is_dev_replace);2645		if (!ret && sctx->is_dev_replace) {2646			ret = finish_extent_writes_for_zoned(root, cache);2647			if (ret) {2648				btrfs_dec_block_group_ro(cache);2649				scrub_pause_off(fs_info);2650				btrfs_put_block_group(cache);2651				break;2652			}2653		}2654 2655		if (ret == 0) {2656			ro_set = 1;2657		} else if (ret == -ENOSPC && !sctx->is_dev_replace &&2658			   !(cache->flags & BTRFS_BLOCK_GROUP_RAID56_MASK)) {2659			/*2660			 * btrfs_inc_block_group_ro return -ENOSPC when it2661			 * failed in creating new chunk for metadata.2662			 * It is not a problem for scrub, because2663			 * metadata are always cowed, and our scrub paused2664			 * commit_transactions.2665			 *2666			 * For RAID56 chunks, we have to mark them read-only2667			 * for scrub, as later we would use our own cache2668			 * out of RAID56 realm.2669			 * Thus we want the RAID56 bg to be marked RO to2670			 * prevent RMW from screwing up out cache.2671			 */2672			ro_set = 0;2673		} else if (ret == -ETXTBSY) {2674			btrfs_warn(fs_info,2675		   "skipping scrub of block group %llu due to active swapfile",2676				   cache->start);2677			scrub_pause_off(fs_info);2678			ret = 0;2679			goto skip_unfreeze;2680		} else {2681			btrfs_warn(fs_info,2682				   "failed setting block group ro: %d", ret);2683			btrfs_unfreeze_block_group(cache);2684			btrfs_put_block_group(cache);2685			scrub_pause_off(fs_info);2686			break;2687		}2688 2689		/*2690		 * Now the target block is marked RO, wait for nocow writes to2691		 * finish before dev-replace.2692		 * COW is fine, as COW never overwrites extents in commit tree.2693		 */2694		if (sctx->is_dev_replace) {2695			btrfs_wait_nocow_writers(cache);2696			btrfs_wait_ordered_roots(fs_info, U64_MAX, cache);2697		}2698 2699		scrub_pause_off(fs_info);2700		down_write(&dev_replace->rwsem);2701		dev_replace->cursor_right = found_key.offset + dev_extent_len;2702		dev_replace->cursor_left = found_key.offset;2703		dev_replace->item_needs_writeback = 1;2704		up_write(&dev_replace->rwsem);2705 2706		ret = scrub_chunk(sctx, cache, scrub_dev, found_key.offset,2707				  dev_extent_len);2708		if (sctx->is_dev_replace &&2709		    !btrfs_finish_block_group_to_copy(dev_replace->srcdev,2710						      cache, found_key.offset))2711			ro_set = 0;2712 2713		down_write(&dev_replace->rwsem);2714		dev_replace->cursor_left = dev_replace->cursor_right;2715		dev_replace->item_needs_writeback = 1;2716		up_write(&dev_replace->rwsem);2717 2718		if (ro_set)2719			btrfs_dec_block_group_ro(cache);2720 2721		/*2722		 * We might have prevented the cleaner kthread from deleting2723		 * this block group if it was already unused because we raced2724		 * and set it to RO mode first. So add it back to the unused2725		 * list, otherwise it might not ever be deleted unless a manual2726		 * balance is triggered or it becomes used and unused again.2727		 */2728		spin_lock(&cache->lock);2729		if (!test_bit(BLOCK_GROUP_FLAG_REMOVED, &cache->runtime_flags) &&2730		    !cache->ro && cache->reserved == 0 && cache->used == 0) {2731			spin_unlock(&cache->lock);2732			if (btrfs_test_opt(fs_info, DISCARD_ASYNC))2733				btrfs_discard_queue_work(&fs_info->discard_ctl,2734							 cache);2735			else2736				btrfs_mark_bg_unused(cache);2737		} else {2738			spin_unlock(&cache->lock);2739		}2740skip_unfreeze:2741		btrfs_unfreeze_block_group(cache);2742		btrfs_put_block_group(cache);2743		if (ret)2744			break;2745		if (sctx->is_dev_replace &&2746		    atomic64_read(&dev_replace->num_write_errors) > 0) {2747			ret = -EIO;2748			break;2749		}2750		if (sctx->stat.malloc_errors > 0) {2751			ret = -ENOMEM;2752			break;2753		}2754skip:2755		key.offset = found_key.offset + dev_extent_len;2756		btrfs_release_path(path);2757	}2758 2759	btrfs_free_path(path);2760 2761	return ret;2762}2763 2764static int scrub_one_super(struct scrub_ctx *sctx, struct btrfs_device *dev,2765			   struct page *page, u64 physical, u64 generation)2766{2767	struct btrfs_fs_info *fs_info = sctx->fs_info;2768	struct bio_vec bvec;2769	struct bio bio;2770	struct btrfs_super_block *sb = page_address(page);2771	int ret;2772 2773	bio_init(&bio, dev->bdev, &bvec, 1, REQ_OP_READ);2774	bio.bi_iter.bi_sector = physical >> SECTOR_SHIFT;2775	__bio_add_page(&bio, page, BTRFS_SUPER_INFO_SIZE, 0);2776	ret = submit_bio_wait(&bio);2777	bio_uninit(&bio);2778 2779	if (ret < 0)2780		return ret;2781	ret = btrfs_check_super_csum(fs_info, sb);2782	if (ret != 0) {2783		btrfs_err_rl(fs_info,2784			"super block at physical %llu devid %llu has bad csum",2785			physical, dev->devid);2786		return -EIO;2787	}2788	if (btrfs_super_generation(sb) != generation) {2789		btrfs_err_rl(fs_info,2790"super block at physical %llu devid %llu has bad generation %llu expect %llu",2791			     physical, dev->devid,2792			     btrfs_super_generation(sb), generation);2793		return -EUCLEAN;2794	}2795 2796	return btrfs_validate_super(fs_info, sb, -1);2797}2798 2799static noinline_for_stack int scrub_supers(struct scrub_ctx *sctx,2800					   struct btrfs_device *scrub_dev)2801{2802	int	i;2803	u64	bytenr;2804	u64	gen;2805	int ret = 0;2806	struct page *page;2807	struct btrfs_fs_info *fs_info = sctx->fs_info;2808 2809	if (BTRFS_FS_ERROR(fs_info))2810		return -EROFS;2811 2812	page = alloc_page(GFP_KERNEL);2813	if (!page) {2814		spin_lock(&sctx->stat_lock);2815		sctx->stat.malloc_errors++;2816		spin_unlock(&sctx->stat_lock);2817		return -ENOMEM;2818	}2819 2820	/* Seed devices of a new filesystem has their own generation. */2821	if (scrub_dev->fs_devices != fs_info->fs_devices)2822		gen = scrub_dev->generation;2823	else2824		gen = btrfs_get_last_trans_committed(fs_info);2825 2826	for (i = 0; i < BTRFS_SUPER_MIRROR_MAX; i++) {2827		ret = btrfs_sb_log_location(scrub_dev, i, 0, &bytenr);2828		if (ret == -ENOENT)2829			break;2830 2831		if (ret) {2832			spin_lock(&sctx->stat_lock);2833			sctx->stat.super_errors++;2834			spin_unlock(&sctx->stat_lock);2835			continue;2836		}2837 2838		if (bytenr + BTRFS_SUPER_INFO_SIZE >2839		    scrub_dev->commit_total_bytes)2840			break;2841		if (!btrfs_check_super_location(scrub_dev, bytenr))2842			continue;2843 2844		ret = scrub_one_super(sctx, scrub_dev, page, bytenr, gen);2845		if (ret) {2846			spin_lock(&sctx->stat_lock);2847			sctx->stat.super_errors++;2848			spin_unlock(&sctx->stat_lock);2849		}2850	}2851	__free_page(page);2852	return 0;2853}2854 2855static void scrub_workers_put(struct btrfs_fs_info *fs_info)2856{2857	if (refcount_dec_and_mutex_lock(&fs_info->scrub_workers_refcnt,2858					&fs_info->scrub_lock)) {2859		struct workqueue_struct *scrub_workers = fs_info->scrub_workers;2860 2861		fs_info->scrub_workers = NULL;2862		mutex_unlock(&fs_info->scrub_lock);2863 2864		if (scrub_workers)2865			destroy_workqueue(scrub_workers);2866	}2867}2868 2869/*2870 * get a reference count on fs_info->scrub_workers. start worker if necessary2871 */2872static noinline_for_stack int scrub_workers_get(struct btrfs_fs_info *fs_info)2873{2874	struct workqueue_struct *scrub_workers = NULL;2875	unsigned int flags = WQ_FREEZABLE | WQ_UNBOUND;2876	int max_active = fs_info->thread_pool_size;2877	int ret = -ENOMEM;2878 2879	if (refcount_inc_not_zero(&fs_info->scrub_workers_refcnt))2880		return 0;2881 2882	scrub_workers = alloc_workqueue("btrfs-scrub", flags, max_active);2883	if (!scrub_workers)2884		return -ENOMEM;2885 2886	mutex_lock(&fs_info->scrub_lock);2887	if (refcount_read(&fs_info->scrub_workers_refcnt) == 0) {2888		ASSERT(fs_info->scrub_workers == NULL);2889		fs_info->scrub_workers = scrub_workers;2890		refcount_set(&fs_info->scrub_workers_refcnt, 1);2891		mutex_unlock(&fs_info->scrub_lock);2892		return 0;2893	}2894	/* Other thread raced in and created the workers for us */2895	refcount_inc(&fs_info->scrub_workers_refcnt);2896	mutex_unlock(&fs_info->scrub_lock);2897 2898	ret = 0;2899 2900	destroy_workqueue(scrub_workers);2901	return ret;2902}2903 2904int btrfs_scrub_dev(struct btrfs_fs_info *fs_info, u64 devid, u64 start,2905		    u64 end, struct btrfs_scrub_progress *progress,2906		    int readonly, int is_dev_replace)2907{2908	struct btrfs_dev_lookup_args args = { .devid = devid };2909	struct scrub_ctx *sctx;2910	int ret;2911	struct btrfs_device *dev;2912	unsigned int nofs_flag;2913	bool need_commit = false;2914 2915	if (btrfs_fs_closing(fs_info))2916		return -EAGAIN;2917 2918	/* At mount time we have ensured nodesize is in the range of [4K, 64K]. */2919	ASSERT(fs_info->nodesize <= BTRFS_STRIPE_LEN);2920 2921	/*2922	 * SCRUB_MAX_SECTORS_PER_BLOCK is calculated using the largest possible2923	 * value (max nodesize / min sectorsize), thus nodesize should always2924	 * be fine.2925	 */2926	ASSERT(fs_info->nodesize <=2927	       SCRUB_MAX_SECTORS_PER_BLOCK << fs_info->sectorsize_bits);2928 2929	/* Allocate outside of device_list_mutex */2930	sctx = scrub_setup_ctx(fs_info, is_dev_replace);2931	if (IS_ERR(sctx))2932		return PTR_ERR(sctx);2933 2934	ret = scrub_workers_get(fs_info);2935	if (ret)2936		goto out_free_ctx;2937 2938	mutex_lock(&fs_info->fs_devices->device_list_mutex);2939	dev = btrfs_find_device(fs_info->fs_devices, &args);2940	if (!dev || (test_bit(BTRFS_DEV_STATE_MISSING, &dev->dev_state) &&2941		     !is_dev_replace)) {2942		mutex_unlock(&fs_info->fs_devices->device_list_mutex);2943		ret = -ENODEV;2944		goto out;2945	}2946 2947	if (!is_dev_replace && !readonly &&2948	    !test_bit(BTRFS_DEV_STATE_WRITEABLE, &dev->dev_state)) {2949		mutex_unlock(&fs_info->fs_devices->device_list_mutex);2950		btrfs_err_in_rcu(fs_info,2951			"scrub on devid %llu: filesystem on %s is not writable",2952				 devid, btrfs_dev_name(dev));2953		ret = -EROFS;2954		goto out;2955	}2956 2957	mutex_lock(&fs_info->scrub_lock);2958	if (!test_bit(BTRFS_DEV_STATE_IN_FS_METADATA, &dev->dev_state) ||2959	    test_bit(BTRFS_DEV_STATE_REPLACE_TGT, &dev->dev_state)) {2960		mutex_unlock(&fs_info->scrub_lock);2961		mutex_unlock(&fs_info->fs_devices->device_list_mutex);2962		ret = -EIO;2963		goto out;2964	}2965 2966	down_read(&fs_info->dev_replace.rwsem);2967	if (dev->scrub_ctx ||2968	    (!is_dev_replace &&2969	     btrfs_dev_replace_is_ongoing(&fs_info->dev_replace))) {2970		up_read(&fs_info->dev_replace.rwsem);2971		mutex_unlock(&fs_info->scrub_lock);2972		mutex_unlock(&fs_info->fs_devices->device_list_mutex);2973		ret = -EINPROGRESS;2974		goto out;2975	}2976	up_read(&fs_info->dev_replace.rwsem);2977 2978	sctx->readonly = readonly;2979	dev->scrub_ctx = sctx;2980	mutex_unlock(&fs_info->fs_devices->device_list_mutex);2981 2982	/*2983	 * checking @scrub_pause_req here, we can avoid2984	 * race between committing transaction and scrubbing.2985	 */2986	__scrub_blocked_if_needed(fs_info);2987	atomic_inc(&fs_info->scrubs_running);2988	mutex_unlock(&fs_info->scrub_lock);2989 2990	/*2991	 * In order to avoid deadlock with reclaim when there is a transaction2992	 * trying to pause scrub, make sure we use GFP_NOFS for all the2993	 * allocations done at btrfs_scrub_sectors() and scrub_sectors_for_parity()2994	 * invoked by our callees. The pausing request is done when the2995	 * transaction commit starts, and it blocks the transaction until scrub2996	 * is paused (done at specific points at scrub_stripe() or right above2997	 * before incrementing fs_info->scrubs_running).2998	 */2999	nofs_flag = memalloc_nofs_save();3000	if (!is_dev_replace) {3001		u64 old_super_errors;3002 3003		spin_lock(&sctx->stat_lock);3004		old_super_errors = sctx->stat.super_errors;3005		spin_unlock(&sctx->stat_lock);3006 3007		btrfs_info(fs_info, "scrub: started on devid %llu", devid);3008		/*3009		 * by holding device list mutex, we can3010		 * kick off writing super in log tree sync.3011		 */3012		mutex_lock(&fs_info->fs_devices->device_list_mutex);3013		ret = scrub_supers(sctx, dev);3014		mutex_unlock(&fs_info->fs_devices->device_list_mutex);3015 3016		spin_lock(&sctx->stat_lock);3017		/*3018		 * Super block errors found, but we can not commit transaction3019		 * at current context, since btrfs_commit_transaction() needs3020		 * to pause the current running scrub (hold by ourselves).3021		 */3022		if (sctx->stat.super_errors > old_super_errors && !sctx->readonly)3023			need_commit = true;3024		spin_unlock(&sctx->stat_lock);3025	}3026 3027	if (!ret)3028		ret = scrub_enumerate_chunks(sctx, dev, start, end);3029	memalloc_nofs_restore(nofs_flag);3030 3031	atomic_dec(&fs_info->scrubs_running);3032	wake_up(&fs_info->scrub_pause_wait);3033 3034	if (progress)3035		memcpy(progress, &sctx->stat, sizeof(*progress));3036 3037	if (!is_dev_replace)3038		btrfs_info(fs_info, "scrub: %s on devid %llu with status: %d",3039			ret ? "not finished" : "finished", devid, ret);3040 3041	mutex_lock(&fs_info->scrub_lock);3042	dev->scrub_ctx = NULL;3043	mutex_unlock(&fs_info->scrub_lock);3044 3045	scrub_workers_put(fs_info);3046	scrub_put_ctx(sctx);3047 3048	/*3049	 * We found some super block errors before, now try to force a3050	 * transaction commit, as scrub has finished.3051	 */3052	if (need_commit) {3053		struct btrfs_trans_handle *trans;3054 3055		trans = btrfs_start_transaction(fs_info->tree_root, 0);3056		if (IS_ERR(trans)) {3057			ret = PTR_ERR(trans);3058			btrfs_err(fs_info,3059	"scrub: failed to start transaction to fix super block errors: %d", ret);3060			return ret;3061		}3062		ret = btrfs_commit_transaction(trans);3063		if (ret < 0)3064			btrfs_err(fs_info,3065	"scrub: failed to commit transaction to fix super block errors: %d", ret);3066	}3067	return ret;3068out:3069	scrub_workers_put(fs_info);3070out_free_ctx:3071	scrub_free_ctx(sctx);3072 3073	return ret;3074}3075 3076void btrfs_scrub_pause(struct btrfs_fs_info *fs_info)3077{3078	mutex_lock(&fs_info->scrub_lock);3079	atomic_inc(&fs_info->scrub_pause_req);3080	while (atomic_read(&fs_info->scrubs_paused) !=3081	       atomic_read(&fs_info->scrubs_running)) {3082		mutex_unlock(&fs_info->scrub_lock);3083		wait_event(fs_info->scrub_pause_wait,3084			   atomic_read(&fs_info->scrubs_paused) ==3085			   atomic_read(&fs_info->scrubs_running));3086		mutex_lock(&fs_info->scrub_lock);3087	}3088	mutex_unlock(&fs_info->scrub_lock);3089}3090 3091void btrfs_scrub_continue(struct btrfs_fs_info *fs_info)3092{3093	atomic_dec(&fs_info->scrub_pause_req);3094	wake_up(&fs_info->scrub_pause_wait);3095}3096 3097int btrfs_scrub_cancel(struct btrfs_fs_info *fs_info)3098{3099	mutex_lock(&fs_info->scrub_lock);3100	if (!atomic_read(&fs_info->scrubs_running)) {3101		mutex_unlock(&fs_info->scrub_lock);3102		return -ENOTCONN;3103	}3104 3105	atomic_inc(&fs_info->scrub_cancel_req);3106	while (atomic_read(&fs_info->scrubs_running)) {3107		mutex_unlock(&fs_info->scrub_lock);3108		wait_event(fs_info->scrub_pause_wait,3109			   atomic_read(&fs_info->scrubs_running) == 0);3110		mutex_lock(&fs_info->scrub_lock);3111	}3112	atomic_dec(&fs_info->scrub_cancel_req);3113	mutex_unlock(&fs_info->scrub_lock);3114 3115	return 0;3116}3117 3118int btrfs_scrub_cancel_dev(struct btrfs_device *dev)3119{3120	struct btrfs_fs_info *fs_info = dev->fs_info;3121	struct scrub_ctx *sctx;3122 3123	mutex_lock(&fs_info->scrub_lock);3124	sctx = dev->scrub_ctx;3125	if (!sctx) {3126		mutex_unlock(&fs_info->scrub_lock);3127		return -ENOTCONN;3128	}3129	atomic_inc(&sctx->cancel_req);3130	while (dev->scrub_ctx) {3131		mutex_unlock(&fs_info->scrub_lock);3132		wait_event(fs_info->scrub_pause_wait,3133			   dev->scrub_ctx == NULL);3134		mutex_lock(&fs_info->scrub_lock);3135	}3136	mutex_unlock(&fs_info->scrub_lock);3137 3138	return 0;3139}3140 3141int btrfs_scrub_progress(struct btrfs_fs_info *fs_info, u64 devid,3142			 struct btrfs_scrub_progress *progress)3143{3144	struct btrfs_dev_lookup_args args = { .devid = devid };3145	struct btrfs_device *dev;3146	struct scrub_ctx *sctx = NULL;3147 3148	mutex_lock(&fs_info->fs_devices->device_list_mutex);3149	dev = btrfs_find_device(fs_info->fs_devices, &args);3150	if (dev)3151		sctx = dev->scrub_ctx;3152	if (sctx)3153		memcpy(progress, &sctx->stat, sizeof(*progress));3154	mutex_unlock(&fs_info->fs_devices->device_list_mutex);3155 3156	return dev ? (sctx ? 0 : -ENOTCONN) : -ENODEV;3157}3158