mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	zed: Ignore false 'atari' partitions in autoreplace
libudev will sometimes falsely identify an 'atari' partition on a blank disk, preventing it from being used in an autoreplace. This seems to be a known issue. The workaround is to just ignore the fake partition and continue with the autoreplace. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Tony Hutter <hutter2@llnl.gov> Closes #13497 Closes #13632
This commit is contained in:
		
							parent
							
								
									f48d9b4269
								
							
						
					
					
						commit
						acd7464639
					
				| @ -208,6 +208,12 @@ zed_udev_monitor(void *arg) | ||||
| 		 * if this is a disk and it is partitioned, then the | ||||
| 		 * zfs label will reside in a DEVTYPE=partition and | ||||
| 		 * we can skip passing this event | ||||
| 		 * | ||||
| 		 * Special case: Blank disks are sometimes reported with | ||||
| 		 * an erroneous 'atari' partition, and should not be | ||||
| 		 * excluded from being used as an autoreplace disk: | ||||
| 		 * | ||||
| 		 * https://github.com/openzfs/zfs/issues/13497
 | ||||
| 		 */ | ||||
| 		type = udev_device_get_property_value(dev, "DEVTYPE"); | ||||
| 		part = udev_device_get_property_value(dev, | ||||
| @ -215,15 +221,24 @@ zed_udev_monitor(void *arg) | ||||
| 		if (type != NULL && type[0] != '\0' && | ||||
| 		    strcmp(type, "disk") == 0 && | ||||
| 		    part != NULL && part[0] != '\0') { | ||||
| 			const char *devname = | ||||
| 			    udev_device_get_property_value(dev, "DEVNAME"); | ||||
| 
 | ||||
| 			if (strcmp(part, "atari") == 0) { | ||||
| 				zed_log_msg(LOG_INFO, | ||||
| 			    "%s: skip %s since it has a %s partition already", | ||||
| 			    __func__, | ||||
| 			    udev_device_get_property_value(dev, "DEVNAME"), | ||||
| 			    part); | ||||
| 				    "%s: %s is reporting an atari partition, " | ||||
| 				    "but we're going to assume it's a false " | ||||
| 				    "positive and still use it (issue #13497)", | ||||
| 				    __func__, devname); | ||||
| 			} else { | ||||
| 				zed_log_msg(LOG_INFO, | ||||
| 				    "%s: skip %s since it has a %s partition " | ||||
| 				    "already", __func__, devname, part); | ||||
| 				/* skip and wait for partition event */ | ||||
| 				udev_device_unref(dev); | ||||
| 				continue; | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		/*
 | ||||
| 		 * ignore small partitions | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Tony Hutter
						Tony Hutter