forked from mirrors/linux
		
	md: Allow read error in a single drive raid1 to be passed up.
If a raid1 only has a single working device and gets a read error, we choose to simply return that error up to the filesystem (or whatever) rather than failing the whole array. However the codes doesn't quite do that. We attempt a readbalance which allocates the same drive, so we retry the read - indefinitely. Instead: If read_balance in the error case chooses the same drive that just failed, treat it as a failure and don't retry. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
		
							parent
							
								
									eda58a85ec
								
							
						
					
					
						commit
						4706b349f4
					
				
					 1 changed files with 2 additions and 1 deletions
				
			
		|  | @ -1640,7 +1640,8 @@ static void raid1d(mddev_t *mddev) | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			bio = r1_bio->bios[r1_bio->read_disk]; | 			bio = r1_bio->bios[r1_bio->read_disk]; | ||||||
| 			if ((disk=read_balance(conf, r1_bio)) == -1) { | 			if ((disk=read_balance(conf, r1_bio)) == -1 || | ||||||
|  | 			    disk == r1_bio->read_disk) { | ||||||
| 				printk(KERN_ALERT "raid1: %s: unrecoverable I/O" | 				printk(KERN_ALERT "raid1: %s: unrecoverable I/O" | ||||||
| 				       " read error for block %llu\n", | 				       " read error for block %llu\n", | ||||||
| 				       bdevname(bio->bi_bdev,b), | 				       bdevname(bio->bi_bdev,b), | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 NeilBrown
						NeilBrown