3345 lines · 90.8 KB · C
RawDownload
/* * raid1.c : Multiple Devices driver for Linux * * Copyright (C) 1999, 2000, 2001 Ingo Molnar, Red Hat * * Copyright (C) 1996, 1997, 1998 Ingo Molnar, Miguel de Icaza, Gadi Oxman * * RAID-1 management functions. * * Better read-balancing code written by Mika Kuoppala <miku@iki.fi>, 2000 * * Fixes to reconstruction by Jakob Østergaard" <jakob@ostenfeld.dk> * Various fixes by Neil Brown <neilb@cse.unsw.edu.au> * * Changes by Peter T. Breuer <ptb@it.uc3m.es> 31/1/2003 to support * bitmapped intelligence in resync: * *      - bitmap marked during normal i/o *      - bitmap used to skip nondirty blocks during sync * * Additions to bitmap code, (C) 2003-2004 Paul Clements, SteelEye Technology: * - persistent bitmap code * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * You should have received a copy of the GNU General Public License * (for example /usr/src/linux/COPYING); if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include <linux/slab.h>#include <linux/delay.h>#include <linux/blkdev.h>#include <linux/module.h>#include <linux/seq_file.h>#include <linux/ratelimit.h>#include <linux/sched/signal.h> #include <trace/events/block.h> #include "md.h"#include "raid1.h"#include "bitmap.h" #define UNSUPPORTED_MDDEV_FLAGS		\	((1L << MD_HAS_JOURNAL) |	\	 (1L << MD_JOURNAL_CLEAN) |	\	 (1L << MD_HAS_PPL)) /* * Number of guaranteed r1bios in case of extreme VM load: */#define	NR_RAID1_BIOS 256 /* when we get a read error on a read-only array, we redirect to another * device without failing the first device, or trying to over-write to * correct the read error.  To keep track of bad blocks on a per-bio * level, we store IO_BLOCKED in the appropriate 'bios' pointer */#define IO_BLOCKED ((struct bio *)1)/* When we successfully write to a known bad-block, we need to remove the * bad-block marking which must be done from process context.  So we record * the success by setting devs[n].bio to IO_MADE_GOOD */#define IO_MADE_GOOD ((struct bio *)2) #define BIO_SPECIAL(bio) ((unsigned long)bio <= 2) /* When there are this many requests queue to be written by * the raid1 thread, we become 'congested' to provide back-pressure * for writeback. */static int max_queued_requests = 1024; static void allow_barrier(struct r1conf *conf, sector_t sector_nr);static void lower_barrier(struct r1conf *conf, sector_t sector_nr); #define raid1_log(md, fmt, args...)				\	do { if ((md)->queue) blk_add_trace_msg((md)->queue, "raid1 " fmt, ##args); } while (0) #include "raid1-10.c" /* * for resync bio, r1bio pointer can be retrieved from the per-bio * 'struct resync_pages'. */static inline struct r1bio *get_resync_r1bio(struct bio *bio){	return get_resync_pages(bio)->raid_bio;} static void * r1bio_pool_alloc(gfp_t gfp_flags, void *data){	struct pool_info *pi = data;	int size = offsetof(struct r1bio, bios[pi->raid_disks]); 	/* allocate a r1bio with room for raid_disks entries in the bios array */	return kzalloc(size, gfp_flags);} static void r1bio_pool_free(void *r1_bio, void *data){	kfree(r1_bio);} #define RESYNC_DEPTH 32#define RESYNC_SECTORS (RESYNC_BLOCK_SIZE >> 9)#define RESYNC_WINDOW (RESYNC_BLOCK_SIZE * RESYNC_DEPTH)#define RESYNC_WINDOW_SECTORS (RESYNC_WINDOW >> 9)#define CLUSTER_RESYNC_WINDOW (16 * RESYNC_WINDOW)#define CLUSTER_RESYNC_WINDOW_SECTORS (CLUSTER_RESYNC_WINDOW >> 9) static void * r1buf_pool_alloc(gfp_t gfp_flags, void *data){	struct pool_info *pi = data;	struct r1bio *r1_bio;	struct bio *bio;	int need_pages;	int j;	struct resync_pages *rps; 	r1_bio = r1bio_pool_alloc(gfp_flags, pi);	if (!r1_bio)		return NULL; 	rps = kmalloc(sizeof(struct resync_pages) * pi->raid_disks,		      gfp_flags);	if (!rps)		goto out_free_r1bio; 	/*	 * Allocate bios : 1 for reading, n-1 for writing	 */	for (j = pi->raid_disks ; j-- ; ) {		bio = bio_kmalloc(gfp_flags, RESYNC_PAGES);		if (!bio)			goto out_free_bio;		r1_bio->bios[j] = bio;	}	/*	 * Allocate RESYNC_PAGES data pages and attach them to	 * the first bio.	 * If this is a user-requested check/repair, allocate	 * RESYNC_PAGES for each bio.	 */	if (test_bit(MD_RECOVERY_REQUESTED, &pi->mddev->recovery))		need_pages = pi->raid_disks;	else		need_pages = 1;	for (j = 0; j < pi->raid_disks; j++) {		struct resync_pages *rp = &rps[j]; 		bio = r1_bio->bios[j]; 		if (j < need_pages) {			if (resync_alloc_pages(rp, gfp_flags))				goto out_free_pages;		} else {			memcpy(rp, &rps[0], sizeof(*rp));			resync_get_all_pages(rp);		} 		rp->raid_bio = r1_bio;		bio->bi_private = rp;	} 	r1_bio->master_bio = NULL; 	return r1_bio; out_free_pages:	while (--j >= 0)		resync_free_pages(&rps[j]); out_free_bio:	while (++j < pi->raid_disks)		bio_put(r1_bio->bios[j]);	kfree(rps); out_free_r1bio:	r1bio_pool_free(r1_bio, data);	return NULL;} static void r1buf_pool_free(void *__r1_bio, void *data){	struct pool_info *pi = data;	int i;	struct r1bio *r1bio = __r1_bio;	struct resync_pages *rp = NULL; 	for (i = pi->raid_disks; i--; ) {		rp = get_resync_pages(r1bio->bios[i]);		resync_free_pages(rp);		bio_put(r1bio->bios[i]);	} 	/* resync pages array stored in the 1st bio's .bi_private */	kfree(rp); 	r1bio_pool_free(r1bio, data);} static void put_all_bios(struct r1conf *conf, struct r1bio *r1_bio){	int i; 	for (i = 0; i < conf->raid_disks * 2; i++) {		struct bio **bio = r1_bio->bios + i;		if (!BIO_SPECIAL(*bio))			bio_put(*bio);		*bio = NULL;	}} static void free_r1bio(struct r1bio *r1_bio){	struct r1conf *conf = r1_bio->mddev->private; 	put_all_bios(conf, r1_bio);	mempool_free(r1_bio, conf->r1bio_pool);} static void put_buf(struct r1bio *r1_bio){	struct r1conf *conf = r1_bio->mddev->private;	sector_t sect = r1_bio->sector;	int i; 	for (i = 0; i < conf->raid_disks * 2; i++) {		struct bio *bio = r1_bio->bios[i];		if (bio->bi_end_io)			rdev_dec_pending(conf->mirrors[i].rdev, r1_bio->mddev);	} 	mempool_free(r1_bio, conf->r1buf_pool); 	lower_barrier(conf, sect);} static void reschedule_retry(struct r1bio *r1_bio){	unsigned long flags;	struct mddev *mddev = r1_bio->mddev;	struct r1conf *conf = mddev->private;	int idx; 	idx = sector_to_idx(r1_bio->sector);	spin_lock_irqsave(&conf->device_lock, flags);	list_add(&r1_bio->retry_list, &conf->retry_list);	atomic_inc(&conf->nr_queued[idx]);	spin_unlock_irqrestore(&conf->device_lock, flags); 	wake_up(&conf->wait_barrier);	md_wakeup_thread(mddev->thread);} /* * raid_end_bio_io() is called when we have finished servicing a mirrored * operation and are ready to return a success/failure code to the buffer * cache layer. */static void call_bio_endio(struct r1bio *r1_bio){	struct bio *bio = r1_bio->master_bio;	struct r1conf *conf = r1_bio->mddev->private; 	if (!test_bit(R1BIO_Uptodate, &r1_bio->state))		bio->bi_status = BLK_STS_IOERR; 	bio_endio(bio);	/*	 * Wake up any possible resync thread that waits for the device	 * to go idle.	 */	allow_barrier(conf, r1_bio->sector);} static void raid_end_bio_io(struct r1bio *r1_bio){	struct bio *bio = r1_bio->master_bio; 	/* if nobody has done the final endio yet, do it now */	if (!test_and_set_bit(R1BIO_Returned, &r1_bio->state)) {		pr_debug("raid1: sync end %s on sectors %llu-%llu\n",			 (bio_data_dir(bio) == WRITE) ? "write" : "read",			 (unsigned long long) bio->bi_iter.bi_sector,			 (unsigned long long) bio_end_sector(bio) - 1); 		call_bio_endio(r1_bio);	}	free_r1bio(r1_bio);} /* * Update disk head position estimator based on IRQ completion info. */static inline void update_head_pos(int disk, struct r1bio *r1_bio){	struct r1conf *conf = r1_bio->mddev->private; 	conf->mirrors[disk].head_position =		r1_bio->sector + (r1_bio->sectors);} /* * Find the disk number which triggered given bio */static int find_bio_disk(struct r1bio *r1_bio, struct bio *bio){	int mirror;	struct r1conf *conf = r1_bio->mddev->private;	int raid_disks = conf->raid_disks; 	for (mirror = 0; mirror < raid_disks * 2; mirror++)		if (r1_bio->bios[mirror] == bio)			break; 	BUG_ON(mirror == raid_disks * 2);	update_head_pos(mirror, r1_bio); 	return mirror;} static void raid1_end_read_request(struct bio *bio){	int uptodate = !bio->bi_status;	struct r1bio *r1_bio = bio->bi_private;	struct r1conf *conf = r1_bio->mddev->private;	struct md_rdev *rdev = conf->mirrors[r1_bio->read_disk].rdev; 	/*	 * this branch is our 'one mirror IO has finished' event handler:	 */	update_head_pos(r1_bio->read_disk, r1_bio); 	if (uptodate)		set_bit(R1BIO_Uptodate, &r1_bio->state);	else if (test_bit(FailFast, &rdev->flags) &&		 test_bit(R1BIO_FailFast, &r1_bio->state))		/* This was a fail-fast read so we definitely		 * want to retry */		;	else {		/* If all other devices have failed, we want to return		 * the error upwards rather than fail the last device.		 * Here we redefine "uptodate" to mean "Don't want to retry"		 */		unsigned long flags;		spin_lock_irqsave(&conf->device_lock, flags);		if (r1_bio->mddev->degraded == conf->raid_disks ||		    (r1_bio->mddev->degraded == conf->raid_disks-1 &&		     test_bit(In_sync, &rdev->flags)))			uptodate = 1;		spin_unlock_irqrestore(&conf->device_lock, flags);	} 	if (uptodate) {		raid_end_bio_io(r1_bio);		rdev_dec_pending(rdev, conf->mddev);	} else {		/*		 * oops, read error:		 */		char b[BDEVNAME_SIZE];		pr_err_ratelimited("md/raid1:%s: %s: rescheduling sector %llu\n",				   mdname(conf->mddev),				   bdevname(rdev->bdev, b),				   (unsigned long long)r1_bio->sector);		set_bit(R1BIO_ReadError, &r1_bio->state);		reschedule_retry(r1_bio);		/* don't drop the reference on read_disk yet */	}} static void close_write(struct r1bio *r1_bio){	/* it really is the end of this request */	if (test_bit(R1BIO_BehindIO, &r1_bio->state)) {		bio_free_pages(r1_bio->behind_master_bio);		bio_put(r1_bio->behind_master_bio);		r1_bio->behind_master_bio = NULL;	}	/* clear the bitmap if all writes complete successfully */	bitmap_endwrite(r1_bio->mddev->bitmap, r1_bio->sector,			r1_bio->sectors,			!test_bit(R1BIO_Degraded, &r1_bio->state),			test_bit(R1BIO_BehindIO, &r1_bio->state));	md_write_end(r1_bio->mddev);} static void r1_bio_write_done(struct r1bio *r1_bio){	if (!atomic_dec_and_test(&r1_bio->remaining))		return; 	if (test_bit(R1BIO_WriteError, &r1_bio->state))		reschedule_retry(r1_bio);	else {		close_write(r1_bio);		if (test_bit(R1BIO_MadeGood, &r1_bio->state))			reschedule_retry(r1_bio);		else			raid_end_bio_io(r1_bio);	}} static void raid1_end_write_request(struct bio *bio){	struct r1bio *r1_bio = bio->bi_private;	int behind = test_bit(R1BIO_BehindIO, &r1_bio->state);	struct r1conf *conf = r1_bio->mddev->private;	struct bio *to_put = NULL;	int mirror = find_bio_disk(r1_bio, bio);	struct md_rdev *rdev = conf->mirrors[mirror].rdev;	bool discard_error; 	discard_error = bio->bi_status && bio_op(bio) == REQ_OP_DISCARD; 	/*	 * 'one mirror IO has finished' event handler:	 */	if (bio->bi_status && !discard_error) {		set_bit(WriteErrorSeen,	&rdev->flags);		if (!test_and_set_bit(WantReplacement, &rdev->flags))			set_bit(MD_RECOVERY_NEEDED, &				conf->mddev->recovery); 		if (test_bit(FailFast, &rdev->flags) &&		    (bio->bi_opf & MD_FAILFAST) &&		    /* We never try FailFast to WriteMostly devices */		    !test_bit(WriteMostly, &rdev->flags)) {			md_error(r1_bio->mddev, rdev);			if (!test_bit(Faulty, &rdev->flags))				/* This is the only remaining device,				 * We need to retry the write without				 * FailFast				 */				set_bit(R1BIO_WriteError, &r1_bio->state);			else {				/* Finished with this branch */				r1_bio->bios[mirror] = NULL;				to_put = bio;			}		} else			set_bit(R1BIO_WriteError, &r1_bio->state);	} else {		/*		 * Set R1BIO_Uptodate in our master bio, so that we		 * will return a good error code for to the higher		 * levels even if IO on some other mirrored buffer		 * fails.		 *		 * The 'master' represents the composite IO operation		 * to user-side. So if something waits for IO, then it		 * will wait for the 'master' bio.		 */		sector_t first_bad;		int bad_sectors; 		r1_bio->bios[mirror] = NULL;		to_put = bio;		/*		 * Do not set R1BIO_Uptodate if the current device is		 * rebuilding or Faulty. This is because we cannot use		 * such device for properly reading the data back (we could		 * potentially use it, if the current write would have felt		 * before rdev->recovery_offset, but for simplicity we don't		 * check this here.		 */		if (test_bit(In_sync, &rdev->flags) &&		    !test_bit(Faulty, &rdev->flags))			set_bit(R1BIO_Uptodate, &r1_bio->state); 		/* Maybe we can clear some bad blocks. */		if (is_badblock(rdev, r1_bio->sector, r1_bio->sectors,				&first_bad, &bad_sectors) && !discard_error) {			r1_bio->bios[mirror] = IO_MADE_GOOD;			set_bit(R1BIO_MadeGood, &r1_bio->state);		}	} 	if (behind) {		if (test_bit(WriteMostly, &rdev->flags))			atomic_dec(&r1_bio->behind_remaining); 		/*		 * In behind mode, we ACK the master bio once the I/O		 * has safely reached all non-writemostly		 * disks. Setting the Returned bit ensures that this		 * gets done only once -- we don't ever want to return		 * -EIO here, instead we'll wait		 */		if (atomic_read(&r1_bio->behind_remaining) >= (atomic_read(&r1_bio->remaining)-1) &&		    test_bit(R1BIO_Uptodate, &r1_bio->state)) {			/* Maybe we can return now */			if (!test_and_set_bit(R1BIO_Returned, &r1_bio->state)) {

Lines 1–500 of 3345.