Btrfs: do not mark the chunk as readonly if in degraded mode
If a RAID setup has chunks that span multiple disks, and one of those disks has failed, btrfs_chunk_readonly will return 1 since one of the disks in that chunk's stripes is dead and therefore not writeable. So instead if we are in degraded mode, return 0 so we can go ahead and allocate stuff. Without this patch all of the block groups in a RAID1 setup will end up read-only, which will mean we can't add new disks to the array since we won't be able to make allocations. Signed-off-by: Josef Bacik <josef@redhat.com> Signed-off-by: Chris Mason <chris.mason@oracle.com>
This commit is contained in:
		
					parent
					
						
							
								e3acc2a685
							
						
					
				
			
			
				commit
				
					
						f48b90756b
					
				
			
		
					 1 changed files with 5 additions and 0 deletions
				
			
		| 
						 | 
					@ -2538,6 +2538,11 @@ int btrfs_chunk_readonly(struct btrfs_root *root, u64 chunk_offset)
 | 
				
			||||||
	if (!em)
 | 
						if (!em)
 | 
				
			||||||
		return 1;
 | 
							return 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (btrfs_test_opt(root, DEGRADED)) {
 | 
				
			||||||
 | 
							free_extent_map(em);
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	map = (struct map_lookup *)em->bdev;
 | 
						map = (struct map_lookup *)em->bdev;
 | 
				
			||||||
	for (i = 0; i < map->num_stripes; i++) {
 | 
						for (i = 0; i < map->num_stripes; i++) {
 | 
				
			||||||
		if (!map->stripes[i].dev->writeable) {
 | 
							if (!map->stripes[i].dev->writeable) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue