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]; | ||||
| 			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" | ||||
| 				       " read error for block %llu\n", | ||||
| 				       bdevname(bio->bi_bdev,b), | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 NeilBrown
						NeilBrown